0

您好,我很长一段时间以来都使用相同的方式使用 directx 渲染精灵,但在这里我以纹理渲染屏幕,然后在屏幕上用大精灵渲染它。

对于我使用的相机: vUpVec=D3DXVECTOR3(0,1,0); vLookatPt=D3DXVECTOR3(0,0,0); vFromPt=D3DXVECTOR3(0,0,-1);

D3DXMatrixLookAtRH( &matView, &vFromPt, &vLookatPt, &vUpVec );
g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );

D3DXMatrixOrthoRH( &matProj, 1,1, 0.5f, 20 );
g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );

并渲染精灵: CUSTOMVERTEX* v; spritevb->Lock( 0, 0, (void**)&v, 0 );

v[0].position = D3DXVECTOR3(-0.5f,-0.5f,0); v[0].u=0; v[0].v=1;
v[1].position = D3DXVECTOR3(-0.5f,0.5f,0); v[1].u=0; v[1].v=0;
v[2].position = D3DXVECTOR3(0.5f,-0.5f,0); v[2].u=1; v[2].v=1;
v[3].position = D3DXVECTOR3(0.5f,0.5f,0); v[3].u=1; v[3].v=0;

spritevb->Unlock();


g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 );

这是非常基本且有效的,我的精灵在屏幕上呈现全屏。但是通过仔细观察,我发现屏幕上有一条小对角线(在两个多边形之间)不是彩色的,但就像它们没有完美定位一样。

我考虑过过滤并尝试删除所有内容,但也许我忘记了一些东西......

谢谢

4

1 回答 1

1

渲染到全屏最好的方法是不定义任何相机位置。

如果您用作输入位置

SimpleVertex vertices[] =
    {
        { XMFLOAT3( -1.0f, 1.0f, 0.5f ), XMFLOAT2( 0.0f, 0.0f ) },
        { XMFLOAT3( 1.0f, 1.0f, 0.5f ), XMFLOAT2( 1.0f, 0.0f ) },
        { XMFLOAT3( 1.0f, -1.0f, 0.5f ), XMFLOAT2( 1.0f, 1.0f ) },
        { XMFLOAT3( -1.0f, -1.0f, 0.5f ), XMFLOAT2( 0.0f, 1.0f ) },
    };

在顶点着色器中做

VS_OUTPUT RenderSceneVS( VS_INPUT input )
{
    VS_OUTPUT Output;

    Output.Position = input.Position;

    Output.TextureUV = input.TextureUV; 

    return Output;    
}

您也可以全屏渲染,而不必担心视锥。使用它,我从未在两个三角形之间看到任何线条。

于 2011-02-25T08:54:08.287 回答