【问题标题】:In what units are glVertex arguments measured in?glVertex 参数以什么单位测量?
【发布时间】:2014-05-26 18:06:26
【问题描述】:

所以我最近开始学习 JOGL,因为我对 Vanillla Java 感到无聊,因为我没有想到任何想法。我已经学会了如何绘制三角形、线条和一切简单的东西,但我不明白。什么是opengl测量单位,因为默认情况下它显然不计算像素。 我的渲染方法:

private void render(GLAutoDrawable drawable) {
    GL2 gl = drawable.getGL().getGL2();
    gl.glClear(GL.GL_COLOR_BUFFER_BIT);


    gl.glBegin(GL.GL_LINES);
    gl.glVertex3f( 0.25f, -0.25f, 0);
    gl.glVertex3f(-0.25f,  0.25f, 0);
    gl.glEnd(); }

即使是一个愚蠢的人也不会明白,渲染一条 0.25 像素宽的线是不可能的。那么这里有什么问题呢? :) 期待您的回答! 最好的问候!

【问题讨论】:

  • 我不确定是否有任何单位,但是...默认屏幕坐标是1.0-1.0 AFAIK.. 但是,您不仅限于使用这些坐标(在处理 0.0032 等内容时很难使用),所以为了更容易,您可以根据自己的喜好更改视图模型矩阵以扩展它。
  • 那些默认屏幕坐标是错误的。同样,您可以将它们设置为您想要的任何内容。如果您将屏幕尺寸设置为-1.0 - 1.0,那么0.0 将位于屏幕中间。许多程序将屏幕尺寸设置为匹配像素,因此1.0 GL 单位真的是 1 像素。
  • 顺便问下好问题。
  • @Qix 需要注意的是 [-1.0,1.0] 坐标范围适用于视口的角落(在窗口坐标中定义) .因此,如果没有视口映射,就无法在投影和像素比例之间建立任何关系。
  • 谢谢大家!我现在可以理解更多了 :) 很棒的人,很棒的网站!

标签: java opengl jogl


【解决方案1】:

Whatever you want them to be.

OpenGL 本身并没有任何规模的概念。事实上,大多数 3D 引擎并不关心。都是透视图。

如果您的塔是播放器高度的 3 倍,则播放器的 GL 高度可能是 1.05.00.1。这仅意味着您的塔高将分别为3.015.00.3

Minecraft,例如,在OpenGL单元中定义一个块为1.0;在“传说”中,这相当于游戏中的 1 米。一切都已按比例缩放以适应该模型。

【讨论】:

  • 明白,但我可以将单位更改为像素或类似的东西吗?我希望我不要问太多愚蠢的问题 :) 也非常感谢您的回答!
  • 当然;只需将视口大小设置为以像素为单位的屏幕大小。然后,您的单位将有效地缩放为每 1 个 GL 单位 1 个像素。
  • @Qix 设置视口只设置OpenGL渲染的位置;它不影响坐标。要渲染像素,请设置从 (0,0) 到 (screenw, screenh) 的正交投影矩阵。
  • @ColonelThirtyTwo s/viewport size/projection matrix/ :) 你是对的。
  • @ColonelThirtyTwo 但是它会影响投影图像的比例和偏移量;因此它确实影响对象空间坐标如何转换到窗口空间。要正确执行此操作(使对象空间坐标与像素比例匹配),您基本上需要投影矩阵和匹配视口的完美组合。很容易忘记第二部分,因为当您创建帧缓冲区时,GL 会自动将视口调整为窗口尺寸。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-31
  • 2018-02-01
  • 2018-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多