如何渲染多个纹理
How to render multiple textures?
我试图了解如何在OpenGL中为不同的对象渲染多个纹理。我决定简单地尝试一下,据我所知,glActivate是用来选择正确的纹理的,但它并没有像我预期的那样工作。在我的代码中,显示了两个对象(依次),但它们具有相同的纹理。这是代码的纹理初始化部分:
bool (some args, unsigned int textureUnit, bool wrap)
{
// some code
OpenGL->glActiveTexture (GL_TEXTURE0 + textureUnit);
glGenTextures (1, &textureID);
glBindTexture (GL_TEXTURE_2D, textureID);
glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, targaImage);
if (wrap) {
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
}
else {
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
}
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
OpenGL->glGenerateMipmap (GL_TEXTURE_2D);
}
textureUnit对于第一个纹理是0,对于第二个是1。模型渲染代码:
{
OpenGL->glBindVertexArray (vertexArrayId);
glDrawElements (GL_TRIANGLES, indexCount, GL_UNSIGNED_INT, 0);
}
将glActive放在那部分之间或之前不会改变任何事情。所以我的问题是,如何渲染多个纹理?我应该把glActivate放到别的地方吗?或者我需要改变别的东西吗?
这里有一些误解,glActiveTexture调用是用于在绘制相同对象时管理多个纹理。对于不同的对象,你只需要绑定不同的纹理。当设置纹理时,只需删除对ActiveTexture的调用(或确保在绘制时它始终为0)。然后,绘制时:
{
OpenGL->glBindVertexArray (vertexArrayId);
glBindTexture(GL_TEXTURE_2D, textureID); /* this has to be set somehow */
glDrawElements (GL_TRIANGLES, indexCount, GL_UNSIGNED_INT, 0);
}
相关文章:
- OpenGL将纹理四边形渲染为(0,0)
- dx11 渲染到纹理仅显示透明颜色
- 纹理单位重叠?渲染了错误的纹理
- Qt OpenGL 渲染到纹理性能问题
- OpenGL:纹理渲染被卡住
- 如何使用着色器在 opengl es 中渲染四边形内部的部分纹理
- 在 STB/Opengl 中渲染白盒纹理
- 在使用 SDL2 从曲面创建的纹理上渲染纹理
- 从 FBO 渲染时在表面上重复纹理
- 我如何将Win32窗口渲染到OpenGL纹理
- 渲染到框架/纹理显示为空
- 将Pixeldata渲染到OpenGL纹理四边形中
- 无法将Android WebView渲染到C 和Java代码之间共享的外部纹理中
- OpenGL QT 4.8渲染到纹理浮点
- 是否可以将纹理作为渲染目标附加到默认的FrameBuffer
- DirectX 10.1 / C++:如何在 ID3D10Resource* 纹理上渲染精灵上的文本
- 纹理不渲染
- Directx9.0纹理映射渲染
- 纹理和渲染缓冲区在framebuffer对象上共享相同的空间吗?
- 如何在多样本纹理中渲染颜色和深度