Nałożenie tekstury - C++ DirectX

0

Mam napisana aplikację na obracający się kwadrat. Chciałbym teraz na ten kwadrat nałożyć texturę - jednolitą grafikę bez powtórzeń. Próbowałem korzystać z różnych tutoriali jednak żaden mi nie chce zadziałać. Może ktoś pomoże - w ostateczności mogę na priv podesłać cały program.

HRESULT InicjalizacjaVB(void)
{
  // utworznie tablicy z wierzcholkami
  CUSTOM_VERTEX vertices[4];

  // wypelniamy kazdy wierzcholek osobno
  
  vertices[0].x =  -1.0f; 
  vertices[0].y =  1.0f;
  vertices[0].z =  0.0f;
  vertices[0].rhw = 1.0f;
  vertices[0].u = 0.0f;
  vertices[0].v = 0.0f;

  vertices[1].x = 1.0f;
  vertices[1].y = 1.0f;
  vertices[1].z = 0.0f;
  vertices[1].rhw = 1.0f;
  vertices[1].u = 1.0f;
  vertices[1].v = 0.0f;

  vertices[2].x = -1.0f;
  vertices[2].y = -1.0f;
  vertices[2].z = 0.0f;
 vertices[2].rhw = 1.0f;
  vertices[2].u = 0.0f;
  vertices[2].v = 1.0f;

  vertices[3].x = 1.0f;
  vertices[3].y = -1.0f;
  vertices[3].z = 0.0f;
  vertices[3].rhw = 1.0f;
  vertices[3].u = 1.0f;
  vertices[3].v = 1.0f;

   

  // utworznie bufora wierzcholkow
  HRESULT result = D3D_OK;
  result = gDevice->CreateVertexBuffer(
    4 * sizeof(CUSTOM_VERTEX), 
    0, 
    D3DFVF_CUSTOM_VERTEX, 
    D3DPOOL_DEFAULT,
    &gVB, 0);

  // sprawdzenie wyniku operacji
  if(D3D_OK != result) 
  {
    return E_FAIL;
  }

  // skopiowanie wierzcholkow
  void* p = 0; 
  if(D3D_OK == gVB->Lock(
    0, sizeof(vertices), (void**)&p, 0))
  { 
    memcpy(p, vertices, sizeof(vertices)); 
    gVB->Unlock();
  } else
  {
    return E_FAIL;
  }

  return S_OK;
}

//
// Funkcja renderujaca scene
//
void loadTexture(void)
{
	D3DXCreateTextureFromFile(gDevice, "DH.png", &g_pTexture);

	gDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
	gDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
	//gDevice->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);
}

void Renderowanie(void)
{
  // zamalowanie bufora ramki na czerwono
  gDevice->Clear( 0, 0, D3DCLEAR_TARGET, 0x00808080, 1.0f, 0);
 
  // ustawienie strummienia wierzcholkow
  gDevice->SetStreamSource(0, gVB, 0, sizeof(CUSTOM_VERTEX)); 
  // ustwienie formatu wierzcholka
  gDevice->SetFVF(D3DFVF_CUSTOM_VERTEX); 

  // obrocenie macierzy swiata
	D3DXMatrixRotationY(&matWorld, GetTickCount() / 1000.0f);
 	gDevice->SetTransform(D3DTS_WORLD,&matWorld); 

  // rozpoczecie i zakonczenie renderowania sceny
  gDevice->BeginScene();

  
   
   // renderowanie listy trojkatow
	  gDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2); 
	

	

  gDevice->EndScene();

  // wyswietlenie bufora ramki na ekranie monitora
  gDevice->Present(0, 0, 0, 0);
} 
0
  1. Ale na czym problem polega?
  2. Programujemy z głową: co zwraca D3DXCreateTextureFromFile?
0

Wydaje mi się, że powinienieś jeszcze załadować teksture za pomocą gDevice->SetTexture. Bo ty tylko stworzyłeś wskaźnik do tekstury, ale wierzchołki i tekstura nie są w żaden sposób powiązane. Choć nie wiem czy tak jest bo bardzo dawno siedziałem w directx 9 i korzystałem z FVF.

1 użytkowników online, w tym zalogowanych: 0, gości: 1