带有可见边的C ++ OpenGL空立方体

时间:2012-11-05 21:17:23

标签: c++ opengl

我正在尝试创建一个多维数据集。我希望立方体本身是清晰的(黑色,因为背景是黑色的),但我希望12条线条变得薄而白。是唯一的方法来创建线条并将它们放在边缘的顶部?或者有不同的方法来处理它?<​​/ p>

原因是我必须在盒子里面制作球。

也许我应该做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();

3 个答案:

答案 0 :(得分: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个四边形。但由于这是“第一天”,这可能是一个简单的开始。

最终你根本不想使用固定功能 - 它已被弃用。但这将为您提供一个适应矩阵和照明等的环境。当您有严格的宝石渲染时,您将把它放入缓冲区并以大块的形式发送到GPU,让您的GLSL着色器处理显卡上的数据。

欢迎来到图片!

答案 1 :(得分:1)

  

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

正确。您已经知道了多维数据集的边界。

做一些线,然后反弹你的球。

答案 2 :(得分:0)

您可以将多边形模式(glPolygonMode,此处读取)设置为GL_LINE以实现相同的功能。

  
    

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

  

OpenGL不会帮助您解决任何类型的冲突。

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

This是一个不错的起点