[Assimp] MD2 Modell Texturieren

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
chewbo
Beiträge: 7
Registriert: 17.09.2009, 15:15

[Assimp] MD2 Modell Texturieren

Beitrag von chewbo »

Hallo ich habe folgendes Problem.

Ich möchte auf mein eingelesenes Modell Texturen kleben.
Ich habe das Modell eingelesen, dargestellt, das klappt so weit.

Dann habe ich die Textur mit DevIL (OpenIL) eingelesen, die sich jetzt in meinem Speicher befindet. (OpenGL) ( Ich benutze das dolphin Modell aus dem MD2 Ordner)
Wenn ich nun aber über die Texturkoordinaten iteriere, klebt er mir immer wieder den gleichen Abschnitt auf Modell. Das ist auch logisch, da bei jedem Mesh die gleichen Koordinaten drin stehen. Finde ich komisch, aber vielleicht mache ich ja was falsch.

Code: Alles auswählen

ilutGLLoadImage(const_cast<char *>(sFilebmp.c_str()));
...
					glBegin(GL_TRIANGLES);
						if (m_pAIScene->mMeshes[i]->HasNormals())
							glNormal3f(m_pAIScene->mMeshes[i]->mNormals->x,m_pAIScene->mMeshes[i]->mNormals->y,m_pAIScene->mMeshes[i]->mNormals->z);

						glTexCoord2f(m_pAIScene->mMeshes[i]->mTextureCoords[0][0].x,m_pAIScene->mMeshes[i]->mTextureCoords[0][0].y);
						glVertex3f(m_pAIScene->mMeshes[i]->mVertices[m_pAIScene->mMeshes[i]->mFaces[j].mIndices[0]].x , 
							m_pAIScene->mMeshes[i]->mVertices[m_pAIScene->mMeshes[i]->mFaces[j].mIndices[0]].y ,
							m_pAIScene->mMeshes[i]->mVertices[m_pAIScene->mMeshes[i]->mFaces[j].mIndices[0]].z );

						glTexCoord2f(m_pAIScene->mMeshes[i]->mTextureCoords[0][1].x,m_pAIScene->mMeshes[i]->mTextureCoords[0][1].y);
						glVertex3f(m_pAIScene->mMeshes[i]->mVertices[m_pAIScene->mMeshes[i]->mFaces[j].mIndices[1]].x , 
							m_pAIScene->mMeshes[i]->mVertices[m_pAIScene->mMeshes[i]->mFaces[j].mIndices[1]].y  ,
							m_pAIScene->mMeshes[i]->mVertices[m_pAIScene->mMeshes[i]->mFaces[j].mIndices[1]].z );

						glTexCoord2f(m_pAIScene->mMeshes[i]->mTextureCoords[0][2].x,m_pAIScene->mMeshes[i]->mTextureCoords[0][2].y);
						glVertex3f(m_pAIScene->mMeshes[i]->mVertices[m_pAIScene->mMeshes[i]->mFaces[j].mIndices[2]].x  , 
							m_pAIScene->mMeshes[i]->mVertices[m_pAIScene->mMeshes[i]->mFaces[j].mIndices[2]].y ,
							m_pAIScene->mMeshes[i]->mVertices[m_pAIScene->mMeshes[i]->mFaces[j].mIndices[2]].z);
					glEnd();
Gruß

chewbo
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4262
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: [Assimp] MD2 Modell Texturieren

Beitrag von Chromanoid »

du machst soweit ich das sehe was falsch. die texturkoordinaten sind ja auch indiziert...

Code: Alles auswählen

glTexCoord2f(m_pAIScene->mMeshes[i]->mTextureCoords[0][m_pAIScene->mMeshes[i]->mFaces[j].mIndices[0]].x,m_pAIScene->mMeshes[i]->mTextureCoords[0][m_pAIScene->mMeshes[i]->mFaces[j].mIndices[0]].y);
[...]
btw: @assimp team :) habt ihr euch aus effizienz gründen gegen eine eigene indizierung von texturkoordinaten entschieden oder einfach damit man es beim rendern leichter hat? und eine utility funktion zur generierung eines "indexarrays" zur übergabe an indexbuffer generier funktionen wäre nicht schlecht :) für die ganz faulen ^^
Benutzeravatar
Schrompf
Moderator
Beiträge: 4879
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: [Assimp] MD2 Modell Texturieren

Beitrag von Schrompf »

Die Entscheidung für ein einzelnes Index-Set für alle Vertexdaten ist schlichtweg der Tatsache geschuldet, dass GPUs nur ein Set Indizes verarbeiten können. Und der kleine Helfer zur Zusammenstellung der Index-Liste... nuja, das kann ich Dir gern hier live geben:

Code: Alles auswählen

const aiMesh* mesh = aiScene->mMeshes[x];
unsigned short* indizes = HolZugriffAufIndexBuffer();
for( size_t a = 0; a < mesh->mNumFaces; ++a)
{
  const aiFace& flaeche = mesh->mFaces[a];
  for( size_t b = 0; b < flaeche.mNumIndices; ++b)
    *indizes++ = flaeche.mIndices[b];
}
Fertig zum Kopieren&Einfügen :-) Alle Angaben ohne Gewähr, ich habe jetzt nicht exakt die Assimp-Strukturen im Kopf. Ist also doch nicht ganz Copy&Paste-fertig.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
chewbo
Beiträge: 7
Registriert: 17.09.2009, 15:15

[Gelöst] Re: [Assimp] MD2 Modell Texturieren

Beitrag von chewbo »

Super.
Danke hat geklappt.
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4262
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: [Assimp] MD2 Modell Texturieren

Beitrag von Chromanoid »

@Schrompf :) ja so hab ich das auch gemacht :D ich dachte bloß so ein kleines Funktiönchen könnte man noch im aiMesh unterbringen ^^...
Antworten