gpt4 book ai didi

java - 查看管道和 3D 转换

转载 作者:太空宇宙 更新时间:2023-11-04 12:42:23 25 4
gpt4 key购买 nike

我的问题在计算机图形领域非常基础,但不知何故我找不到答案。

序言:

我想编写一个在 Canvas 上打印多边形的程序,并且我希望允许用户使用多边形 - 缩放、平移和旋转(围绕 x/y/z 轴)。

我应该只使用java AWT;不是 JOGL(用于 openGL 的 java 库)。

<小时/>

我通过程序的输入文件接收多边形作为 3d 世界坐标,以及“相机”属性,例如相机坐标、观察点、向上 vector 和窗口大小(用于从 3d 到 2d 的投影)。

<小时/>

第一个问题:

我的第一个问题是编写查看管道,因此 3d 世界坐标将转换为查看坐标(相机坐标),然后将其投影到 2d 坐标并执行剪辑以创建透视。我看过无数的视频和方法,但我无法决定最终的矩阵。

<小时/>

第二个问题:

我的第二个问题是,在哪里应用 3D 变换矩阵。变换应该应用于原始世界坐标(然后当然继续查看管道)还是直接应用于查看坐标(并从该点继续管道)?

为了澄清起见,我们将查看管道表示为 A->B->C->D,它在每个用户转换上重新计算,并将用户启动的转换(可以是上述任何一个)表示为 T。

我关心的是是否执行 TA->B->C->D 或 A->TB->C->D。

感谢各位的帮助。

最佳答案

通常从顶点坐标到屏幕坐标的方式是

(1) vertex -> (2) model -> (3) world -> (4) view -> (5) screen

举个例子:

  1. 您最初指定的多边形坐标
  2. 也许您可以缩放/旋转/剪切点来创建模型
  3. 您将模型放置在世界中
  4. 您将相机放置在世界中(或者更确切地说,您移动世界以适合您的相机位置)。您可以在此处放置 lookAt矩阵。
  5. 将其投影到屏幕上

当我们向右乘法时,我们在程序中编写它时需要交换顺序。最终的语句如下所示:

outPosition = screenProjection*worldToView*modelToWorld*polygonToModel*inPosition

所以你看,无论你使用 TA->B->C->D 还是 A->TB->C->D 都会产生两种不同的效果:第一个效果与我上面举例的效果类似(即 T 将用作 polygonToModel),否则它将用作 modelToWorld 转换。两者都有效,只是产生不同的结果。

请注意,这里的所有变换都是 4 x 4 矩阵。步骤 2 - 4 中的变换都可以是单位矩阵(即没有缩放/剪切/旋转或任何其他操作),但是对于投影,您需要创建一个平截头体。您可以使用类似 here 之类的内容自己创建这个。 ,但是使用 java 的 3D 数学库可能会更容易。

关于java - 查看管道和 3D 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36703985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com