我的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);
答案 0 :(得分:0)
根据您拥有的数据,看起来好像第二个顶点指针是错误的:
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat),
BUFFER_OFFSET(m_tailleVerticesBytes));
uv-coordinates之间的偏移量设置为3个浮点数,但由于你只提供其中两个,它应该是2 * sizeof(GLfloat)
。