好的,所以我创建了一个处理基本OpenGL渲染的库。它包含三个缓冲区,一个用于顶点,uv和法线。在主渲染函数中,我绑定缓冲区,启用顶点属性,然后调用glDrawArrays()。但是我遇到了一个意想不到的问题,那就是基于代码的更基于工程的问题,即我一次只能绑定一个纹理。因此,当我绘制它们时,所有顶点将具有相同的纹理,我如何绕过它?如果您需要更多来源,我会发布。
主渲染功能
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER,this->_VBO);
glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER,this->_TBO);
glEnableVertexAttribArray(2);
glBindBuffer(GL_ARRAY_BUFFER,this->_NBO);
glDrawArrays(GL_TRIANGLES,0,this->polyCount);
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glDisableVertexAttribArray(2);
缓冲液:
//Designated Vertex Buffer
std::array<GLfloat,BUFFER_SIZE> BUFFER_1;
UINT bufferIndex1;
//Designated Normal Buffers
std::array<GLfloat,BUFFER_SIZE> BUFFER_2;
UINT bufferIndex2;
//Designated UV Buffer
std::array<GLfloat,BUFFER_SIZE> BUFFER_3;
UINT bufferIndex3;
答案 0 :(得分:0)
我们通常在这里做的是通过“材料”将网格分割成子网格。具有不同纹理的对象在技术上是不同的材质,因此您可以单独渲染它。通过使用称为Atlas的东西,可以使用多个纹理渲染单个网格。也就是说,您将纹理打包到一个位图中,并根据您要使用的纹理选择该位图中的纹理坐标。