以下代码将立方体置于(0,0,0),而将另一个置于(0,.5,.5)处,并且每个立方体置于(.5,.5,.5)中尺寸。我试图旋转屏幕变成这样的视图,但是我得到这个视图。另外,我意识到我已经把颜色倒退了。在Java3d中旋转观察平台
无论如何,这是到目前为止我的代码:
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();
}
}
所以现在画布是黑色的,我想可能是我上的lookAt功能定位。我也不完全确定向上的向量是什么。有想法该怎么解决这个吗?
谢谢。我确实找到了lookAt函数,但我认为我错误地使用了它。感谢您的建议,我更新了我的代码。 – SummerCodin 2010-08-18 23:56:52
@SummerCodin:文档确实表示'lookAt'生成的变换应该颠倒过来以控制'ViewPlatform'。尝试将'lookAt.invert()'传递给'setTransform'。 – Troubadour 2010-08-19 09:04:01
@Troubadour感谢清理lookAt功能。但是,即使将向上方向设置为y轴上眼睛正上方的点,画布仍然会全部变黑。我已更新我的代码,以便您可以看到我的更改。我做错了什么吗?到目前为止,再次感谢您的帮助。 – SummerCodin 2010-08-19 21:22:35