2012-11-05 119 views
3

我想创建一个立方体。我希望立方体本身是清晰的(黑色,因为背景是黑色的),但是我想让12条线条变得细而白。是否只有这样才能创建线条并将它们放置在边缘之上?还是有不同的方法来处理它?C++ OpenGL空立方体可见边

原因是我不得不在球包内弹跳球。

也许我应该做glBegin(GL_LINES),甚至不用担心曲面发生碰撞,因为我可以用数学方法创建曲面?

我只是创建我的面这样的:

glBegin(GL_POLYGON); 
glVertex3f(-0.5, -0.5, 0.5); 
glVertex3f(-0.5, 0.5, 0.5); 
glVertex3f(-0.5, 0.5, -0.5); 
glVertex3f(-0.5, -0.5, -0.5); 
glEnd(); 
+0

您应该使用着色器和你不应该使用'glBegin'。 – 2012-11-05 21:23:51

+0

您确实应该使用GL_Lines,您无论如何都必须以数学方式或使用引擎进行物理学。 –

回答

6

您可以绘制'线框'立方体。你会看到边缘,但没有面孔。将填充模式设置为连线并渲染线条而不是多边形。

glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); // this tells it to only render lines 

glBegin(GL_LINES); 

// endpoints of 1 line/edge 
glVertex3f(... 
glVertex3f(... 

// endpoints of second line/edge 
glVertex3f( 
glVertex3f( 

// on up thru all 12 lines/edges 

glEnd(); 

现在,这不是最有效的。也许你可以使用线条,或者只画6个四边形。但由于这是“第一天”,这可能是一个简单的开始。

最终你会不想使用固定功能 - 它已被弃用。但是这会给你一个适应矩阵和光照等环境。当你有严肃的gemoetry渲染时,你会把它放入缓冲区并以大块的形式发送给GPU,让你的GLSL着色器处理显卡上的数据。

欢迎使用图形!

+0

为更复杂的版本,但更新的版本[本教程](http://www.songho.ca/opengl/gl_vertexarray.html)引入了顶点数组。glVertex已弃用,但我同意这是初学者最简单的方法。 –

+0

@VincentNivoliers一旦你过去了“只是在屏幕上获取_something_”,并且尝试去做具体的事情,它确实不那么简单。 – Cubic

1

也许我应该做在glBegin(GL_LINES)甚至不会担心 表面碰撞,因为我可以创建 数学?

正确。你已经知道你的立方体的界限。

做一些行,并反弹你的球。

0

你可以设置多边形模式(glPolygonMode,在这里读取)GL_LINE实现同样的事情。

也许我应该只是在glBegin(GL_LINES)甚至不会担心表面碰撞,因为我可以只创建一个数学?

OpenGL不会帮你碰到任何类型的碰撞。

作为一个有点偏离主题的笔记,考虑使用更现代的方法。即使您没有使用较新的OpenGL版本,立即模式绘图也会被弃用。

This是一个体面的地方开始