Direct3D C ++ текстурное наложение - PullRequest
0 голосов
/ 15 ноября 2011

Эй, ребята, кто-нибудь может мне помочь с отображением текстур в Direct3D C ++.Я создал основную игру и хочу текстурировать окружающую среду.Я просмотрел многочисленные онлайн-уроки, но пока мне не повезло

Я создаю собственную вершину для своего кода рисования:

struct CUSTOMVERTEX
{
    FLOAT x, y, z; // The position for the vertex
    DWORD color;        // The vertex color
};

Вот так я бы нарисовал квадрат:

CUSTOMVERTEX g_Vertices[] =
{

   {-1.0f,-1.0f,-1.0f,0xFF0000FF},{-1.0f, 1.0f,-1.0f,0xFF0000FF},
   { 1.0f, 1.0f,-1.0f,0xFF0000FF}, { 1.0f, 1.0f,-1.0f,0xFF0000FF},
   { 1.0f,-1.0f,-1.0f,0xFF0000FF},{-1.0f,-1.0f,-1.0f,0xFF0000FF},

};

Вот буфер:

//*************************** Vertex Buffer ****************************
if( FAILED( g_pd3dDevice->CreateVertexBuffer( numberOfVertecies*sizeof(CUSTOMVERTEX), 
        0 /* Usage */, D3DFVF_CUSTOMVERTEX,D3DPOOL_MANAGED, &g_pVB, NULL ) ) )
    MessageBox(hwnd,"Vertex Buffer problem",NULL,NULL);

VOID* pVertices;

if( FAILED( g_pVB->Lock( 0, sizeof(g_Vertices), (void**)&pVertices, 0 ) ) )
    MessageBox(hwnd,"Vertex Lock Problem",NULL,NULL);

memcpy( pVertices, g_Vertices, sizeof(g_Vertices) );

g_pVB->Unlock();

, а вот квадрат:

g_pd3dDevice->SetTransform( D3DTS_WORLD, &g_matWorld );
g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 20);

Я просто хочу посмотреть, как текстурировать квадрат, чтобы я могперейти к текстурированию всей моей среды?

1 Ответ

2 голосов
/ 16 ноября 2011

Если вы хотите реализовать наложение текстуры, вам нужно изменить структуру вершин на

struct CUSTOMVERTEX
{
    FLOAT x, y, z; // The position for the vertex
    FLOAT tu, tv; // Texture Coordinates
};

При создании вершин измените значения этого цвета на координаты текстуры (не забывайте, что координата (0,0) соответствует левому верхнему углу карты текстуры.

Вы также должны адаптировать объявление потока вершин:

#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_TEX1)

Загрузка текстуры с помощью D3DXCreateTextureFromFile (). И вы также должны указать устройству использовать загруженную текстуру. Обратитесь к Руководству по DirectX SDK 5, чтобы узнать, как это сделать.

Если вы просто хотите применить текстуру (а не наложение текстуры и цвет на вершину, зачем вам придавать каждой вершине цвет, если вы можете просто применить текстуру ???), так что используйте вместо этого структуру вершины, которую я написал из того, что в учебнике.

...