C
CptKebap
Gast
Hallo,
Ich bin noch Anfänger und versuche eine etwas komplexere Fläche aus vielen Polygonen zu beleuchten, damit die körperlichlkeit zu sehen ist. Die Polygone erstelle ich mit einem TriangleStripArray. Als Lichtquelle habe ich ein PointLight über der Fläche gesetzt.
Mein Problem ist jetzt, dass die einzelnen Polygone nicht schattiert werden, sprich alle haben die gleiche Farbe. Wenn ich zum testen noch eine Sphere mit den selben Material usw Settings hinzufüge wird diese korrekt beleuchtet. Woran könnte das liegen? Für Hilfe wäre ich sehr dankbar!
Hier noch der relevante Quellcode:
In den Schleifen tu ich ein Punktraster Streifenweise dem Shape3D zuordnen, also für jeden Streifen ein TriangleStripArray anlegen.
Ich bin noch Anfänger und versuche eine etwas komplexere Fläche aus vielen Polygonen zu beleuchten, damit die körperlichlkeit zu sehen ist. Die Polygone erstelle ich mit einem TriangleStripArray. Als Lichtquelle habe ich ein PointLight über der Fläche gesetzt.
Mein Problem ist jetzt, dass die einzelnen Polygone nicht schattiert werden, sprich alle haben die gleiche Farbe. Wenn ich zum testen noch eine Sphere mit den selben Material usw Settings hinzufüge wird diese korrekt beleuchtet. Woran könnte das liegen? Für Hilfe wäre ich sehr dankbar!
Hier noch der relevante Quellcode:
In den Schleifen tu ich ein Punktraster Streifenweise dem Shape3D zuordnen, also für jeden Streifen ein TriangleStripArray anlegen.
Code:
PolygonAttributes polyatt = new PolygonAttributes();
polyatt.setCullFace(PolygonAttributes.CULL_NONE);
polyatt.setPolygonMode(PolygonAttributes.POLYGON_FILL);
Appearance app2 = new Appearance();
app2.setPolygonAttributes(polyatt);
Material m = new Material(new Color3f(0.2f, 0.2f, 0.2f),
new Color3f(0f, 0f, 0f),
new Color3f(0.4f, 1f, 0.1f),
new Color3f(1f, 0.2f, 0.7f),
50f);
m.setLightingEnable(true);
app2.setMaterial(m);
ColoringAttributes colorAttrib = new ColoringAttributes(0.5f, 0.2f,
0.2f, ColoringAttributes.SHADE_GOURAUD);
app2.setColoringAttributes(colorAttrib);
Shape3D s3d2 = new Shape3D();
s3d2.setAppearance(app2);
for (int j = 0; j < (189 - 1); j++) {
for (int k = 0; k < 2; k++) {
Vector temp = new Vector();
if (k == 0) {
for (int i = 0; i < (240 - 1); i++) {
temp.add(new Point3d(xKoor[i + j * 240],
yKoor[i + j * 240],
zKoor[i + j * 240]));
temp.add(new Point3d(xKoor[(i + 1) + j * 240],
yKoor[(i + 1) + j * 240],
zKoor[(i + 1) + j * 240]));
temp.add(new Point3d(xKoor[(i + 240) + j * 240],
yKoor[(i + 240) + j * 240],
zKoor[(i + 240) + j * 240]));
}
} else if (k == 1) {
for (int i = 0; i < (240 - 1); i++) {
temp.add(new Point3d(xKoor[i + 1 + j * 240],
yKoor[i + 1 + j * 240],
zKoor[i + 1 + j * 240]));
temp.add(new Point3d(xKoor[i + 240 + 1 + j * 240],
yKoor[i + 240 + 1 + j * 240],
zKoor[i + 240 + 1 + j * 240]));
temp.add(new Point3d(xKoor[i + 240 + j * 240],
yKoor[i + 240 + j * 240],
zKoor[i + 240 + j * 240]));
}
}
Point3d[] reihe = new Point3d[temp.size()];
for (int u = 0; u < temp.size(); u++) {
reihe[u] = (Point3d) temp.get(u);
}
int[] StripCount = {reihe.length};
TriangleStripArray tsa = new TriangleStripArray(reihe.length,
TriangleStripArray.COORDINATES |
TriangleStripArray.COLOR_3 | TriangleStripArray.NORMALS,
StripCount);
tsa.setCoordinates(0, reihe);
s3d2.addGeometry(tsa);
}
}
pointTG.addChild(s3d2);