C++ OpenGL-通过实例属性定义模型矩阵

C++ OpenGL-通过实例属性定义模型矩阵,c++,opengl,opengl-4,C++,Opengl,Opengl 4,我是OpenGL的新手,我正在尝试使用实例绘制许多3D矩形。目前,我已将每个3d矩形放置在不同的位置,并且它们正确显示 问题:我现在希望每个3d矩形具有不同的旋转,由我定义,并将其传递给顶点着色器。但是,当我这样做时,矩形不再出现在屏幕上 我没有提供完整的代码,因为它相当长。我只是提供了重要的部分,希望我在某个地方犯了一个愚蠢的错误,你可以指出 以下是顶点着色器: #version 410 core layout (location = 0) in vec3 position; layout (

我是OpenGL的新手,我正在尝试使用实例绘制许多3D矩形。目前,我已将每个3d矩形放置在不同的位置,并且它们正确显示

问题:我现在希望每个3d矩形具有不同的旋转,由我定义,并将其传递给顶点着色器。但是,当我这样做时,矩形不再出现在屏幕上

我没有提供完整的代码,因为它相当长。我只是提供了重要的部分,希望我在某个地方犯了一个愚蠢的错误,你可以指出

以下是顶点着色器:

#version 410 core
layout (location = 0) in vec3 position;
layout (location = 1) in vec3 offset;
layout (location = 2) in vec2 texCoord;
layout (location = 3) in mat4 instanceMatrix;

uniform mat4 view;
uniform mat4 projection;


out vec2 TexCoord;
void main()
{
    TexCoord = texCoord;
    gl_Position = projection * view * instanceMatrix * vec4(position + offset, 1.0f) ;

}
以下是片段着色器:

#version 410 core

out vec4 color;
void main()
{
    color = vec4(1.0f,1.0f,1.0f, 1.0f);
}

这是从IM发送数据的C++代码:

// definition of models variable : std::vector<glm::mat4> models(0);


// Sending the Model matrix for each Rectangle
    GLuint buffer;
    glGenBuffers(1, &buffer);
    glBindBuffer(GL_ARRAY_BUFFER, buffer);
    glBufferData(GL_ARRAY_BUFFER, models.size() * sizeof(glm::mat4), &models[0], GL_STATIC_DRAW);

    GLsizei vec4Size = sizeof(glm::vec4);
    glEnableVertexAttribArray(3);
    glVertexAttribPointer(3, 4, GL_FLOAT, GL_FALSE, 4 * vec4Size, (GLvoid*)0);
    glEnableVertexAttribArray(4);
    glVertexAttribPointer(4, 4, GL_FLOAT, GL_FALSE, 4 * vec4Size, (GLvoid*)(vec4Size));
    glEnableVertexAttribArray(5);
    glVertexAttribPointer(5, 4, GL_FLOAT, GL_FALSE, 4 * vec4Size, (GLvoid*)(2 * vec4Size));
    glEnableVertexAttribArray(6);
    glVertexAttribPointer(6, 4, GL_FLOAT, GL_FALSE, 4 * vec4Size, (GLvoid*)(3 * vec4Size));

    glVertexAttribDivisor(3, 1);
    glVertexAttribDivisor(4, 1);
    glVertexAttribDivisor(5, 1);
    glVertexAttribDivisor(6, 1);

    // unfocus
    glBindBuffer(GL_ARRAY_BUFFER, 0);
    glBindVertexArray(0);
//模型变量定义:std::vector models(0);
//发送每个矩形的模型矩阵
胶合缓冲液;
glGenBuffers(1,&buffer);
glBindBuffer(GL_数组_BUFFER,BUFFER);
glBufferData(GL_数组_BUFFER,models.size()*sizeof(glm::mat4),&models[0],GL_STATIC_DRAW);
GLsizei vec4Size=sizeof(glm::vec4);
GlenableVertexAttributeArray(3);
glvertexattributepointer(3,4,GL_FLOAT,GL_FALSE,4*vec4Size,(GLvoid*)0);
GlenableVertexAttributeArray(4);
glvertexattributepointer(4,4,GL_FLOAT,GL_FALSE,4*vec4Size,(GLvoid*)(vec4Size));
GlenableVertexAttributeArray(5);
glvertexattributepointer(5,4,GL_FLOAT,GL_FALSE,4*vec4Size,(GLvoid*)(2*vec4Size));
GlenableVertexAttributeArray(6);
glvertexattributepointer(6,4,GL_FLOAT,GL_FALSE,4*vec4Size,(GLvoid*)(3*vec4Size));
glvertexattributionor(3,1);
glvertexattributionor(4,1);
glvertexattributionor(5,1);
glvertexattributionor(6,1);
//不聚焦
glBindBuffer(GL_数组_BUFFER,0);
glBindVertexArray(0);