沿向前矢量移动和导入模型 - DirectX11 C++
Moving and Imported model along the forward Vector - DirectX11 C++
我花了很长时间试图找出创建任何导入对象的前向向量的方法,这样我就可以完成玩家控件并添加广告牌。这是针对一个大学项目,其中我得到了一个设置的游戏对象类,以使用 MeshLoader 和 OBJLoader 类加载到对象中。 我目前正在使用 A .获取世界();它返回我一个XMFLOAT4X4,它应该给我世界上物体的数据。然后,我使用 XMLoadFloat4X4 将其转换为 XMMATRIX,然后将该矩阵中的每一行数据抓取到它自己的 XMVECTOR 中。我已经测试了这些并相信它们的顺序正确,但是当我按下前进键时,我的角色仍然没有移动的问题。我想知道我是否做错了什么,或者我只是错过了一些东西。
else if (GetAsyncKeyState(VK_UP))
{
XMFLOAT4X4 currrentWorld = _zaz.GetWorld();
XMMATRIX currentWorldM = XMLoadFloat4x4(&currrentWorld);
XMVECTOR scale = currentWorldM.r[1];
XMVECTOR rotation = currentWorldM.r[2];
XMVECTOR translation = currentWorldM.r[3];
XMVECTOR forward = currentWorldM.r[4];
forward = XMVector3Normalize(forward);
translation = XMVectorAdd(translation, forward);
newWorld = XMMATRIX(scale, rotation, translation, forward);
_zaz.SetWorld(&newWorld);
_zaz.UpdateWorld();
}
另一个问题是"_zaz。更新世界();似乎只能在我的更新方法中工作,即使更新时检查了所有键盘控件。
void GameObject::UpdateWorld()
{
XMMATRIX scale = XMLoadFloat4x4(&_scale);
XMMATRIX rotate = XMLoadFloat4x4(&_rotate);
XMMATRIX translate = XMLoadFloat4x4(&_translate);
XMStoreFloat4x4(&_world, scale * rotate * translate);
}
void GameObject::SetWorld(XMMATRIX* world)
{
XMStoreFloat4x4(&_world, *world);
}
它肯定是在读取值,我让游戏在按下应该运行上述代码的键"向上"时中断。设置所有值。汽车当前确实在旋转,如果我稍微旋转汽车然后破坏游戏,只有旋转和前进矢量会发生变化,哪个应该没问题?
在elseif 键按下代码的第二次迭代之后,所有向量的监视被调用
如果您有任何想法,它将有很大帮助。
我假设它将类似于:
else if (GetAsyncKeyState(VK_CONTROL))
{
XMFLOAT4 position = _cameraFree.GetEye();
XMFLOAT4 direction = _cameraFree.GetForward();
position.x -= (direction.x * 0.05f);
position.y -= (direction.y * 0.05f);
position.z -= (direction.z * 0.05f);
_cameraFree.SetEye(position);
_cameraFree.CalculateViewProjection();
}
使用XMFLOAT4作为相机数据,这很容易做到,而我的游戏对象所依赖的XMFLOAT4X4和XMMATRIX到目前为止还无法开始工作。如果还有我可以提供帮助的信息,请说!
希望这对你有帮助。
你想象currentWorldM
的方式是完全错误的。
首先,你做一个越界访问,XMMATRIX::r
只有 4 个元素,有效范围是 [0..3]。
其次,4x4 矩阵不是这样构建的,它包含合并的所有内容,您必须将其视为更像一个框架,i
j
k
3 个向量和一个位置O
。其中一个是你的前向向量,一个向上,一个向右(或向左)。
例如,刻度矩阵在r[0].x
r[1].y
和r[2].z
中,这只有在您不将其与旋转连接时才是正确的,之后,它将分布在整个矩阵上。
- 尝试导入pybind-opencv模块时出现libgtk错误
- 导入库可以跨dll版本工作吗
- QTableView:endMoveRows在模型中重置水平页眉大小
- 将IBM Rhapsody模型集成到VS 2019中
- 建议在运行时将带有类实例的列表从c++导入qml
- 旋转模型矩阵时的形状失真
- 导入/导出变量时出错
- 成员函数调用和C++对象模型
- 连接 dockerized 模型和 dockerized 数据库时出现"无法 SQLConnect"错误
- 打印 ONNXRUNTIME::图形没有模型
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 将QT项目导入Visual Studio 2019会给我带来很多LNK2001错误
- 沿向前矢量移动和导入模型 - DirectX11 C++
- 如何从CNTK导入TensorFlow模型
- 用于将三维模型导入OpenGL/C++项目的推荐文件格式和图形库
- GamePlay3d 引擎不会显示从 fbx 导入的模型
- 将搅拌机模型导入到DirectX 11.2 c++应用程序中
- 在相同的.obj模型文件上,Assimp查看器比Assimp c++导入器快得多
- 在DirectX 10中导入.x模型
- 将三维模型导入Direct3D 11示例