我正在试图弄清楚如何在我的3D场景上制作半透明的2D叠加层,阅读OpenGL SuperBible第5版以供参考。
它有一个例子,它使用纹理目标GL_TEXTURE_RECTANGLE和名为sampler2DRect的GLSL统一类型将OpenGL徽标覆盖在场景上(在第7章中)。应该使用texture()命令在片段着色器中显示纹理。
本书中的示例使用了很多源文件,我很难在一个简单的程序中实现它,所以我想知道是否有人能指出一个简单的sampler2DRect示例。
我对切换到正交投影的部分没有任何问题,相反,当我尝试加载纹理时,它只是以白色显示表面。我的代码在这一点上变得非常混乱,我似乎无法确定问题所在,所以我宁愿从一个简单的例子开始,如果有一个可用的话。
P.S。我正在使用SFML 2.0rc加载图像文件,以防万一。
答案 0 :(得分:3)
error C1101: ambiguous overloaded function reference "mul(mat4, vec3)"
(0) : mat3x4 mul(mat3x1, mat1x4)
(0) : mat3 mul(mat3x1, mat1x3)
(0) : mat3x2 mul(mat3x1, mat1x2)
(0) : mat3x1 mul(mat3x1, mat1)
(0) : mat2x4 mul(mat2x1, mat1x4)
.....
这是一种非常冗长的方式告诉您,没有这样的功能可以将mat4
与vec3
相乘。然后列出mul
的所有合法变体。
当您将矩阵相乘时,您的尺寸必须匹配,您可能想要的是将mat4
乘以 vec4
。如果这是您的位置坐标,则添加1.0
作为向量的最终值:
uniform mat4 mvpMatrix;
in vec3 position;
main()
gl_Position = mvpMatrix * vec4(position, 1.0);
答案 1 :(得分:2)
除了蒂姆的回答,请确保:
矩形纹理的特殊项目:
另外:使用gDebugger。