- //Hier werden die Texturen geladen
- procedure AddMaterial(material:PMaterial);
- var pdata:pointer;
- i:integer;
- begin
- if PMaterial(material).num_textures > 0 then
- begin
- for i := 0 to PMaterial(material).num_textures-1 do
- begin
- PData := PMaterial(material).texture[i].ScanLine[PMaterial(material).texture[i].height-1];
- if Assigned(pdata) then
- begin
- glGenTextures(1,@PMaterial(material).gltex[i]);
- glBindTexture(GL_TEXTURE_2D, PMaterial(material).gltex[i]);
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
- gluBuild2DMipmaps(GL_TEXTURE_2D, 3, PMaterial(material).texture[i].Width, PMaterial(material).texture[i].Height, GL_BGR, GL_UNSIGNED_BYTE, pData);
- end;
- frmMain.Outconsole('Generated Texture ID: '+IntToStr(PMaterial(material).gltex[i]));
- end;
- end;
- materials.Add(material);
- end;
- //Zuweisen der Texturen (beim zeichnen)
- for j := 0 to PMaterial(materials.Items[PMesh(meshes.Items[nmesh]).groups[i].material]).num_textures-1 do
- begin
- glEnable(GL_TEXTURE_2D);
- glActiveTextureARB(GL_TEXTURE0_ARB+j);
- glBindTexture(GL_TEXTURE_2D,PMaterial(materials.Items[PMesh(meshes.Items[nmesh]).groups[i].material]).gltex[j]);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
- end;
- glActiveTextureARB(GL_TEXTURE0_ARB);
- glEnable(GL_TEXTURE_2D);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
- for j := 0 to PMaterial(materials.Items[PMesh(meshes.Items[nmesh]).groups[i].material]).num_textures-2 do
- begin
- glActiveTextureARB(GL_TEXTURE0_ARB+j);
- glBindTexture(GL_TEXTURE_2D,PMaterial(materials.Items[PMesh(meshes.Items[nmesh]).groups[i].material]).gltex[j]);
- end;
- //Zuweisen der Texturenkoordinaten (beim zeichnen)
- for k := 0 to PMaterial(materials.Items[PMesh(meshes.Items[nmesh]).groups[i].material]).num_textures-1 do
- glMultiTexCoord2fARB(GL_TEXTURE0_ARB+k,
- PMesh(meshes.Items[nmesh]).groups[i].vertices[j].u,
- PMesh(meshes.Items[nmesh]).groups[i].vertices[j].v);