Fettkopp
2008-02-21, 21:09:05
Ich hab grad ein Problem mit dem Vector4d in Java3d. Ich sitz derzeit an einer Aufgabe, bei der ich ein Würfel erstellen soll und mithilfe der ModelClip Methode soll ich ein Dreieck in den Cube reinschneiden. Mit Vector4d setz ich die Clipping Ebenen. Nur kann ich gerade nichts damit anfangen was mir die 4 Werte sagen
Vector4d(x,y,z,w) Wie definiert sich aus diesen 4 Werten eine Ebene? Ein 3d Vector gibt ja sozusagen durch x,y,z einen Punkt im Raum an? Aber wie wird denn jetzt bei 4d eine ganze Ebene dargestellt?
Hier mal der Code... (der auch funktioniert, die jeweiligen Vector4d Werte habe ich aus einer Musterlösung)
import java.awt.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.behaviors.vp.*;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.applet.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.*;
import java.applet.*;
import com.sun.j3d.utils.geometry.*;
import java.applet.Applet;
public class aufgabe61 extends Applet{
public BranchGroup createSceneGraph()
{
ColorCube cube = new ColorCube();
ColorCube cube2 = new ColorCube();
ColorCube cube3 = new ColorCube();
Appearance app = new Appearance();
PolygonAttributes poly = new PolygonAttributes();
poly.setCullFace(PolygonAttributes.CULL_NONE);
app.setPolygonAttributes(poly);
cube.setAppearance(app);
cube2.setAppearance(app);
cube3.setAppearance(app);
// Eigene BranchGroups für den Cube
BranchGroup myGroup = new BranchGroup();
BranchGroup myGroup2 = new BranchGroup();
BranchGroup myGroup3 = new BranchGroup();
myGroup.addChild(cube);
myGroup2.addChild(cube2);
myGroup3.addChild(cube3);
// Schneidung des 1. Würfels
// ModelClip erzeugen
ModelClip dreieck = new ModelClip();
//3 ebenen werden benötigt (dreieck)
boolean enables[] =
{ true, false, false, false, false, false };
// zuweisen
dreieck.setEnables(enables);
// Clipping Ebene setzen
dreieck.setPlane(0, new Vector4d(2,-1,0,0.8));
//Gültigkeitsbereich definieren
dreieck.addScope(myGroup);
// Schneidung des 2. Würfels
// ModelClip erzeugen
ModelClip dreieck2 = new ModelClip();
dreieck2.setEnables(enables);
// Clipping Ebene setzen
dreieck2.setPlane(0, new Vector4d(-2,-1,0,0.8));
//Gültigkeitsbereich definieren
dreieck2.addScope(myGroup2);
// Schneidung des 3. Würfels
// ModelClip erzeugen
ModelClip dreieck3 = new ModelClip();
dreieck3.setEnables(enables);
// Clipping Ebene setzen
dreieck3.setPlane(0, new Vector4d(0,1,0,0.8));
//Gültigkeitsbereich definieren
dreieck3.addScope(myGroup3);
//Begrenzung für Clipping Objekt bestimmen
//1.Versuch: Standardkugel
// Bounds bounds = new BoundingSphere();
//2. Versuch: Box
Bounds bounds = new BoundingBox(new Point3d(-3.5f, -0.5f, -1.0f),
new Point3d(3.5f, 0.5f, 1.0f));
dreieck.setInfluencingBounds(bounds);
dreieck2.setInfluencingBounds(bounds);
dreieck3.setInfluencingBounds(bounds);
BranchGroup root = new BranchGroup();
root.addChild(myGroup);
root.addChild(myGroup2);
root.addChild(myGroup3);
root.addChild(dreieck);
root.addChild(dreieck2);
root.addChild(dreieck3);
root.addChild(Utils.createAxis(7f));
return root;
}
public void init(){
SimpleUniverse universe = Utils.createUniverse(this);
universe.addBranchGraph(createSceneGraph());
}
/** Creates a new instance of Action */
public aufgabe61() {}
public static void main(String[] args){
new MainFrame(new aufgabe61(), 800, 600);
}
}
Vector4d(x,y,z,w) Wie definiert sich aus diesen 4 Werten eine Ebene? Ein 3d Vector gibt ja sozusagen durch x,y,z einen Punkt im Raum an? Aber wie wird denn jetzt bei 4d eine ganze Ebene dargestellt?
Hier mal der Code... (der auch funktioniert, die jeweiligen Vector4d Werte habe ich aus einer Musterlösung)
import java.awt.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.behaviors.vp.*;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.applet.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.*;
import java.applet.*;
import com.sun.j3d.utils.geometry.*;
import java.applet.Applet;
public class aufgabe61 extends Applet{
public BranchGroup createSceneGraph()
{
ColorCube cube = new ColorCube();
ColorCube cube2 = new ColorCube();
ColorCube cube3 = new ColorCube();
Appearance app = new Appearance();
PolygonAttributes poly = new PolygonAttributes();
poly.setCullFace(PolygonAttributes.CULL_NONE);
app.setPolygonAttributes(poly);
cube.setAppearance(app);
cube2.setAppearance(app);
cube3.setAppearance(app);
// Eigene BranchGroups für den Cube
BranchGroup myGroup = new BranchGroup();
BranchGroup myGroup2 = new BranchGroup();
BranchGroup myGroup3 = new BranchGroup();
myGroup.addChild(cube);
myGroup2.addChild(cube2);
myGroup3.addChild(cube3);
// Schneidung des 1. Würfels
// ModelClip erzeugen
ModelClip dreieck = new ModelClip();
//3 ebenen werden benötigt (dreieck)
boolean enables[] =
{ true, false, false, false, false, false };
// zuweisen
dreieck.setEnables(enables);
// Clipping Ebene setzen
dreieck.setPlane(0, new Vector4d(2,-1,0,0.8));
//Gültigkeitsbereich definieren
dreieck.addScope(myGroup);
// Schneidung des 2. Würfels
// ModelClip erzeugen
ModelClip dreieck2 = new ModelClip();
dreieck2.setEnables(enables);
// Clipping Ebene setzen
dreieck2.setPlane(0, new Vector4d(-2,-1,0,0.8));
//Gültigkeitsbereich definieren
dreieck2.addScope(myGroup2);
// Schneidung des 3. Würfels
// ModelClip erzeugen
ModelClip dreieck3 = new ModelClip();
dreieck3.setEnables(enables);
// Clipping Ebene setzen
dreieck3.setPlane(0, new Vector4d(0,1,0,0.8));
//Gültigkeitsbereich definieren
dreieck3.addScope(myGroup3);
//Begrenzung für Clipping Objekt bestimmen
//1.Versuch: Standardkugel
// Bounds bounds = new BoundingSphere();
//2. Versuch: Box
Bounds bounds = new BoundingBox(new Point3d(-3.5f, -0.5f, -1.0f),
new Point3d(3.5f, 0.5f, 1.0f));
dreieck.setInfluencingBounds(bounds);
dreieck2.setInfluencingBounds(bounds);
dreieck3.setInfluencingBounds(bounds);
BranchGroup root = new BranchGroup();
root.addChild(myGroup);
root.addChild(myGroup2);
root.addChild(myGroup3);
root.addChild(dreieck);
root.addChild(dreieck2);
root.addChild(dreieck3);
root.addChild(Utils.createAxis(7f));
return root;
}
public void init(){
SimpleUniverse universe = Utils.createUniverse(this);
universe.addBranchGraph(createSceneGraph());
}
/** Creates a new instance of Action */
public aufgabe61() {}
public static void main(String[] args){
new MainFrame(new aufgabe61(), 800, 600);
}
}