Guten Tag Experte ,
ich habe mal eine Frage. Ich lese Daten ein. Die Daten bekomme ich
von einer .*iges Datei. Von dieser bekomme ich Punkte im R^3 Raum.
In dieser Datei, wird bespielsweise ein Würfel beschrieben.
Punkte einlesen kein Thema. Ausgeben auch. Problem ist bei Java3d,
dass ich die Seitenfläche teilweise nur innen sehe, bzw wenn ich sie
nicht innen sehe, sehe ich diese außen. Das heißt, habe ich
nachgelesen, das der Normalenvektor einer Dreicksfläche nach innen
zeigt(heißt, nur innen angezeigt werden) aber der Normalenvektor soll
nach aussen gerichtet sein.
Im Code ist es soweit, das die Punkte alle in eine Array eingelesen
werden und dann nacheinander in ein TriangleArray, damit der Würfel
mittels der Dreiecke dargstellt werden kann. Wie bekomme ich jetzt
nun die richtig Richtung oder Orientierung des Normalenvektors, so das ich die Außenflächen sehe
Code:
/
So, und wie sage ich jetz, das die Normale, nach außen gerichtet ist,
damit die Seitefläche des Dreieckes gesehen wird?
ich habe mal eine Frage. Ich lese Daten ein. Die Daten bekomme ich
von einer .*iges Datei. Von dieser bekomme ich Punkte im R^3 Raum.
In dieser Datei, wird bespielsweise ein Würfel beschrieben.
Punkte einlesen kein Thema. Ausgeben auch. Problem ist bei Java3d,
dass ich die Seitenfläche teilweise nur innen sehe, bzw wenn ich sie
nicht innen sehe, sehe ich diese außen. Das heißt, habe ich
nachgelesen, das der Normalenvektor einer Dreicksfläche nach innen
zeigt(heißt, nur innen angezeigt werden) aber der Normalenvektor soll
nach aussen gerichtet sein.
Im Code ist es soweit, das die Punkte alle in eine Array eingelesen
werden und dann nacheinander in ein TriangleArray, damit der Würfel
mittels der Dreiecke dargstellt werden kann. Wie bekomme ich jetzt
nun die richtig Richtung oder Orientierung des Normalenvektors, so das ich die Außenflächen sehe
Code:
/
Code:
/mein Netz, was mit punkten gefüllt werden soll
TriangleArray netz=new
TriangleArray(points.size(),TriangleArray.COORDINATES |
TriangleArray.COLOR_3 | TriangleArray.NORMALS);
netz.setCapability(TriangleArray.ALLOW_COUNT_READ);
netz.setCapability(TriangleArray.ALLOW_COLOR_WRITE);
int i;
//points ist die arrayliste, wo die punkte drin liegen
// und die Punkte werden dann nacheinander ins
//triangleArray netz gespeichert -->hier dürfte wohl
//ein denk fehler sein, warum ich manche flächen
//nur von außen sehe bzw nur von innen ^^
for (i = 0; i <points.size(); i+=3) {
Point3d temp1= (Point3d) points.get(i);
Point3d temp2= (Point3d) points.get(i+1);
Point3d temp3= (Point3d) points.get(i+2);
Vector3f normale = null;
if ((temp1 != null) && (temp2 != null) & (temp3 != null) ){
netz.setCoordinate(i,temp1);
netz.setCoordinate(i+1,temp2);
netz.setCoordinate(i+2,temp3);
if (normale!=null){
//methode berechneNormale() ist unten zufinden
normale.berechneNormale();
}
Code:
private Vector3f berechneNormale(Point3d p1,Point3d p2, Point3d p3){
Vector3f normale = null;
// Ein Dreieck hat im Raum 3 Punkte p1, p2, p3 davon wird die Normale
//berechnet
Point3f v2 = new
Point3f((float)p2.x-(float)p1.x,(float)p2.y-(float)p1.y,(float)p2.z-(float)p1.z);
Point3f v3 = new
Point3f((float)p3.x-(float)p1.x,(float)p3.y-(float)p1.y,(float)p3.z-(float)p1.z);
//Kreuzprodukt
float xWert =v2.y*v3.zv2.z*v3.y;
float yWert = v2.z*v3.x-v2.x*v3.z;
float zWert = v2.x*v3.y-v2.y*v3.x;
//normale
normale = new Vector3f(xWert,yWert,zWert);
normale.normalize();
// }
return normale;
}
damit die Seitefläche des Dreieckes gesehen wird?