Ich bin immer noch dabei Quake 3 Levels zu laden und stehe nun bei den Lightmaps. Sie sind nicht wie die Texturen extra dabei sondern in der Datei mit gespeichert. Gelesen kriege ich alles nur ich habe dann ein Array im Format: byte imageBits[128][128][3];
Also die Lightmaps sind ebend immer 128x128 groß und es werden die rgb werte gespeichert für jeden wert. Das Problem was ich nun habe ist wie kriege ich daraus jetzt eine Textur ? Ich habe eine Möglichkeit im Internet gefunden aber da gibt es Probleme.
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
CrearTexturaLightmap(int indice, byte pMapaDeBits[128][128][3], int ancho, int alto)
{
D3DXCreateTexture(m_pD3DDev,128,128,0,0,D3DFMT_R5G6B5,D3DPOOL_MANAGED,&m_pLightmap[i]);
IDirect3DSurface8 *TextureSurface;
m_pLightmap[indice]->GetSurfaceLevel(0, &TextureSurface);
D3DLOCKED_RECT pLockedRect;
RECT rectangleToLock;
rectangleToLock.top = 0;
rectangleToLock.left = 0;
rectangleToLock.bottom = 128;
rectangleToLock.right = 128;
if(FAILED(TextureSurface->LockRect(&pLockedRect,NULL,0 )))
PostQuitMessage(0);
USHORT* pData = (USHORT*)pLockedRect.pBits;
for(int p = 0; p<128;p++)
{
for(int q = 0; q<128; q++)
{
WORD r = pMapaDeBits[q][p][0]>>3;
WORD g = pMapaDeBits[q][p][1]>>2;
WORD b = pMapaDeBits[q][p][2]>>3;
WORD lightmap_pixel_565 =RGB_16BIT565 (r,g,b);
pData[(q * (pLockedRect.Pitch/2)) + p] = lightmap_pixel_565;
}
}
if(FAILED(TextureSurface->UnlockRect()))
PostQuitMessage(0);
TextureSurface->Release();
}
|
Naja ist Spanisch aber sollte man verstehen können. Mein 1. Problem war das in der Zeile
WORD lightmap_pixel_565 =RGB_16BIT565 (r,g,b);
bei mir das RGB_16BIT565 unbekannt ist. Es ist ein DX8 Beispiel kann sein das es das bei 9 nicht mehr gibt. Ich habe dann mal D3DCOLOR_XRGB(r,g,b) versucht und die Lightmaps wurden alle grün. Habe auch mal versucht eine 32 Bit Textur zu erstellen aber alles klappte nicht so wie es soll. Weiß jemand wie es genau aussehen muss oder ob es auch ne andere Möglichkeit gibt ?