使用OpenGL ES在任何分辨率上的视口边界

Wil*_*Kru 5 android opengl-es perspective

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

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

在此输入图像描述

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

我实际上希望能够在任何分辨率/窗口的任何Android设备的3d空间内针对视口边界进行programmaticaly定位几何.

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

Wil*_*Kru 2

我想这篇使用 gluUnproject 的文章回答了这个问题。