首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DirectX11相机运动

DirectX11相机运动
EN

Stack Overflow用户
提问于 2014-03-26 20:10:56
回答 1查看 1.3K关注 0票数 0

所以我在我的程序中的一辆车上做了一些运动编程。

我只是在XMVECTOR pos上增加相机的XMVECTOR pos值吗?我早些时候就这样做了,它向前推进,几乎开始把摄像机转向地面。

XMVECTOR pos = XMVectorSet(x, y, z + mCarTranslation.z, 1.0f);

不管怎样,这是我代码的一部分。

代码语言:javascript
运行
复制
/ Convert Spherical to Cartesian coordinates.
float x = mRadius*sinf(mPhi)*cosf(mTheta);
float z = mRadius*sinf(mPhi)*sinf(mTheta);
float y = mRadius*cosf(mPhi);

mEyePosW = XMFLOAT3(x, y, z);

// Build the view matrix.
XMVECTOR pos    = XMVectorSet(x, y, z, 1.0f);
XMVECTOR target = XMVectorZero();
XMVECTOR up     = XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f);

XMMATRIX V = XMMatrixLookAtLH(pos, target, up);
XMStoreFloat4x4(&mView, V);

// Button down event.
if (GetAsyncKeyState('W') & 0x8000)
{
    mCarTranslation.z += -4.0f*dt;
}
if(GetAsyncKeyState('S') & 0x8000)
{
    mCarTranslation.z += 2.0f*dt;
}
if(GetAsyncKeyState('A') & 0x8000)
{
    mCarTranslation.x += 1.0f*dt;
}
if(GetAsyncKeyState('D') & 0x8000)
{
    mCarTranslation.x += -1.0f*dt;
}

XMMATRIX carScale = XMMatrixScaling(0.5f, 0.5f, 0.5f);
XMMATRIX carOffset = XMMatrixTranslation(mCarTranslation.x, mCarTranslation.y, mCarTranslation.z);
XMStoreFloat4x4(&mCarWorld, XMMatrixMultiply(carScale, carOffset));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-26 22:06:02

相机最终会向地面旋转,因为你要重新创建每一帧的矩阵,目标位置相同(0,0,0)。如果您希望保持相同的方向,则需要将目标位置设置为相对于眼睛位置,即target = XMVectorSet(x - xInitial, y - yInitial, z - zInitial, 1.0f)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22672013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档