【问题标题】:Java OpenGL draw a starJava OpenGL 绘制星星
【发布时间】:2009-12-10 23:16:02
【问题描述】:

我正在开发一个 OpenGL 项目,我想在其中画一颗星星。它不一定必须是 3d 外观的明星(2d 外观很好)。我有星星中心的 xyz 坐标,我知道我想要它的大小。我不会做太多的 OpenGL/3d 数学编程,所以这里的任何帮助都将不胜感激。

编辑:更多细节:我不确定这是否可能,但我可以在 3d 空间的某个点绘制一个 2D 外观的星星吗?我尝试了一个简单的正方形并尝试了类似的东西:

gl.glTranslated(x, y, z);
gl.glBegin(GL.GL_QUADS);
gl.glVertex2D(x-size,y-size);
gl.glVertex2D(x-size,y+size);
gl.glVertex2D(x+size,y+size);
gl.glVertex2D(x+size,y-size);
gl.glEnd();

即使我转换为 x、y、z,正方形的深度似乎也不正确。它似乎比它应该更靠近屏幕的前面。是否可以像这样在 3d 中转换 2d 形状?

谢谢,

杰夫

【问题讨论】:

  • 请提供您目前所拥有的,并说明究竟是什么给您带来了麻烦。没有人会为你编写整个程序
  • Jonathan,我不是在找人为我编写整个程序,但我应该更清楚。我添加了一些额外的细节。
  • 听起来您可能一直在使用正交投影,而不是透视投影。
  • 德鲁,谢谢。如果这是问题所在,我会阅读更多关于矩阵的内容并再次支持投票!

标签: java opengl drawing shapes


【解决方案1】:

您是否设置了projection matrix?如果不是,它可能设置为标识,这意味着顶点的 z 值不会影响它们在屏幕空间中的渲染位置。为了获得你想要的深度感,你需要创建一个透视投影矩阵。您可以使用 glFrustum() 创建投影矩阵。这是一个例子(来自Wikipedia's OpenGL page):

glMatrixMode( GL_PROJECTION );      /* Subsequent matrix commands will affect the projection matrix */
glLoadIdentity();                   /* Initialise the projection matrix to identity */
glFrustum( -1, 1, -1, 1, 1, 1000 ); /* Apply a perspective-projection matrix */

网上有大量免费的 OpenGL 教程,因此您应该可以轻松找到更多信息。

【讨论】:

  • 有趣。 (仅供参考,我在 NASA WorldWind 应用程序中工作)。但是,如果我执行 gluSphere(...) 之类的操作,球体确实会绘制在正确的位置。我会阅读更多关于矩阵的内容,谢谢!
【解决方案2】:

我决定使用 3D 绘图,看起来翻译实际上已经为我完成了,我不需要重新翻译。所以实际上我的翻译偏离了重点。感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    • 1970-01-01
    • 2013-09-04
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多