5

我很难理解 OpenGL 透视图。我已经阅读了大量信息,但它并没有帮助我尝试实现我所追求的目标。这可以确保我的 3d 场景填满每台 Android 设备上的整个屏幕。

为了测试这一点,我将在 3d 空间中绘制一个四边形,最终应该触及每个角落,填满整个设备的屏幕。然后我可以使用这个四边形,或者实际上它的坐标来指定某个 Z 距离处的边界框,我可以使用它来放置我的几何图形并确保它们填满我的屏幕。当屏幕调整大小时,或者我要在另一个屏幕分辨率上运行它时,我会重新计算这个边界框和几何图形。我不是在谈论静态几何,而是说我想用球填充屏幕,无论有多大或多少球,唯一重要的是屏幕被填充并且没有多余的可见截锥体外的球。

在此处输入图像描述

  • 据我了解,在指定视口时,您实际上将像素值绑定到截锥体的边界。我知道您实际上可以通过窗口像素匹配 3d 几何位置的方式设置正交视图,但我不确定这在透视图中如何工作。
  • 这里我假设视口的宽度和高度映射到 nearZ。所以当一个球在 Z=1f 它有它的原始大小
  • 当将球移动到屏幕中时,向 farZ 方向移动,球将按比例缩小以使透视起作用。例如,Z=51f 的球在我的屏幕上会显得更小,我需要更多的球来填满整个屏幕。
  • 现在为了做到这一点,我正在寻找紫色边界
  • 实际上,我需要这些边界以不同的截锥体尺寸(宽度 x 高度)填充整个屏幕,而球的截锥体角度和 Z 距离始终相同
  • 我想我可以使用三角函数来计算这些紫色边界(见蓝色三角形注释)
  • 我是否正确标记了截锥体角度,它是截锥体的垂直角度?
  • 有人可以详细说明绿色 1f 和 -1f 值,因为我似乎已经读过一些关于它的东西?似乎是一些用于调整截锥体内几何形状的标量?

我实际上希望能够以编程方式将几何图形定位在 3d 空间内的视口边界上,以任何分辨率/窗口为任何任意 Android 设备。

注意:我有一个 Flash 背景,它使用具有已知宽度 x 高度的任何分辨率的舞台(视觉区域),这使得使用绝对测量或百分比测量可以轻松定位/缩放资产。我想我正试图弄清楚这个系统如何应用于 OpenGL 的透视图。

4

1 回答 1

2

我猜这篇使用 gluUnproject的帖子回答了这个问题。

于 2011-09-26T17:59:37.997 回答