【问题标题】:C++ OpenGL Empty Cube with Visible Edges具有可见边缘的 C++ OpenGL 空立方体
【发布时间】:2012-11-06 06:23:00
【问题描述】:

我正在尝试创建一个立方体。我希望立方体本身清晰(黑色,因为背景是黑色),但我希望 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();

【问题讨论】:

  • 你应该使用着色器,你不应该使用glBegin
  • 您确实应该使用 GL_Lines,无论如何您都必须在数学上或使用引擎进行物理处理。

标签: c++ opengl


【解决方案1】:

您可以只绘制“线框”立方体。您将看到边缘但看不到面。将填充模式设置为连线和渲染线而不是多边形。

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

欢迎来到图形!

【讨论】:

  • 对于更复杂但更新的版本,this tutorial 引入了顶点数组。 glVertex 已被弃用,但我同意它对于初学者来说是最简单的方法。
【解决方案2】:

也许我应该只做 glBegin(GL_LINES) 而不必担心 要碰撞的表面,因为我可以创建它 数学上?

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

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

【讨论】:

    【解决方案3】:

    您可以将多边形模式(glPolygonMode,在此处阅读)设置为 GL_LINE 以实现相同的效果。

    也许我应该只执行 glBegin(GL_LINES) 而不必担心会发生碰撞的表面,因为我可以通过数学方式创建它?

    OpenGL 不会帮助您处理任何类型的冲突。

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

    This 是一个不错的起点

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 2015-01-26
      • 1970-01-01
      相关资源
      最近更新 更多