我是新来的。我在根据相机的视角(这是一个词吗?)渲染我的模型的最后一点遇到了一些麻烦。
我已经成功创建了我的 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/