OpenGL纹理加载困境

OpenGL Texture Loading Predicament

本文关键字:困境 加载 纹理 OpenGL      更新时间:2023-10-16

好吧,所以我制作了一个处理基本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;

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