OpenGL纹理加载困境

时间:2013-11-26 01:21:23

标签: c++ opengl glsl

好的,所以我创建了一个处理基本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;

1 个答案:

答案 0 :(得分:0)

我们通常在这里做的是通过“材料”将网格分割成子网格。具有不同纹理的对象在技术上是不同的材质,因此您可以单独渲染它。通过使用称为Atlas的东西,可以使用多个纹理渲染单个网格。也就是说,您将纹理打包到一个位图中,并根据您要使用的纹理选择该位图中的纹理坐标。