2015-09-14 62 views
0

是否可以使用OpenGL 4+仅使用glVertexAttrib3f调用?以下在传统的OpenGL模式下工作,但是当我切换到OpenGL 4时,没有任何东西被渲染。OpenGL 4:使用glVertexAttrib绘制

glBegin(GL_TRIANGLES); 
glVertexAttrib3f(1, 0, 0, -1); 
glVertexAttrib3f(0, -0.5, -0.5, -0.5); 
glVertexAttrib3f(0, -0.5, 0.5, -0.5); 
glVertexAttrib3f(0, 0.5, 0.5, -0.5); 

glVertexAttrib3f(1, 0, 0, 1); 
glVertexAttrib3f(0, 0.5, -0.5, 0.5); 
glVertexAttrib3f(0, 0.5, 0.5, 0.5); 
glVertexAttrib3f(0, -0.5, 0.5, 0.5); 
.... 
glEnd(); 

我想我应该摆脱那些在glBegin()glEnd()函数,也许调用(4,8),但还没有得到它的工作。

+1

'glBegin'和'glEnd'不要在OpenGL 4 – immibis

+0

存在,我相信这应该还是在兼容性轮廓工作。显然不是在核心配置文件上下文中。 –

回答

1

glBegin/glEnd不推荐使用旧功能,它们不是OpenGL核心配置文件自3.1版以来的一部分。总之,他们不应该再用了。如果你想尽管使用它们,你可以,但是在这种情况下,你必须在你的OpenGL环境中使用compatibility profile,否则它们不受支持。

如果你的背景和窗口创建使用GLFW,您可以设置在context creation有以下提示的相容性分布:

glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE); 

我会强烈建议以下教程网站

了解现代OpenGL功能和用法。

+0

我不认为它已被弃用,根据此链接版本支持一路到4.5。 https://www.opengl.org/sdk/docs/man/html/glVertexAttrib.xhtml – George

+1

你是对的,但glBegin/glEnd已弃用。在立即模式渲染(glBegin/glEnd)不再推荐使用后,glVertexAttrib *函数仅用于我在我删除的答案中解释的“默认顶点常量”功能。 – plasmacel

0

在OpenGL 3.3及更高版本(甚至可能只有3.0和更高版本?)中,如果不明确指定着色器程序,就不能绘制任何东西。

另外,在OpenGL ES 2.0中,你需要这个。

OpenGL: What's the deal with deprecation?

Does OpenGL ES 2.0 require a shader for any vertex rendering?

+0

其实我使用着色器,上面的工作正常使用OpenGL 4之前的着色器,并从我看到glVertexAttrib3f不被弃用。 – George

+0

是啊'vertexAttrib3f'不被弃用,但我不确定你说的是什么意思,当你在“glBegin ... glEnd'的旁边说”只...调用“ –