首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >DirectX11 -矩阵翻译

DirectX11 -矩阵翻译
EN

Stack Overflow用户
提问于 2013-12-17 09:00:21
回答 1查看 4.7K关注 0票数 1

我正在创建一个3D场景,我刚刚在其中插入了一个立方体对象。它在原点被渲染得很好,但是当我试图旋转它,然后转换它时,我得到了一个巨大的变形立方体。下面是我代码中的问题区域:

代码语言:javascript
运行
AI代码解释
复制
D3DXMATRIX cubeROT, cubeMOVE;

D3DXMatrixRotationY(&cubeROT, D3DXToRadian(45.0f));
D3DXMatrixTranslation(&cubeMOVE, 10.0f, 2.0f, 1.0f);

D3DXMatrixTranspose(&worldMatrix, &(cubeROT * cubeMOVE));

// Put the model vertex and index buffers on the graphics pipeline to prepare them for drawing.
m_Model->Render(m_Direct3D->GetDeviceContext());

// Render the model using the light shader.
result = m_LightShader->Render(m_Direct3D->GetDeviceContext(), m_Model->GetIndexCount(), worldMatrix, viewMatrix, projectionMatrix, 
                   m_Model->GetTexture(), m_Light->GetDirection(), m_Light->GetDiffuseColor());


// Reset the world matrix.
m_Direct3D->GetWorldMatrix(worldMatrix);

我发现是转置的cubeMOVE部分给了我这个问题,但我不知道为什么。

这样可以正确地旋转立方体:

代码语言:javascript
运行
AI代码解释
复制
D3DXMatrixTranspose(&worldMatrix, &cubeROT);

这正确地转换了多维数据集:

代码语言:javascript
运行
AI代码解释
复制
D3DXMatrixTranslation(&worldMatrix, 10.0f, 2.0f, 1.0f);

但这会创建变形的网格:

代码语言:javascript
运行
AI代码解释
复制
D3DXMatrixTranspose(&worldMatrix, &cubeMOVE);

我对DirectX非常陌生,所以任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-17 09:13:59

我不认为transpose会像你想的那样做。要组合变换矩阵,只需将它们相乘--不需要转置。我想应该是:

代码语言:javascript
运行
AI代码解释
复制
worldMatrix = cubeROT * cubeMOVE;

编辑

“转置”似乎适用于旋转而不是平移,原因是转置翻转了矩阵的非对角线部分。但是对于一个轴向旋转矩阵来说,这使得矩阵几乎没有变化。(它确实改变了一些迹象,但这只会影响旋转的方向。)对于一个翻译矩阵,应用转置会完全变形它--因此你会看到结果。

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

https://stackoverflow.com/questions/20640220

复制
相关文章

相似问题

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