在3D世界空间(Opengl)中查找ViewPort矩形

问题描述 投票:0回答:1

我需要有关矩阵转换的帮助,才能在3d坐标(世界空间)中找到viewPort的角。

我已经做过一些测试,但是我找不到解决方法。

步骤1:我有Projection和Model Matrix(也有ViewPort大小)。为了找到“屏幕”的中心,我使用了以下方法:OpenGL.UnProject(0.0, 0.0, 0.0)Coordinate (0, 0, 0) * ProjectionMtx.Inverse

步骤2:现在,例如,需要视口的左上角,如何在世界空间中找到3D点?可能我应该使用视口大小,但是如何?

opengl 3d matrix-multiplication projection-matrix
1个回答
0
投票

OpenGL.UnProject从规范化的设备空间转换为世界空间。规范化的设备空间是一个立方体,其左,下,近(-1,-1,-1)和右,上,远(1、1、1)。

orthographic projection,观看体积为长方体。在Perspective projection处的观看音量为frustum。投影矩阵将视图空间转换为规范化的设备空间。您在视口上看到的是将规范化的设备空间投影到其xy平面。

通常,可以通过不投影标准化设备空间的8个角点来获得查看空间的角。

left_bottom_near  = OpenGL.UnProject(-1.0, -1.0, -1.0)
right_bottom_near = OpenGL.UnProject( 1.0, -1.0, -1.0)
left_top_near     = OpenGL.UnProject(-1.0,  1.0, -1.0)
right_top_near    = OpenGL.UnProject( 1.0,  1.0, -1.0)
left_bottom_far   = OpenGL.UnProject(-1.0, -1.0,  1.0)
right_bottom_far  = OpenGL.UnProject( 1.0, -1.0,  1.0)
left_top_far      = OpenGL.UnProject(-1.0,  1.0,  1.0)
right_top_far     = OpenGL.UnProject( 1.0,  1.0,  1.0)
© www.soinside.com 2019 - 2024. All rights reserved.