在我的片段着色器中,我可以加载纹理,然后执行以下操作:
uniform sampler2D tex;
void main(void) {
vec4 color = texture2D(tex, gl_TexCoord[0].st);
gl_FragColor = color;
}
Run Code Online (Sandbox Code Playgroud)
这将当前像素设置为纹理的颜色值.我可以修改这些等,它运作良好.
但是有几个问题.我如何判断"我"是哪个像素?例如,假设我想将像素100,100(x,y)设置为红色.其他一切都变黑了.我该怎么做:
"if currentSelf.Position()==(100,100); then color = red; else color = black?"
?
我知道如何设置颜色,但我如何获得"我的"位置?
其次,如何从邻居像素获取值?
我试过这个:
vec4 nextColor = texture2D(tex, gl_TexCoord[1].st);
Run Code Online (Sandbox Code Playgroud)
但不清楚它的回归是什么?如果我像素100,100; 如何从101,100或100,101获取值?
主题说明了一切.我正在使用OpenGL和OpenCL,如果我可以使用无符号的ByteBuffer来存储数据,那么会让生活更轻松.
这是在社区大学.我失败了,但想知道答案.
问题是这样的:你有一个代表图像的2D结构阵列.每个结构都有一个红色,绿色,蓝色和alpha值.可以有更多信息,但不是解决问题所必需的.
假设图像是4000x4000或1600万个元素.每个角落都需要更新/检查每个元素.
对于您需要的每个元素:
"你不能蛮力,以更聪明的方式思考;你需要一个更好的算法"
我基本上做了一个循环.我是最快的,但他说这是"关于找到一个更好的算法,而不是使用可爱的编译器和指针技巧".
还需要在纯C中.没有OpenMP/Threads或OpenGL着色,OpenCL等......只有带有标准库的ANSI C(甚至禁止使用GNU/POSIX库).
我询问了按位操作,他说"那些在C [??]中非常昂贵,它是关于编写一个快速而可靠的算法,而不是你不断提出的这些可爱的技巧".
那有什么提示吗?
有人知道一个有标准小部件的好的SDL GUI库吗?它们中有很多都出现在谷歌中,但大多数看起来都像是在1992年才出现.
我有很多需要传递给其他对象的对象.这是一个游戏,因此玩家需要了解世界,世界需要了解地图等.
我想要创建一个"Master"对象管理器,然后用它来注册这些对象,而不是传递所有这些.我会传递主对象管理器,所有需要的东西都可以做一个"masterObject.getPlayer()"或其他什么.
这是一个真正的设计模式吗?如果是这样,它叫什么?任何缺点.
我正在使用VS 2010专业版.
首先,C没有bool类型?我只需要使用0/1的int.似乎很奇怪,因为大多数语言认为布尔是一种标准类型.
我也有Visual Studio 2010 Pro,但没有"C项目".我刚刚创建了一个Empty C++ Project.文件名以.c结尾
这个问题是关键字搞砸了(在编辑器中显示bool为高亮/有效,但编译器不喜欢它).
我去修复/添加组件,他们有C#,F#,C++,Visual Basic; 但没有C?
我想做一些GPU编程.怎么去这里?我想学习一些"开放",跨平台和"更高"的语言.我不想只是锁定GPU供应商,也不想锁定OS,平台等.
我在这里有什么选择?Cuda,OpenCL,OpenMP,其他?他们的利弊是什么?
那么G/HLSL和PhysX呢?
我正在考虑做"通用"编程,一些数学,数字运算,模拟等.也许吐出一些漂亮的图形,但不是专门的图形编程.
编译HelloWorld.c有效; 但是当我尝试添加一些外部库时,它会窒息.
我将.a和.dll文件添加到我的'Libraries'中; 将两者的路径添加到PATH和库路径.我还放了包含文件并配置了Include.据说我拥有的图书馆与win/mingw兼容.他们也为MSVC提供了不同的下载功能.
令人沮丧.ld.exe提供完整路径,显然在那里,我有权读/写它们.我也没有路径包含它们(它们在库路径和路径中).
我不明白为什么这不起作用.
c:/ mingw/bin /../ lib/gcc/mingw32/4.5.2 /../../../../ mingw32/bin/ld.exe:找不到-lC:\ rhino\data\lib\glfw.dll c:/ mingw/bin /../ lib/gcc/mingw32/4.5.2 /../../../../ mingw32/bin/ld.exe:找不到-lC:\rhino\data\lib\libglfwdll.ac:/ mingw/bin /../ lib/gcc/mingw32/4.5.2 /../../../../ mingw32/bin/ld.exe:不能find -lC:\ rhino\data\lib\libglfw.a
C:\Users\rhino>dir C:\rhino\data\lib\libglfw.a
04/15/2011 05:24 PM 70,384 libglfw.a
Run Code Online (Sandbox Code Playgroud)
更新:
我甚至将它们添加到我的C:\ MinGW\lib路径中,它仍然无法找到它们.
我正在尝试使用OpenGL 3.x +为背景(2D)绘制四边形.不推荐使用四边形,因此目标是使用两个三角形来制作填充屏幕的矩形.这是有效的,但我不是100%清楚这里的一切.
建立
GLuint positionBufferObject;
GLfloat vertexPositions[] =
{
-1.0f, -1.0f, 0.0f, 1.0f,
-1.0f, 1.0f, 0.0f, 1.0f,
1.0f, 1.0f, 0.0f, 1.0f,
1.0f, -1.0f, 0.0f, 1.0f,
-1.0f, -1.0f, 0.0f, 1.0f,
};
glGenBuffers(1, &positionBufferObject);
glBindBuffer(GL_ARRAY_BUFFER, positionBufferObject);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexPositions), vertexPositions, GL_STATIC_DRAW);
Run Code Online (Sandbox Code Playgroud)
vertexPositions,这是一个顶点数组.glGenBuffers()是说,我想要1个缓冲区并分配id &positionBufferObject?glBufferData()上传vertexPositions到GPU的内存; 但是由于我没有给它一个ID,它怎么知道上传呢? 画
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 5);
glDisableVertexAttribArray(0);
Run Code Online (Sandbox Code Playgroud)
glEnableVertexAttribArray() 只是说我要用数组0绘图?glDrawArrays() - 如果我想绘制两个顶点数组怎么办?它是如何知道要渲染的?它知道从上面的命令?glVertexAttribPointer()?glDrawArrays() 清楚了.清理,我觉得这是对的吗?
glBindBuffer(GL_ARRAY_BUFFER, 0);
glDeleteBuffers(1, &positionBufferObject);
Run Code Online (Sandbox Code Playgroud)
我只进行一次安装/清理.
奖励积分: …
假设我有一个巨大的浮动数字,比如一万亿个小数位.很明显长双不能保持这一点.我们还假设我有一台拥有足够内存的计算机来容纳它.你怎么做这样的事情?