gpt4 book ai didi

c++ - glDrawArrays 奇怪地绘制数组

转载 作者:搜寻专家 更新时间:2023-10-31 02:15:25 28 4
gpt4 key购买 nike

当我尝试使用 glDrawArrays 绘制圆时,它显示四分之一 circle

由代码生成的 VBO 是正确的。顺便说一句,没有 0,0,0 这样的坐标。它似乎只绘制正顶点,但如果我将顶点乘以 -1 glDrawArrays 会将它绘制在屏幕的另一侧。这是我的代码:

uint un_vertexArraySize = 20;
float f_radius = 1.0f;
float f_degrees = 0;
GLfloat f_vert[un_vertexArraySize*3];
// Generate circle vertices
for (int i=0; i<un_vertexArraySize*3; i+=3)
{
f_vert[i] = cos(f_degrees*M_PI/180)*f_radius;
f_vert[i+1] = sin(f_degrees*M_PI/180)*f_radius;
f_vert[i+2] = 0.0f;
f_degrees += (360/un_vertexArraySize);
}
// Do buffer stuff
GLuint vbo;
glGenBuffers(1, &vbo);
GLuint vao;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, un_vertexArraySize*3,
f_vert, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0); // unbind VBO
glBindVertexArray(0); // unbind VAO

// Start loop
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
shader.Use();
glBindBuffer(GL_ARRAY_BUFFER, vao);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_LINE_STRIP, 0, un_vertexArraySize*3);
glDisableVertexAttribArray(0);
shader.UnUse();
// End loop

片段着色器:

#version 130
void main(void)
{
gl_FragColor[0] = gl_FragCoord.x/640.0;
gl_FragColor[1] = gl_FragCoord.y/480.0;
gl_FragColor[2] = 0.2;
gl_FragColor[3] = 1.0f;
}

垂直着色器:

#version 130
attribute vec3 coord3d;

void main(void)
{
vec4 temp = vec4(coord3d, 1.0f);
gl_Position = temp;
}

我尝试用谷歌搜索或在 stackoverflow 上查找,但一无所获。

最佳答案

我现在无法对此进行测试,但在 glBufferData 中,您使用 un_vertexArraySize*3,即元素的数量,但我认为您错过了乘以 4(每个 float 的字节数),因此大小以字节为单位指定。这可以解释为什么你只画四分之一的圆

关于c++ - glDrawArrays 奇怪地绘制数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38523189/

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