gpt4 book ai didi

c# - 在相机 View 中偏移 3D 对象

转载 作者:太空宇宙 更新时间:2023-11-03 16:22:05 28 4
gpt4 key购买 nike

我是新来的。我在根据相机的视角(这是一个词吗?)渲染我的模型的最后一点遇到了一些麻烦。

我已经成功创建了我的 3D 相机,能够在 3D 空间中旋转它,并移动/旋转我的枪支模型以与相机的移动/旋转相对应。

然而,最后一部分,我想不通。我正在尝试偏移枪支模型在相机旋转轴上的位置,但找不到有关如何执行此操作的任何信息。

这是我目前的代码,没有我想要的偏移量。

GunWorldMatrix = Matrix.CreateScale(0.5f) * 
CameraRotation *
Matrix.CreateTranslation(CameraPosition);

可以这么说,它最终将枪“放在我的头上”。完美定位和旋转模型,但我不知道如何根据它自己的轴或相机的轴添加任何偏移量。 (所以你可以把它放在腰射位置等。)

虽然,这个;

Matrix view = Matrix.CreateLookAt(new Vector3(0, 2, 0), new Vector3(0, 0, 0), Vector3.UnitY);

作为 View ,用这个;

GunWorldMatrix = Matrix.CreateScale(0.5f) *
Matrix.CreateRotationX(-0.15f) *
Matrix.CreateTranslation(new Vector3(0.2f, 1.65f, 0f));

因为如果 Guns World Matrix 被卡住在没有旋转的轴上,它的位置是完美的……这可能有帮助也可能没有帮助。有什么想法吗?

最佳答案

viewMatrix(相机建模)由三个正交向量组成:
X=[xx,xy,xz], Y=[yx,yy,yz], Z=[zx,zy,zz] 加上相机位置 T=[tx,ty,tz]

[xx yx zx   tx]   --> order is [0 4      ]             [ 0 1  2 ]
[xy yy zy ty] [1 5 ] -> R^-1 = [ 4 5 6 ]
[xz yz zz tz] [2 ... ] [ 8 9 10 ]
[0 0 0 1] [3 15]

这里通常 Y 向量表示,X 是,Z 是lookAt 的位置——所有都归一化为长度 1。

您只需关注左上角的 3x3 旋转矩阵及其逆 R^-1,对于归一化旋转矩阵来说,它通常是转置:R^-1 = R'。

要在“屏幕”右侧移动某些东西,您将添加到 object.t_vector += camera^(-1).x_vector。这也可以通过距离、FoV 和纵横比进行缩放,以将对象精确地向右移动 1 个像素或与屏幕尺寸成比例。

注意:这是 View 矩阵的 openGL 约定,其中向量是列向量,矩阵按列-行顺序排列。其他系统可能以行列顺序表示或存储矩阵。

关于c# - 在相机 View 中偏移 3D 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13598840/

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