簡體   English   中英

DirectX 11轉換/旋轉問題

[英]DirectX 11 Translation/Rotation Issue

我可以使用以下代碼將2d圖像轉換為0、0。

D3DXMATRIX worldMatrix, viewMatrix, orthoMatrix, rotation, movement;

// Get the world, view, and ortho matrices from the camera.
m_camera.GetViewMatrix(viewMatrix);
m_camera.GetWorldMatrix(worldMatrix);
m_camera.GetOrthoMatrix(orthoMatrix);

// Move the texture to the new position
D3DXMatrixTranslation(&movement, ((m_VerticeProperties->screenWidth / 2) * -1) + m_posX, 
    (m_VerticeProperties->screenHeight / 2) - m_posY, 0.0f);

worldMatrix = movement;

//float m_rotationZ = -90 * 0.0174532925f;
//D3DXMatrixRotationYawPitchRoll(&rotation, 0, 0, m_rotationZ);
//worldMatrix = rotation;

// Give the bitmap class what it needs to make source rect
m_bitmap->SetVerticeProperties(m_VerticeProperties->screenWidth, m_VerticeProperties->screenHeight, 
    m_VerticeProperties->frameWidth, m_VerticeProperties->frameHeight, m_VerticeProperties->U, m_VerticeProperties->V);

//Render the model (the vertices)
m_bitmap->Render(m_d3dManager.GetDeviceContext(), flipped);

//Render the shader
m_shader->Render(m_d3dManager.GetDeviceContext(), m_bitmap->GetIndexCount(), worldMatrix, viewMatrix, 
    orthoMatrix, m_bitmap->GetTexture(), m_textureTranslationU, m_VerticeProperties->translationPercentageV);

結果:

在此處輸入圖片說明

我也可以使用以下代碼旋轉圖像:

D3DXMATRIX worldMatrix, viewMatrix, orthoMatrix, rotation, movement;

// Get the world, view, and ortho matrices from the camera.
m_camera.GetViewMatrix(viewMatrix);
m_camera.GetWorldMatrix(worldMatrix);
m_camera.GetOrthoMatrix(orthoMatrix);

//// Move the texture to the new position
//D3DXMatrixTranslation(&movement, ((m_VerticeProperties->screenWidth / 2) * -1) + m_posX, 
//  (m_VerticeProperties->screenHeight / 2) - m_posY, 0.0f);

//worldMatrix = movement;

float m_rotationZ = 90 * 0.0174532925f;
D3DXMatrixRotationYawPitchRoll(&rotation, 0, 0, m_rotationZ);
worldMatrix = rotation;

// Give the bitmap class what it needs to make source rect
m_bitmap->SetVerticeProperties(m_VerticeProperties->screenWidth, m_VerticeProperties->screenHeight, 
    m_VerticeProperties->frameWidth, m_VerticeProperties->frameHeight, m_VerticeProperties->U, m_VerticeProperties->V);

//Render the model (the vertices)
m_bitmap->Render(m_d3dManager.GetDeviceContext(), flipped);

//Render the shader
m_shader->Render(m_d3dManager.GetDeviceContext(), m_bitmap->GetIndexCount(), worldMatrix, viewMatrix, 
    orthoMatrix, m_bitmap->GetTexture(), m_textureTranslationU, m_VerticeProperties->translationPercentageV);

結果:

在此處輸入圖片說明

我認為將平移和旋轉矩陣相乘並將它們設置為world矩陣將使我能夠立即看到兩種效果。

D3DXMatrixTranslation(&movement, ((m_VerticeProperties->screenWidth / 2) * -1) + m_posX, 
    (m_VerticeProperties->screenHeight / 2) - m_posY, 0.0f);

float m_rotationZ = 90 * 0.0174532925f;
D3DXMatrixRotationYawPitchRoll(&rotation, 0, 0, m_rotationZ);
worldMatrix = rotation * movement;

沒有。 圖像不再出現在屏幕上。

誰能告訴我我做錯了什么? 謝謝。

只是做世界* -translate *旋轉*翻譯它將使您在本地旋轉,例如我的代碼

void Ojbect::RotZ(float angle, Vec3 origin)
{
    Mat4 w, rz, t;
    rz.RotZ(angle);
    t.Translation(-origin.x, -origin.y, 0);
    w = t * rz * -1 * t;
    Vec4 newPos;
    for (int i = 0; i < countV; i++)
    {
        Vec3 pos(vertex[i].x, vertex[i].y, 1);
        newPos.Transform(pos, w);
        vertex[i].x = newPos.x;
        vertex[i].y = newPos.y;
    }
    UpdateVertex(countV);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM