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

标签 c# .net 3d xna-4.0

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

我已经成功创建了我的 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/

相关文章:

javascript - 提取 -webkit-transform matrix3d 值

c# - .NET 框架 : Random number generator produces repeating pattern

c# - 无法从 C#.net 应用程序连接到 oracle 服务器

c++ - 使用 C++ 和 DirectX 从头开始​​在 3D 游戏中创建效果

.net - 使用.NET 操作其他应用程序的窗口?

c# - 解析没有反射对象的复杂 JSON?

opengl - 哪里指向OpenGL z轴?

c# - 从 OleDbCommand 返回值

c# - 找不到提供 Controller 名称的路由与请求 URI 匹配

c# - 在运行时配置 ASP.NET session 状态