Jump to content

[Delphi, Omega] Wczytywanie tekstur do modelowania 3d z OmegaImageList


Demon64

Recommended Posts

Witam! Mam problem ze wczytywaniem tekstur potrzebnych do wyrenderowania sceny.

Otóż chcę by tekstury ładowały się z listy OmegaImageList, tak by nie były dostępne dla zwykłych śmiertelników

w postaci zwykłych plików graficznych znajdujących się w katalogu z programem ;)

Coś już nabazgrałem, ale przy ładowaniu tekstur wywala mi błędy i nie ładuje nic.

Oto fragment kodu:

 

 
var
  g_pMeshTextures  : array of IDirect3DTexture8 = NIL; // tablica tekstur

...
// kod ładowania tekstur
  try
     D3DXCreateTexture(OmegaScreen1.Device,
                       tex.ImageList.Find(_d3dxMaterials^.pTextureFilename).ImageWidth,
                       tex.ImageList.Find(_d3dxMaterials^.pTextureFilename).ImageHeight,
                       0,0,D3DFMT_R8G8B8,D3DPOOL_DEFAULT,
                       g_pMeshTextures[_i]);
     except on exception do ShowMessage('D3DXCreateTexture Error: '+_d3dxMaterials^.pTextureFilename); end;
     try
     g_pMeshTextures[_i]:=tex.ImageList.Find(_d3dxMaterials^.pTextureFilename).Image;
     except on exception do ShowMessage('g_pMeshTextures Error: '+_d3dxMaterials^.pTextureFilename); end;

 

tex - to OmegaImageList, do niego załadowane są tekstury, które chcę używać do renderowania sceny

Powyższy kod działa w pętli, która ładuje kolejne tekstury do tablicy g_pMeshTextures.

Tablica g_pMeshTextures jest zmienną globalną, na samym początku ustalany jest odpowiedni jej rozmiar.

 

Czy ktoś wie jak to przerobić by można było wczytać tekstury z tego OmegaImageList?

Link to comment
Share on other sites

przeciez omegaImageList zawiera juz IDirect3DTexture8, wiec nie rozumiem co chcesz osiagnac.

Wiem, że obiekt OmegaImageList przechowuje IDirect3DTexture8:

tex.ImageList.Find('nazwa pliku').Image;

ale chodzi o to, że gdy próbuje go wykorzystać, to wywala mi błąd.

 

Rysowanie obiektów 3d odbywa się u mnie tak:

var g_pMesh : ID3DXMesh = NIL; // zmienna globalna

...

for _i := 0 to g_dwNumMaterials - 1 do
   begin
     SetMaterial(g_pMeshMaterials[_i]);
     SetTexture(0, g_pMeshTextures[_i]); // w tym miejscu nakładana jest tekstura
     g_pMesh.DrawSubset(_i);
   end;

 

Próbowałem też zrobić zamiast g_pMeshTextures[_i] dać Image z OmegaImageList:

CODE

tex.ImageList.Find(textury[_i]).Image // textury[] - tablica przechowująca nazwy tekstur

 

ale dalej to samo... <_<

 

Nie ma natomiast problemu, gdy wczytuję tekstury do g_pMeshTextures[_i] za pomocą

instrukcji D3DXCreateTextureFromFile() i to działa, wczytuje teksturę i wyświetla normalnie

obiekty oteksturowane bez błędów, ale jedynym mankamentem jest to, że wczytuje te tekstury

z samodzielnych plików jpg, bmp, itp.

 

// EDIT:

Udało mi się już to zrobić :P Problem okazał się trywialny - OmegaImageList odróżnia wielkość

liter w nazwach plików :lol:

Temat do zamknięcia ;)

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...