gpt4 book ai didi

c++ - OpenGL-添加第二个着色器属性会导致黑屏

转载 作者:行者123 更新时间:2023-12-01 14:58:16 25 4
gpt4 key购买 nike

季节问候大家!

我正在尝试编写一个通用的DrawPolygon()函数,该函数将采用多个边,位置,颜色和大小,并呈现n边的常规多边形。有人可以告诉我以下代码有什么问题吗?

void drawPolygon(GLuint& vao, GLuint& vbo, GLfloat x,
GLfloat y, GLfloat radius, GLint numSides) {
auto numVertices = numSides + 2;
auto twoPi = 2.0f * M_PI;
auto vertexData = new GLfloat[numVertices * 5];

for (int i = 0; i < numVertices; i++) {
vertexData[i * 5] = x + (radius *
cos(i * twoPi / numSides));
vertexData[i * 5 + 1] = y + (radius *
sin(i * twoPi / numSides));
vertexData[i * 5 + 2] = 0.0f; // Colour data: red
vertexData[i * 5 + 3] = 1.0f; // Colour data: green
vertexData[i * 5 + 4] = 0.0f; // Colour data: blue
}

glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, numVertices * sizeof(
GLfloat) * 5, vertexData, GL_STATIC_DRAW);
glBindVertexArray(vao);

glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE,
5 * sizeof(GLfloat), (void*)0);

glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 5 *
sizeof(GLfloat), (void*)(2 * sizeof(GLfloat)));
glDrawArrays(GL_TRIANGLE_FAN, 0, numVertices);
auto error = glGetError(); // returns 0, i.e. no error

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

delete[] vertexData;
}

顶点着色器:
#version 330 core

layout (location = 0) in vec2 aPos;
layout (location = 1) in vec3 aColour;

uniform mat4 projection;

out vec3 fColour;

void main() {
gl_Position = projection * vec4(
aPos.x, aPos.y, 0.0, 1.0);
fColour = aColour;
}

片段着色器:
#version 330 core

in vec3 fColour;
out vec4 FragColor;

void main() {
FragColor = vec4(fColour, 1.0);
}

如您所见,我现在已经对颜色值进行了硬编码,但是打算在它们起作用后将它们作为 vec3传递。目前,它只是给我一个纯黑的屏幕:S删除第二个属性并使用 uniform可以,但是我想知道为什么给定的代码不起作用。 MTIA!

最佳答案

发布的代码没有设置投影的统一性-也许是在其他地方完成的,但是尚不清楚是否是这种情况。

关于c++ - OpenGL-添加第二个着色器属性会导致黑屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59474485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com