3

我正在尝试创建一个立方体。我希望立方体本身清晰(黑色,因为背景是黑色),但我希望 12 条线是细的和白色的。这样做是创建线条并将它们放在边缘之上的唯一方法吗?还是有不同的方法来处理它?

原因是我必须创造在盒子内弹跳的球。

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

3 回答 3

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 着色器处理显卡上的数据。

欢迎来到图形!

于 2012-11-05T21:25:25.597 回答
1

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

正确的。您已经知道立方体的边界。

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

于 2012-11-05T21:24:58.607 回答
0

You could set the polygon mode (glPolygonMode, read here) to GL_LINE to achieve the same thing.

Maybe I should just do glBegin(GL_LINES) and not even worry about surfaces to collide against since I can just create that mathematically?

OpenGL isn't going to help you with collisions of any sort.

As a somewhat off topic note, consider using a more modern approach. Immediate mode drawing is effectively deprecated, even if you aren't using the newer OpenGL versions.

This is a decent place to start

于 2012-11-05T21:27:13.213 回答