DirectX:无法翻译矩形

时间:2018-01-21 20:15:38

标签: c++ directx translation

我一直在关注DirectX http://www.directxtutorial.com/Lesson.aspx?lessonid=9-4-5的本教程。我刚刚用C ++启动了DirectX。我在屏幕上绘制了两个矩形但无法翻译它们。这些矩形在屏幕上的位置不同,并存储在数组 OurVertices 中。我一直在阅读教程,它说你首先必须应用世界变换来翻译它,但我不想进入3d,因为我有两个简单的2d矩形。如何在DirectX C ++中移动简单的2d矩形。如果我使用教程应用World Transformation,我不知道为什么我的相机位置会倾斜。我的代码如下:

CUSTOMVERTEX OurVertices[] =
    {
    //  1
        { 0, 0, 0.0f, 0.0f, D3DCOLOR_XRGB(255, 255, 0), },   //meaning x,y,z,Dword
        { 100, 0, 0.0f, 0.0f, D3DCOLOR_XRGB(255, 255, 0), },
        { 0, 100, 0.0f, 1.0f, D3DCOLOR_XRGB(255, 255, 0), },
        { 100, 100, 0.0f, 0.0f, D3DCOLOR_XRGB(255, 255, 0), },

        { 200, 200, 0.0f, 0.0f, D3DCOLOR_XRGB(255, 255, 255), },
        { 400, 200, 0.0f, 0.0f, D3DCOLOR_XRGB(255, 255, 255), },
        { 200, 400, 0.0f, 1.0f, D3DCOLOR_XRGB(255, 255, 255), },
        { 400, 400, 0.0f, 0.0f, D3DCOLOR_XRGB(255, 255, 255), },
    };

d3ddev->CreateVertexBuffer(8 * sizeof(CUSTOMVERTEX),
        0,
        CUSTOMFVF,
        D3DPOOL_MANAGED,
        &v_buffer,
        NULL);
    VOID* pVoid;    // the void* we were talking about

    v_buffer->Lock(0, 0, (void**)&pVoid, 0);    // locks v_buffer, the buffer we made earlier

    memcpy(pVoid, OurVertices, sizeof(OurVertices));
    v_buffer->Unlock();    // unlock v_buffer

    d3ddev->SetFVF(CUSTOMFVF);



void render_frame()
{ 
    d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);

    d3ddev->BeginScene();

    // select which vertex format we are using
    // select the vertex buffer to display
    d3ddev->SetFVF(CUSTOMFVF);

        // SET UP THE PIPELINE

    D3DXMATRIX matTranslate;    
    static float index = 0.0f; 
    index += 0.01f;    // an ever-increasing float value

                                                      // build a matrix to rotate the model based on the increasing float value
    D3DXMatrixTranslation(&matTranslate, 0, index , 0.0f);

        // tell Direct3D about our matrix
    d3ddev->SetTransform(D3DTS_WORLD, &matTranslate);

    D3DXMATRIX matView;    // the view transform matrix

    D3DXMatrixLookAtLH(&matView,
            &D3DXVECTOR3(0.0f, 0.0f, 10.0f),    // the camera position
            &D3DXVECTOR3(0.0f, 0.0f, 0.0f),    // the look-at position
            &D3DXVECTOR3(0.0f, 1.0f, 0.0f));    // the up direction

    d3ddev->SetTransform(D3DTS_VIEW, &matView);    // set the view transform to matView

    D3DXMATRIX matProjection;     // the projection transform matrix

    D3DXMatrixPerspectiveFovLH(&matProjection,
            D3DXToRadian(100),    // the horizontal field of view
            (FLOAT)800 / (FLOAT)600, // aspect ratio
            1.0f,    // the near view-plane
            100.0f);    // the far view-plane

    d3ddev->SetTransform(D3DTS_PROJECTION, &matProjection);    // set the projection

                                                                   // select the vertex buffer to display
    d3ddev->SetStreamSource(0, v_buffer, 0, sizeof(CUSTOMVERTEX));

        // copy the vertex buffer to the back buffer
    d3ddev->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
    d3ddev->DrawPrimitive(D3DPT_TRIANGLESTRIP, 4, 2);



    d3ddev->EndScene();

    d3ddev->Present(NULL, NULL, NULL, NULL);
}

有没有办法翻译两个矩形?

1 个答案:

答案 0 :(得分:1)

你已经在使用3D了,当你指定顶点的位置时,你有一个额外的z分量,此时它被设置为0。您可以更改它并在场景中看到效果。

    { 0, 0, 0.0f, 0.0f, D3DCOLOR_XRGB(255, 255, 0), },   //meaning x,y,z,Dword
    { 100, 0, 0.0f, 0.0f, D3DCOLOR_XRGB(255, 255, 0), },
    { 0, 100, 0.0f, 1.0f, D3DCOLOR_XRGB(255, 255, 0), },
    { 100, 100, 0.0f, 0.0f, D3DCOLOR_XRGB(255, 255, 0), },

    { 200, 200, 0.0f, 0.0f, D3DCOLOR_XRGB(255, 255, 255), },
    { 400, 200, 0.0f, 0.0f, D3DCOLOR_XRGB(255, 255, 255), },
    { 200, 400, 0.0f, 1.0f, D3DCOLOR_XRGB(255, 255, 255), },
    { 400, 400, 0.0f, 0.0f, D3DCOLOR_XRGB(255, 255, 255), },

所以现在每个帧都在y轴上以越来越大的量转换顶点。

static float index = 0.0f; 
index += 0.01f;    // an ever-increasing float value

// build a matrix to rotate the model based on the increasing float value
D3DXMatrixTranslation(&matTranslate, 0, index , 0.0f);

如果您在每个帧中打印索引,您将看到他在增长,并使用此值来构建将在视图/投影之前应用的转换矩阵。

enter image description here

我不知道你想要的效果是什么。 但是你场景的所有顶点都会从下到上,你看起来就像你的相机一样。

相关问题