Ik moet voor de les een 3D renderer schrijven. Nu is dat redelijk goed gelukt, alleen krijg ik geen textures op mijn objecten geplakt. Ik zit hier nu al een week op te zoeken, en ik weet echt niet waar de fout zou kunnen zitten. Ik gebruik de volgende methode om de texture te tekenen:
Waarbij die texture.getImageArray() gedefinieerd is als:
Maar dat geeft dus alleen zwarte vlakken. Iemand die de fout ziet?
code:
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
46
47
48
49
| public void draw(Texture texture, GL gl, Matrix4f matrix) {
int[] texname = new int[1];
gl.glPixelStorei(GL.GL_UNPACK_ALIGNMENT, 1);
gl.glGenTextures(1, texname);
gl.glBindTexture(GL.GL_TEXTURE_2D, texname[0]);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_S, GL.GL_REPEAT);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_T, GL.GL_REPEAT);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_NEAREST);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_NEAREST);
gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGBA, texture.getWidth(),
texture.getHeight(), 0, GL.GL_RGBA, GL.GL_INT,
texture.getImageArray());
gl.glTexEnvf(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_DECAL);
Point3f[] coordinates = getCoordinates();
int[] coordinateIndices = getCoordIndices();
TexCoord2f[] textureCoordinates = getTexCoord();
int[] textureCoordinateIndices = getTexCoordIndices();
int size = coordinateIndices.length;
float[] coord1={0,0,0},coord2={0,0,0},coord3={0,0,0};
float[] texCoord1={0,0},texCoord2={0,0},texCoord3={0,0};
gl.glEnable(GL.GL_TEXTURE_2D);
gl.glPushMatrix();
if(matrix != null) {
gl.glMultMatrixf(matrix.getMatrixArray());
}
gl.glBindTexture(GL.GL_TEXTURE_2D, texname[0]);
gl.glBegin(GL.GL_TRIANGLES);
for (int i=0; i<size; i+=3) {
coordinates[coordinateIndices[i]].get(coord1);
coordinates[coordinateIndices[i+1]].get(coord2);
coordinates[coordinateIndices[i+2]].get(coord3);
textureCoordinates[textureCoordinateIndices[i]].get(texCoord1);
textureCoordinates[textureCoordinateIndices[i+1]].get(texCoord2);
textureCoordinates[textureCoordinateIndices[i+2]].get(texCoord3);
gl.glTexCoord2f(texCoord1[0],texCoord1[1]); gl.glVertex3f(coord1[0],coord1[1],coord1[2]);
gl.glTexCoord2f(texCoord2[0],texCoord2[1]); gl.glVertex3f(coord2[0],coord2[1],coord2[2]);
gl.glTexCoord2f(texCoord3[0],texCoord3[1]); gl.glVertex3f(coord3[0],coord3[1],coord3[2]);
}
gl.glEnd();
gl.glPopMatrix();
gl.glDisable(GL.GL_TEXTURE_2D); |
Waarbij die texture.getImageArray() gedefinieerd is als:
code:
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
| public void getImage() {
int w = getWidth();
int h = getHeight();
int[] returnArray;
int[] temp;
Object buffer;
ColorModel model;
PixelGrabber grabber = new PixelGrabber($src, 0, 0, w, h, false);
try {
grabber.grabPixels();
}
catch (InterruptedException e) {
System.out.println("PixelGrabber Exception");
}
model = grabber.getColorModel();
buffer = grabber.getPixels();
temp = (int[])buffer;
int size = temp.length;
returnArray = new int[size];
for (int i=0; i<size; i++) {
returnArray[i] = model.getRGB(temp[i]);
}
image = returnArray;
} |
Maar dat geeft dus alleen zwarte vlakken. Iemand die de fout ziet?