DirectX: небольшое искажение между двумя полигонами спрайтов
Здравствуйте, я использую один и тот же способ для рендеринга спрайтов с 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 );
Это очень просто и работает, мой спрайт отображается на экране полностью. Но, посмотрев поближе, я вижу, что на экране есть небольшая диагональная линия (между двумя полигонами), не цветная, а как будто они не были расположены идеально.
Я думал о фильтрации и пытался удалить все, но, может быть, я что-то забыл...
Спасибо
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;
}
Вы также получаете рендер на весь экран, не беспокоясь о просмотре. Используя это, я никогда не видел никаких линий между двумя треугольниками.