Cubemap problem mit MiniB3D
Übersicht

klepto2Betreff: Cubemap problem mit MiniB3D |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wie ja vielleicht einige Wissen, arbeite ich gerade an ein paar erweiterungen für MiniB3D.(Vorallem Shader unterstützung). Um die Shadermöglichkeiten jedoch voll auszuschöpen (vorallem die meisten schönen Effekte) wird leider CubeMapping gebraucht, welches MiniB3D noch nicht unterstützt.
Also hab ich mich mal dran versucht, bin aber auf ein Problem gestoßen, welches sich mir komplett entschließt. Vielleicht weis jemand von euch Rat. Hier ist mal der Code, wie ich Cubemapping jetzt eingebaut habe. LoadTexture Funktion Code: [AUSKLAPPEN] If tex.flags & 128 Then cubemap = True If Cubemap = True Then Local texSize:Int = PixmapWidth(tex.pixmap) / 6 If texSize <> PixmapHeight(tex.pixmap) Then Throw "Not correct Texture Format for cubemapping" + texsize Local pixmaps:TPixmap[6] For Local i:Int = 0 To 5 pixmaps[i] = CreatePixmap(texsize , texsize , PF_RGBA8888) For Local x:Int = 0 To texsize - 1 For Local y:Int = 0 To texsize - 1 Local rgb:Int = ReadPixel(tex.pixmap , x + (texsize*i) , y) WritePixel(pixmaps[i] , x , y , rgb) Next Next tex.glcubetex[i] = GLTexFromPixmap2(pixmaps[i],False,GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT+i) Next Return tex EndIf ... rest der Lade Routine von Simon 2 modifizierte Versionen der GLTexfromPixmap und GLADjustTexSize Function GLTexFromPixmap2( pixmap:TPixmap,mipmap=False ,target:Int = GL_TEXTURE_2D) If pixmap.format<>PF_RGBA8888 pixmap=pixmap.Convert( PF_RGBA8888 ) Local width=pixmap.width,height=pixmap.height 'GLAdjustTexSize2 width,height If width<>pixmap.width Or height<>pixmap.height pixmap=ResizePixmap( pixmap,width,height ) Local old_name,old_row_len glGetIntegerv GL_TEXTURE_BINDING_2D,Varptr old_name glGetIntegerv GL_UNPACK_ROW_LENGTH,Varptr old_row_len Local name glGenTextures 1,Varptr name glBindtexture target,name Local mip_level Repeat glPixelStorei GL_UNPACK_ROW_LENGTH,pixmap.pitch/BytesPerPixel[pixmap.format] glTexImage2D target,mip_level,GL_RGBA8,width,height,0,GL_RGBA,GL_UNSIGNED_BYTE,pixmap.pixels If Not mipmap Exit If width=1 And height=1 Exit If width>1 width:/2 If height>1 height:/2 pixmap=ResizePixmap( pixmap,width,height ) mip_level:+1 Forever glBindTexture target,old_name glPixelStorei GL_UNPACK_ROW_LENGTH,old_row_len Return name End Function 'GL_PROXY_TEXTURE_CUBE_MAP_EXT Function GLAdjustTexSize2( width Var,height Var ) Function Pow2Size( n ) Local t=1 While t<n t:*2 Wend Return t End Function width=Pow2Size( width ) height=Pow2Size( height ) Repeat Local t glTexImage2D GL_PROXY_TEXTURE_CUBE_MAP_EXT,0,4,width,height,0,GL_RGBA,GL_UNSIGNED_BYTE,Null glGetTexLevelParameteriv GL_PROXY_TEXTURE_CUBE_MAP_EXT,0,GL_TEXTURE_WIDTH,Varptr t If t Return If width=1 And height=1 RuntimeError "Unable to calculate tex size" If width>1 width:/2 If height>1 height:/2 Forever End Function und hier der Code, wie die Cubemap dann wieder im Mesh.Update initialiesiert wird. Code: [AUSKLAPPEN] If tex_flags & 128 <> 0 Then glBindTexture(GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT,glCubetex[0]) glBindTexture(GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT,glCubetex[1]) glBindTexture(GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT,glCubetex[2]) glBindTexture(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT,glCubetex[3]) glBindTexture(GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT,glCubetex[4]) glBindTexture(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT ,glCubetex[5]) glTexParameteri(GL_TEXTURE_CUBE_MAP_EXT , GL_TEXTURE_MIN_FILTER , GL_NEAREST) glTexParameteri(GL_TEXTURE_CUBE_MAP_EXT , GL_TEXTURE_MAG_FILTER , GL_NEAREST) glTexParameteri(GL_TEXTURE_CUBE_MAP_EXT, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE) glTexParameteri(GL_TEXTURE_CUBE_MAP_EXT , GL_TEXTURE_WRAP_T , GL_CLAMP_TO_EDGE) glEnable(GL_TEXTURE_CUBE_MAP_EXT) EndIf das problem ist nun, das zwar etwas als Textur angezeigt wird, es 1. aber auf jeder Seite gleich aussieht und total verzerrt ist. Kennt jemand den Fehler oder eine andere Möglichkeit CM einzubauen? Danke. |
||
Matrix Screensaver
Console Modul für BlitzMax KLPacker Modul für BlitzMax HomePage : http://www.brsoftware.de.vu |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich kenne mich zwar mit OpenGL nicht gut genug aus, aber ich vermute der Teil für SphereMap Init aus diesem Nehe tutorial http://nehe.gamedev.net/data/l...?lesson=23 dürfte in irgend einer Form auch benötigt werden um Cube Maps korrekt zu initialisieren. Dummerweise hats kein Tut und ich bin im Moment zu müde um noch rasch danach zu googlen.
Hab allerdings noch rasch in der alten DreiDe version nachgesehen und die fährt mit Zitat: glEnable(GL_TEXTURE_GEN_S) glEnable(GL_TEXTURE_GEN_T) glEnable(GL_TEXTURE_GEN_R) nach dem binden der CubeMap |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
klepto2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke, Dreamora. habs aber kurz vorher selbst rausbekommen.
Das problem war, das man noch automatische TexCoords generierung aufrufen muss, bevor die von dir genanten Befehle kommen. Code: [AUSKLAPPEN] If tex_flags & 128 <> 0 Then glBindTexture(GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT,glCubetex[0]) glBindTexture(GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT,glCubetex[1]) glBindTexture(GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT,glCubetex[2]) glBindTexture(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT,glCubetex[3]) glBindTexture(GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT,glCubetex[4]) glBindTexture(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT ,glCubetex[5]) glTexParameteri(GL_TEXTURE_CUBE_MAP_EXT , GL_TEXTURE_MIN_FILTER , GL_NEAREST) glTexParameteri(GL_TEXTURE_CUBE_MAP_EXT , GL_TEXTURE_MAG_FILTER , GL_NEAREST) glTexParameteri(GL_TEXTURE_CUBE_MAP_EXT, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE) glTexParameteri(GL_TEXTURE_CUBE_MAP_EXT , GL_TEXTURE_WRAP_T , GL_CLAMP_TO_EDGE) glTexGenf(GL_S, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_EXT) glTexGenf(GL_T, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_EXT) glTexGenf(GL_R, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_EXT) glEnable(GL_TEXTURE_GEN_S) glEnable(GL_TEXTURE_GEN_T) glEnable(GL_TEXTURE_GEN_R) 'glEnable(GL_TEXTURE_GEN_S); ' glEnable(GL_TEXTURE_GEN_T); 'glEnable(GL_TEXTURE_GEN_R); glEnable(GL_TEXTURE_CUBE_MAP_EXT) EndIf so ist die Initialiesierung richtig. |
||
Matrix Screensaver
Console Modul für BlitzMax KLPacker Modul für BlitzMax HomePage : http://www.brsoftware.de.vu |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group