我已经检查并仔细检查了多个教程,看起来我的步骤是正确的……我错过了一些明显的东西吗?
以下是该计划的全部内容:
#include <stdlib.h>#include <stdio.h>#include <GL/glew.h>#include <gluT/glut.h>gluint VBO;struct vector { float _x; float _y; float _z; vector() { } vector(float x,float y,float z) { _x = x; _y = y; _z = z; }};voID render(){ glClear(GL_color_BUFFER_BIT); glEnabLevertexAttribarray(0); glBindBuffer(GL_ARRAY_BUFFER,VBO); glVertexAttribPointer(0,3,GL_float,GL_FALSE,0); glDrawArrays(GL_TRIANGLES,3); gldisabLevertexAttribarray(0); glutSwapBuffers();}voID create_vbo(){ vector verts[3]; verts[0] = vector(-1.0f,-1.0f,0.0f); verts[1] = vector(1.0f,0.0f); verts[2] = vector(0.0f,1.0f,0.0f); glGenBuffers(1,&VBO); glBindBuffer(GL_ARRAY_BUFFER,VBO); glBufferData(GL_ARRAY_BUFFER,sizeof(verts),verts,GL_STATIC_DRAW);}int main(int argc,char** argv){ glutinit(&argc,argv); glutinitdisplayMode(gluT_DOUBLE|gluT_RGBA); glutinitwindowsize(1024,768); glutinitwindowposition(100,100); glutCreateWindow("Triangle Test"); glutdisplayFunc(render); glewInit(); glClearcolor(0.0f,0.0f,0.0f); create_vbo(); glutMainLoop(); return 0;}
更新:事实证明,没有“程序”(即编译的着色器文件)以这种方式绘制会产生未定义的行为(您的图形卡越新,它就越有可能工作).
因为我的卡是正确的,并且只支持OpenGL 2.1,所以找到一个合适的着色器示例有点困难 – 似乎在OpenGL的演变过程中不同阶段有很多不同的教程.
我的顶点着色器(整个文件):
voID main(){ gl_position = ftransform();}
我的片段着色器(整个文件):
voID main(){ gl_Fragcolor = vec4(0.4,0.4,0.8,1.0);}
我使用了this OpenGL Tutorial Site的LoadShaders函数来创建程序,现在,我也可以看到三角形!
(感谢@ chbaker0指出我正确的方向.)
解决方法 我不知道这是否会对你有所帮助,但在你的create_vbo()函数中你有:glBufferData(GL_ARRAY_BUFFER,GL_STATIC_DRAW);
试试这个:
glBufferData( GL_ARRAY_BUFFER,sizeof( verts[0] * 3 ),&verts[0],GL_STATIC_DRAW );
在此函数调用之后,将此函数调用添加到create_vbo()函数的末尾
// This MUST BE LAST! Used to Stop The Buffer!glBindBuffer( GL_ARRAY_BUFFER,0 );
我很难看到你的错误.在我的项目中,我确实有一些vbos,但我也使用vaos.我的代码能够在OpenGL 2.0 – 4.5中工作,但是对于旧版本,由于API中已弃用的功能,因此逻辑上存在分歧.我也不使用过剩.我希望这有帮助.
我注意到的另一件事是你注意你的顶点缠绕顺序吗?这意味着OpenGL在ccw订单或CW订单中使用它们?背面剔除是打开还是关闭?在设置和配置OpenGL上下文时,需要考虑很多元素.自从我使用旧版本的OpenGL以来已经有一段时间了,但我知道一旦你开始使用特定版本或更新版本,你将不得不提供自己的模型视图投影矩阵,这是需要考虑的事情.
总结以上是内存溢出为你收集整理的c – OpenGL拒绝绘制三角形全部内容,希望文章能够帮你解决c – OpenGL拒绝绘制三角形所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)