不渲染任何东西(想想它的bcs of shaders)

时间:2015-10-29 12:09:22

标签: opengl rendering

我的opengl程序什么也没渲染。我认为这个问题来自我的着色器。有人可以告诉我什么是错的,或者如果没有错,请告诉我问题可能来自哪里?

片段着色器:

#version 330 core
in vec2 TexCoords;
out vec4 color;

uniform sampler2D image;
uniform vec3 spriteColor;

void main()
{  
    color = vec4(spriteColor, 1.0) * texture(image, TexCoords);
}  

顶点着色器

#version 330 core
layout (location = 0) in vec3 vertex;
layout (location = 2) in vec2 text;

out vec2 TexCoords;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
void main()
{
    TexCoords = text;
    gl_Position = projection * view * model * vec4(vertex, 1.0);
}

我用来向着色器发送数据的函数:

void SpriteRenderer::initRenderData()
{

GLfloat taille = 1.0f;
taille /= 2;

int m_tailleCoordTextureBytes = 72 * sizeof(float);
int m_tailleVerticesBytes = 108 * sizeof(float);

    GLuint VBO;
    GLfloat verticesTmp[] = {-taille, -taille, -taille,   taille, -taille, -taille,   taille, taille, -taille,     // Face 1
                       -taille, -taille, -taille,   -taille, taille, -taille,   taille, taille, -taille,     // Face 1

                       taille, -taille, taille,   taille, -taille, -taille,   taille, taille, -taille,       // Face 2
                       taille, -taille, taille,   taille, taille, taille,   taille, taille, -taille,         // Face 2

                       -taille, -taille, taille,   taille, -taille, taille,   taille, -taille, -taille,      // Face 3
                       -taille, -taille, taille,   -taille, -taille, -taille,   taille, -taille, -taille,    // Face 3

                       -taille, -taille, taille,   taille, -taille, taille,   taille, taille, taille,        // Face 4
                       -taille, -taille, taille,   -taille, taille, taille,   taille, taille, taille,        // Face 4

                       -taille, -taille, -taille,   -taille, -taille, taille,   -taille, taille, taille,     // Face 5
                       -taille, -taille, -taille,   -taille, taille, -taille,   -taille, taille, taille,     // Face 5

                       -taille, taille, taille,   taille, taille, taille,   taille, taille, -taille,         // Face 6
                       -taille, taille, taille,   -taille, taille, -taille,   taille, taille, -taille};      // Face 6


    GLfloat coordtextures[] = {0, 0,   1, 0,   1, 1,     // Face 1
                           0, 0,   0, 1,   1, 1,     // Face 1

                           0, 0,   1, 0,   1, 1,     // Face 2
                           0, 0,   0, 1,   1, 1,     // Face 2

                           0, 0,   1, 0,   1, 1,     // Face 3
                           0, 0,   0, 1,   1, 1,     // Face 3

                           0, 0,   1, 0,   1, 1,     // Face 4
                           0, 0,   0, 1,   1, 1,     // Face 4

                           0, 0,   1, 0,   1, 1,     // Face 5
                           0, 0,   0, 1,   1, 1,     // Face 5

                           0, 0,   1, 0,   1, 1,     // Face 6
                           0, 0,   0, 1,   1, 1};    // Face 6

    for (int i = 0; i < 72; i++)
    {
        m_coord_texture[i] = coordtextures[i];
    }

    for (int j = 0; j < 108; j++)
    {
        m_vertices[j] = verticesTmp[j];
    }



    glGenBuffers(1, &VBO);

        glBindBuffer(GL_ARRAY_BUFFER, VBO);
        glBufferData(GL_ARRAY_BUFFER, sizeof(m_vertices)+sizeof(m_coord_texture), 0, GL_STATIC_DRAW);

        glBufferSubData(GL_ARRAY_BUFFER, 0, m_tailleVerticesBytes, m_vertices);
        glBufferSubData(GL_ARRAY_BUFFER, m_tailleVerticesBytes, m_tailleCoordTextureBytes, m_coord_texture);


    glBindBuffer(GL_ARRAY_BUFFER, 0);



    glGenVertexArrays(1, &this->quadVAO);

        glBindVertexArray(this->quadVAO);

        glBindBuffer(GL_ARRAY_BUFFER, VBO);

            // Accès aux vertices
            glEnableVertexAttribArray(0);
            glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), BUFFER_OFFSET(0));

            // Accès aux coord des textures
            glEnableVertexAttribArray(2);
            glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), BUFFER_OFFSET(m_tailleVerticesBytes));


        glBindBuffer(GL_ARRAY_BUFFER, 0);
    glBindVertexArray(0);

1 个答案:

答案 0 :(得分:0)

根据您拥有的数据,看起来好像第二个顶点指针是错误的:

glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat),
                      BUFFER_OFFSET(m_tailleVerticesBytes));

uv-coordinates之间的偏移量设置为3个浮点数,但由于你只提供其中两个,它应该是2 * sizeof(GLfloat)