我有一个我创建的OpenGL自定义控件,目前语言中性,可以是任意合理的大小,例如宽度可以从1到屏幕宽度,高度可以从1到屏幕高度.....
所以当我从我的应用程序中绘制这个控件时,为了让我在2D和3D空间之间工作变得更轻松,我将左上角设置为x = 0,y = 0和z = 0,其中'eye'位于x = width / 2且y = height / 2且z = 0。
所以我要做的是为每个OpenGL单元映射1个像素。所以让我说我在设计器上调整此控件的宽度= 150像素和高度= 150像素,我知道如果我执行glVertex3f命令从角落精确地绘制10个像素的正方形,控件将处理设置z深度基于我的视角(目前设置为45度)将x和y置于GL环境中,因此0,0是左上角,屏幕区域的GL单位宽度我可以看到我绘制的位置是完全相同的作为我控制的宽度(150)和高度(150)。
例如。有一个150高度和300宽度控制,我知道通过猴子按键,完美的z深度是180.但我似乎无法弄清楚方程式将我的x和y高度和宽度与透视相关联以及如何关联到z深度。
不,我对正交视图不感兴趣,我希望我的控件在2d屏幕上显示3d。
为什么我要完成所有这些工作:这是一个自定义控件,我将自己用于3D用户界面屏幕开发。在绘制3d基元时,我更容易在像素中工作,因为大多数其他屏幕控件(即:网格视图,下拉等)以及我将使用它的自定义绘制3D UI元素也将以像素为单位,所以在控制翻译时掌握数学是最有意义的。这样就可以更容易地以这种方式响应鼠标命令。
我正在寻找的是什么:
数学的东西。对于任何已知的宽度,高度和视角'A',数学上最优的'Z'是什么?