Le code suivant place un cube à (0, 0, 0) et un autre à (0, .5, .5) et chaque cube est (.5, .5, .5) dans dimension. J'essaye de faire pivoter la vue que l'écran obtient à un tel comme ceci mais à la place j'obtiens cette vue
. Aussi, je réalise que j'ai récupéré les couleurs.Rotation de la plate-forme d'affichage dans Java3d
Quoi qu'il en soit, voici mon code jusqu'à présent:
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;
public class Positioning {
private Color3f lightBlue;
private Color3f aquaGreen;
private Color3f white;
private Color3f teal;
private BranchGroup group;
private SimpleUniverse universe;
public Positioning() {
lightBlue = new Color3f(0.0f, 0.749019608f, 1.0f);
aquaGreen = new Color3f(0.439215686f, 0.858823529f, 0.576470588f);
white = new Color3f(1.0f, 1.0f, 1.0f);
teal = new Color3f(0.196078431f, 0.6f, 0.8f);
universe = new SimpleUniverse();
group = new BranchGroup();
addCube(0.5f, 0.5f, 0.5f, new Vector3f(0.0f, 0.0f, 0.0f), lightBlue);
addCube(0.5f, 0.5f, 0.5f, new Vector3f(0.5f, 0.0f, 0.5f), aquaGreen);
//add light
DirectionalLight light1 = new DirectionalLight(white, new Vector3f(0.0f, 7.0f, -12.0f));
light1.setInfluencingBounds(new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0));
group.addChild(light1);
//look at the right spot
Transform3D lookAt = new Transform3D();
lookAt.lookAt(new Point3d(0.0, 0.0, 3.0), new Point3d(0.0, 0.0, 0.0), new Vector3d(1.0, 1.0, 0.0));
lookAt.invert();
universe.getViewingPlatform().getViewPlatformTransform().setTransform(lookAt);
universe.addBranchGraph(group);
}
public void addCube(float x, float y, float z, Vector3f position, Color3f color) {
TransformGroup tg = new TransformGroup();
Transform3D trans = new Transform3D();
Appearance app = new Appearance();
Material mat = new Material();
mat.setDiffuseColor(color);
mat.setSpecularColor(color);
app.setMaterial(mat);
Box b = new Box(x, y, z, app);
//move into position and add to the branch group
trans.setTranslation(position);
tg.setTransform(trans);
tg.addChild(b);
group.addChild(tg);
}
public static void main(String[] args) {
new Positioning();
}
}
Donc maintenant la toile est noire et je pense que ce pourrait être mon positionnement sur la fonction lookat. Je ne suis pas exactement sûr de ce que le vecteur haut est pour. Des idées pour résoudre le problème?
Merci. J'ai trouvé la fonction lookAt mais je pense que je l'utilise mal. J'ai mis à jour mon code grâce à votre suggestion. – SummerCodin
@SummerCodin: La documentation indiquait que la transformation générée par 'lookAt' devrait être inversée pour contrôler un' ViewPlatform'. Essayez de passer 'lookAt.invert()' dans 'setTransform'. – Troubadour
@Troubadour merci pour effacer la fonction lookAt. Cependant, même après avoir défini la direction du haut pour être un point juste au-dessus de l'œil sur l'axe des y, la toile finit toujours par être noire. J'ai mis à jour mon code pour que vous puissiez voir mes modifications. Est-ce que je fais quelque chose d'autre de mal? Merci encore pour votre aide jusqu'à présent. – SummerCodin