Seite 1 von 1

[Assimp] MD2 Modell Texturieren

Verfasst: 24.09.2009, 01:24
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

Re: [Assimp] MD2 Modell Texturieren

Verfasst: 24.09.2009, 02:16
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 ^^

Re: [Assimp] MD2 Modell Texturieren

Verfasst: 24.09.2009, 09:01
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.

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

Verfasst: 24.09.2009, 11:28
von chewbo
Super.
Danke hat geklappt.

Re: [Assimp] MD2 Modell Texturieren

Verfasst: 24.09.2009, 14:15
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 ^^...