1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| public void draw(Scene3ds scene3ds) { GL.glColor3f(1, 1, 1); for (int meshIdx=0; meshIdx<scene3ds.meshes(); meshIdx++) { Mesh3ds mesh3ds = scene3ds.mesh(meshIdx); Vertex3ds[] vertexArray = mesh3ds.vertexArray(); Face3ds[] faceArray = mesh3ds.faceArray(); TexCoord3ds[] texCoordArray = mesh3ds.texCoordArray(); for (int faceMatIdx=0; faceMatIdx<mesh3ds.faceMats(); faceMatIdx++) { FaceMat3ds faceMat = mesh3ds.faceMat(faceMatIdx); Texture texture = textures[faceMat.material()]; if (texture != null) { GL.glEnable(GL.GL_TEXTURE_2D); GL.glBindTexture(GL.GL_TEXTURE_2D, texture.textureId); } else { GL.glDisable(GL.GL_TEXTURE_2D); }
GL.glTexParameterf(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR_MIPMAP_NEAREST); GL.glTexParameterf(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR); GL.glBegin(GL.GL_TRIANGLES); for (int faceIdx=0; faceIdx<faceMat.faces(); faceIdx++) { int face = faceMat.face(faceIdx); int p0 = faceArray[faceIdx].P0; int p1 = faceArray[faceIdx].P1; int p2 = faceArray[faceIdx].P2; if (mesh3ds.texCoords() > 0) { GL.glTexCoord2f(texCoordArray[p0].U, texCoordArray[p0].V); GL.glVertex3f(vertexArray[p0].X, vertexArray[p0].Y, vertexArray[p0].Z); GL.glTexCoord2f(texCoordArray[p1].U, texCoordArray[p1].V); GL.glVertex3f(vertexArray[p1].X, vertexArray[p1].Y, vertexArray[p1].Z); GL.glTexCoord2f(texCoordArray[p2].U, texCoordArray[p2].V); GL.glVertex3f(vertexArray[p2].X, vertexArray[p2].Y, vertexArray[p2].Z); } else { GL.glVertex3f(vertexArray[p0].X, vertexArray[p0].Y, vertexArray[p0].Z); GL.glVertex3f(vertexArray[p1].X, vertexArray[p1].Y, vertexArray[p1].Z); GL.glVertex3f(vertexArray[p2].X, vertexArray[p2].Y, vertexArray[p2].Z); } } GL.glEnd(); } } } |