Hallo ich hoffe Ihr könnt mir helfen, ich bin schon seit einigen Tagen auf der suche nach einem Algorithmus zur Positionierung der Flächen eines Raumes auf der Lightmap so das sie Optimal ausgenutzt wird.
Solltet ihr dafür Pappers oder Tutorials im Netz kennen dann würde ich mich freuen wenn Ihr diese mitteilen könntet.
Berechnen der Flächen Position in der Lightmap
Re: Berechnen der Flächen Position in der Lightmap
UV-Unwrapping waere ein Stichwort zum Suchen.
Das uvatlas-tool aus dem DX SDK kann das auch.
Das uvatlas-tool aus dem DX SDK kann das auch.
-
- Establishment
- Beiträge: 324
- Registriert: 08.04.2003, 18:09
- Alter Benutzername: Enrico_
- Echter Name: Enrico
- Wohnort: San Diego
- Kontaktdaten:
Re: Berechnen der Flächen Position in der Lightmap
Ein Hoch auf uns Männer... Auf die Frau, die uns HAT ( oder hat, und nicht weiß, dass sie uns hat ) ...auf die Idiotinnen ... besser gesagt VOLLPFOSTINNEN ... die uns hatten und uns verloren haben ... und auf die GLÜCKLICHEN, die das Vergnügen & Glück haben werden uns kennenzulernen!
- dowhilefor
- Moderator
- Beiträge: 173
- Registriert: 27.02.2009, 15:44
- Alter Benutzername: 6SidedDice
- Echter Name: Nico Probst
- Wohnort: Bochum
- Kontaktdaten:
Re: Berechnen der Flächen Position in der Lightmap
selber machen wäre wohl binpacking. Guter artikel dazu.
Mein Gehirn besteht nur noch aus einem hash-index, ich weiss was ich kenn aber kenn nicht was ich weiss
Re: Berechnen der Flächen Position in der Lightmap
Super Danke das hat mir schon sehr weitergeholfen. Nun kommt die technische Umsetzung und ich habe wieder ein Problem. Ich arbeite mit OpenGLES jedoch derzeit im Editor mit OpenGL also alle Funktionen vorhanden.
Mein Problem ist nun aber das wenn ich die Lightmap erzeuge und ich die Luminanz der Pixel eintragen möchte das wohl was nicht stimmt.
Mit diesem Codeschnipsel sollte ich eigentlich in der Lage sein in der Lightmap an Position (0,0) einen Weißen wert zu setzen. Jedoch erscheint er auf der verwendeten Texture eher auf Position(1,1). Nach dem ich den Byte-Array als Texture für OpenGL übergeben habe.
Woran kann das liegen? Bin schon arg am verzweifeln da ich dazu noch nicht's passendes im Netz gefunden habe.
Mein Problem ist nun aber das wenn ich die Lightmap erzeuge und ich die Luminanz der Pixel eintragen möchte das wohl was nicht stimmt.
Code: Alles auswählen
lightmap[0] = 255;
lightmap[1] = 255;
lightmap[2] = 255;
Code: Alles auswählen
glGenTextures(1, &texID);
glBindTexture(GL_TEXTURE_2D, texID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexImage2D(GL_TEXTURE_2D, 0, 3, TEXTURE_SIZE, TEXTURE_SIZE, 0, GL_RGB, GL_UNSIGNED_BYTE, lightmap);
Re: Berechnen der Flächen Position in der Lightmap
Wenn man sich Texturkoordinaten anschaut, dann ist ein Texturintervall immer zwischen 0 - 1. Wenn eine Textur nun 4 Horizontale Texel hat, dann könnte man meinen, das die Texturkoordinaten dafür 0, 0.25, 0.5 und 0.75 wären. Dem ist aber nicht so, denn es muss beachtet werden, dass in der Texelmitte gesampelt werden muss. Also musst du auf alle Texturkoordinaten in diesem Fall immer 0.125 drauf rechnen.
Verallgemeinert gilt also, dass auf alle Texturkoordinaten ein halber Texel draufgerechnet werden muss:
u' = u + 0.5 / TexturWidth;
v' = v + 0.5 / TexturHeight;
Vielleicht löst das dein Problem...
Verallgemeinert gilt also, dass auf alle Texturkoordinaten ein halber Texel draufgerechnet werden muss:
u' = u + 0.5 / TexturWidth;
v' = v + 0.5 / TexturHeight;
Vielleicht löst das dein Problem...