VAO不渲染颜色OpenGL?

 2016-10-22  87 views 
 
 
0

我一直希望能够在关于创建和渲染VAO的OpenGL问题上得到一些帮助。这样做的目的很简单,就是利用这个:VAO不渲染颜色OpenGL?

glBegin(GL_TRIANGLES); 
glColor4f(1.0f, 0.0f, 0.0f, 1.0f); 
glVertex3f(-0.5f, 0.5f, 0.0f); 
glVertex3f(-0.5f, -0.5f, 0.0f); 
glVertex3f(0.5f, -0.5f, 0.0f); 
glVertex3f(-0.5f, 0.5f, 0.0f); 
glVertex3f(0.5f, -0.5f, 0.0f); 
glVertex3f(0.5f, 0.5f, 0.0f); 
glEnd(); 

这使得在窗口中间的红色正方形,与顶点,颜色和指数把它变成一个VAO。现在,这是我迄今为止尽可能创造VAO(对不起,如果这是一个有点长的代码):

//initialize all data 
verts_amt = 6; 

Vertex* verts = (Vertex*)malloc(sizeof(Vertex) * verts_amt); 
int* indices = (int*)malloc(sizeof(int) * verts_amt); 

verts[0] = createVertex(-0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f); 
verts[1] = createVertex(-0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f); 
verts[2] = createVertex(0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f); 
verts[3] = createVertex(-0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f); 
verts[4] = createVertex(0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f); 
verts[5] = createVertex(0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f); 

int i; 
for(i = 0; i < 6; i ++) 
    indices[i] = i; 

unsigned int vbo, ibo; 
//create, bind, set data, and then unbind for the vbo and ibo 
glGenBuffers(1, &vbo); 
glBindBuffer(GL_ARRAY_BUFFER, vbo); 
glBufferData(GL_ARRAY_BUFFER, verts_amt * sizeof(Vertex), verts, GL_STATIC_DRAW); 
glBindBuffer(GL_ARRAY_BUFFER, 0); 

glGenBuffers(1, &ibo); 
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo); 
glBufferData(GL_ELEMENT_ARRAY_BUFFER, verts_amt * sizeof(int), indices, GL_STATIC_DRAW); 
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); 

//create vao, bind vao, bind and set data for vbo, bind ibo, then unbind vao 
glGenVertexArrays(1, &vao); 
glBindVertexArray(vao); 

glBindBuffer(GL_ARRAY_BUFFER, vbo); 

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), NULL); 
glEnableVertexAttribArray(0); 
glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, r)); 
glEnableVertexAttribArray(1); 

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo); 
glBindVertexArray(0); 

在你想知道的情况下,Vertex只是一个结构由七漂浮在订单x, y, z, r, g, b, a。通过在这个题目类似的问题看后,我仍然没有看到什么我缺少和/或不能做对,因为当我与这些简单的线条使它:

glBindVertexArray(vao); 
glDrawElements(GL_TRIANGLES, verts_amt, GL_UNSIGNED_INT, NULL); 

它呈现只是一个competey白色广场。请记住,我不会改变我的渲染循环的其他任何内容,当然,除掉Vertex3fglBegin/glEndColor4f调用。我还应该提到,我没有使用着色器程序,但我不完全确定这是否会在这里发生彻底改变。任何帮助,将不胜感激!

+1

做事情GL3 +的方式需要着色器 – Alex

回答

1

我还应该提到我没有使用着色器程序。

不能使用glVertexAttribPointer没有的着色器。这些功能不能与OpenGL固定功能管线(FFP)连接。

如果要使用FFP并仍使用缓冲区对象,则应使用相应的功能。 glVertexPointer(无“Attrib”)和glColorPointer是与glVertexglColor等同的阵列。这些与VAO合作很好。

所以你唯一需要改变的是你的两个glVertexAttribPointer调用是glVertexPointerglColorPointer(当然也可以相应地调整参数)。

posted on   zxddesk  阅读(28)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示