OpenGL 3.x核心sampler2DRect(GL_TEXTURE_RETANGLE)示例
OpenGL 3.x core sampler2DRect (GL_TEXTURE_RECTANGLE) example
我正试图弄清楚如何在我的3D场景上制作半透明的2D覆盖图,阅读OpenGL SuperBible第5版以供参考。
它有一个例子,使用纹理目标GL_texture_RETANGLE和名为sampler2DRect的GLSL统一类型将OpenGL徽标覆盖在场景上(在第7章中)。纹理应该使用texture()命令显示在片段着色器中。
这本书中的例子使用了许多源文件,我很难在一个简单的程序中实现它,所以我想知道是否有人能给我举一个更简单的sampler2DRect例子。
我对切换到正交投影的部分没有任何问题,相反,当我尝试加载纹理时,它只是以白色显示曲面。我的代码在这一点上变得非常混乱,我似乎无法确定问题所在,所以我宁愿从头开始,如果在任何地方都有更简单的示例的话。
附言:我使用SFML 2.0rc来加载图像文件,以防它很重要。
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);
除了Tim的答案外,还要确保:
- 您的纹理已绑定:glBindTexture(GL_texture_2D,textureID)
- 顶点着色器输出UV坐标:out vec2 UV
- 顶点着色器获取UV坐标:在vec2 UV中
- 具有UV的VBO存在、启用、绑定和设置(glEnableVertexAttribArray、glBindBuffer、glVertexAttribPointer)
- glEnable(GL_TEXTURE_2D)
矩形纹理的特殊项目:
- UV坐标为[0,width]x[0],height](矩形纹理的特殊情况)
- 确保你的四边形与纹理大小大致相同(rect.tex没有mipmaps)
- 请改用标准纹理。它们可以是NPOT
另外:使用gDebugger。
相关文章:
- SDL_CreateTextureFromSurface() "Invalid texture"错误?
- 尝试将 sf::Texture* 推送到 std::vector 时出错
- 从 texture() 切换到 texelFetch()
- 直接 X "Texture cannot be null"异常
- OpenGL to DirectX (Buffer To Texture To Screen)
- PNG Texture OpenGL es 2.0 Android NDK
- OpenGL Texture with alpha 和 glColor4f,glColor4f 正在影响纹理
- How to Blend two texture in OpenGL ES 1
- 如何使用 glDrawElementsInstanced + Texture Buffer Objects
- Opengl glBindTexture Using Last Texture Loaded
- 在 C++ 头文件中使用 tuple<sf::Texture、bool> 时出现问题
- CCRenderTexture 在子线程中崩溃 - "Could not attach texture to framebuffer"
- 错误:'textureID'是'Texture'的私有成员
- Design: GraphicManager, TexturesPool, Texture
- Cuda cudaGetTextureReference 返回"invalid texture reference"
- C++ & SDL Texture 无法加载,但 SDL_GetError() 不返回任何内容