textureproblem bei milkshape model in opengl
-
ups mein fehler statt "<" "="
aber warum ist es eig 0? es wird doch so ziemlich ordnungsgemäss geladen
-
0 ist die erste legale texture-id die in einem jungfraeulichem opengl-context vergeben wird.
macht doch auch sinn...
-
ja das ergibt sinn und das hab ich mir am anfang auch gedacht.
nun stelle ich mir noch die frage wieso die texture auf 0 gestellt wird wenn der pfad nicht existiert oder kaputt ist:void Model::reloadTextures() { for ( int i = 0; i < m_numMaterials; i++ ) if ( strlen( m_pMaterials[i].m_pTextureFilename ) > 0 ) m_pMaterials[i].m_texture = LoadGLTexture( m_pMaterials[i]. m_pTextureFilename ); else m_pMaterials[i].m_texture = 0; }das würde heissen dass eine illegale texture 0 enthält
warum hat meine texture aber den wert 0 wenn ...m_pTextureFilename grösser als 0 ist? das ist ein gaaanz dummer fehler, den ich hier überseh. ich hasse so fehler^^
#edit
bin ein schritt weiter:texture bekommt jetzt -1 bei nem fehler un wenns funktioniert bekommt es 0.
es hat 0
gut, also müsste es jetzt in draw ausgegeben werden..machsts aber net!!!(hier draw:)
void Model::draw() { GLboolean texEnabled = glIsEnabled( GL_TEXTURE_2D ); for ( int i = 0; i < m_numMeshes; i++ ) { int materialIndex = m_pMeshes[i].m_materialIndex; if ( materialIndex >= 0 ) { glMaterialfv( GL_FRONT, GL_AMBIENT, m_pMaterials[materialIndex].m_ambient ); glMaterialfv( GL_FRONT, GL_DIFFUSE, m_pMaterials[materialIndex].m_diffuse ); glMaterialfv( GL_FRONT, GL_SPECULAR, m_pMaterials[materialIndex].m_specular ); glMaterialfv( GL_FRONT, GL_EMISSION, m_pMaterials[materialIndex].m_emissive ); glMaterialf( GL_FRONT, GL_SHININESS, m_pMaterials[materialIndex].m_shininess ); //m_texture == 0 ?!! if ( m_pMaterials[materialIndex].m_texture >= 0 ) { MessageBox(0,"texture ist grösser gleich null","",0); glBindTexture( GL_TEXTURE_2D, m_pMaterials[materialIndex].m_texture ); glEnable( GL_TEXTURE_2D ); } else glDisable( GL_TEXTURE_2D ); } else glDisable( GL_TEXTURE_2D ); glBegin( GL_TRIANGLES ); for ( int j = 0; j < m_pMeshes[i].m_numTriangles; j++ ) { int triangleIndex = m_pMeshes[i].m_pTriangleIndices[j]; const Triangle* pTri = &m_pTriangles[triangleIndex]; for ( int k = 0; k < 3; k++ ) { int index = pTri->m_vertexIndices[k]; glNormal3fv( pTri->m_vertexNormals[k] ); glTexCoord2f( pTri->m_s[k], pTri->m_t[k] ); glVertex3fv( m_pVertices[index].m_location ); } } glEnd(); } ...
-
hellihjb schrieb:
0 ist die erste legale texture-id die in einem jungfraeulichem opengl-context vergeben wird.
macht doch auch sinn...Nein, 0 ist eine reservierte Textur-ID, die von glGenTextures niemals zurückgeliefert wird.
Bis auf diese Tatsache ist die Vergabe der IDs nicht festgelegt. Eine Implementierung könnte z.B. die IDs einfach aus Speicheradressen generieren, an denen sie die Daten der Texturen speichert.
-
aah ok thx das erklärt auch warum die texture 0 zugewiesen bekommt wenn der pfad nicht stimmt
also geh ich wieder ein schritt zurück un frag mich was an "draw" falsch ist wenn texture irgentein wert über 0 ist und der pfad ./holztex.bmp heisst?
es müsste doch funsen

-
Ja geht die Textur denn jetzt laden? Bekommt sie eine ID GRÖSSER 0?
-
eh ja jetz wieder^^ also
m_pMaterials[i].m_texture = LoadGLTexture( m_pMaterials[i].m_pTextureFileName); if(m_pMaterials[i].m_texture==0) MessageBox(0," Diese Message wird angezeigt also texture=0","",0);aber wir ham doch gelernt:
Die zurückgegebenen Texturnamen müssen nicht zwingend aufeinanderfolgende Integerwerte sein.
Der reservierte Texturname 0 wird dabei NIEMALS zurückgegeben.dann hab ich herausgefunden, dass LoadGLTexture der texture 0 verpasst wenn die daten nicht geladen werden können.
vll is ja der pfad falsch also hab ich ihn direkt eingegeben:m_pMaterials[i].m_texture = LoadGLTexture("C:\\christoph\\holztex.bmp");texture hatte jetz nichtmehr 0 sondern grösser.
also liegt der fehler an an dem pfad (warum?)
aber die texture wird immer noch nicht angezeit dh der 2. fehler liegt an draw
-
texture hatte jetz nichtmehr 0 sondern grösser.
aber die texture wird immer noch nicht angezeitich mutmasse mal, dass die ausmasse deiner textur keine zweierpotenzen sind.
-
VERDAMMT es funktioniert THX!( ich versuch mich zu revangieren(^^)), die texture war 100x100 und ich hab gedacht das wird von OGL bzw von milkshape geändert.
nun gut die holzbox funktioniert
aber mein mensch nicht. er besitzt eine bitmap(512x256) und die einzelnen meshes sind auf dem bitmap verschoben worden (ihr wisst schon, sie wurden 2d dargestellt und dann ein teil vom bitmap zugewiesen) (in milkshape)
muss ich jetzt auch die 2d dargestellten meshes irgentwie (kp) auf eine 2er potenz bringen?danke (schonmal)
#edit
hat sich erledigt, ich hatte noch die holztexture drin^^
dh wir können weiter zur letzten frage kommen un dann is echt feierabend^^
also das ganze funktioniert nur, wen ich bei LoadGLTexture den absoluten pfad angeb. wenn ich einfach nur "tex.bmp" (tex.bmp is im selben ordner wie das model) dann gehts net?
-
ok hat sich auch erledigt. die anwendung war ja nicht im selben fenster wie die texturen un das model.
damit wäre das thema abgeschlossen un ich danke
lich allen beteiligten^^