Java3D中平行光投影的实现 - 编程入门网
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-06-17
ay.COLOR_3);
int v;
Point3f vertex=new Point3f();
Point3f shadow=new Point3f();
for(v=0;v<vCount;v++){
//计算可见面顶点在投影面上的投影坐标
geom.getCoordinate(v,vertex);
System.out.println(vertex.y-height);
shadow.set(vertex.x-(vertex.y-height),height+0.0001f,
vertex.z-(vertex.y-height));
poly.setCoordinate(v,shadow);
poly.setColor(v,col);
}
this.setGeometry(poly);
}
}
public SimpleShadow(){
this.setLayout(new BorderLayout());
//GraphicsConfiguration config =SimpleUniverse.getPreferredConfiguration();
Canvas3D c=new Canvas3D(null);
this.add("Center",c);
//创建分支节点
BranchGroup scene=new BranchGroup();
//创建三角形可见平面
Shape3D plane=new TriPlane(new Point3f(0.0f,0.6f,-0.2f),
new Point3f(-0.3f,-0.3f,0.2f),
new Point3f(0.6f,-0.3f,0.2f));
//添加到根分支节点
scene.addChild(plane);
//创建四边形投影平面
Shape3D floor=new QuadPlane(new Point3f(-1.0f,-0.5f,-1.0f),
new Point3f(-1.0f,-0.5f,1.0f),new Point3f(1.0f,-0.5f,1.0f),
new Point3f(1.0f,-0.5f,-1.0f));
//添加到根分支节点
scene.addChild(floor);
//添加到环境光
AmbientLight lightA=new AmbientLight();
lightA.setInfluencingBounds(new BoundingSphere());
scene.addChild(lightA);
//添加平行光
DirectionalLight lightD1=new DirectionalLight();
lightD1.setInfluencingBounds(new BoundingSphere());
Vector3f direction=new Vector3f(-1.0f,-1.0f,-1.0f);
//方向矢量单位化
direction.normalize();
lightD1.setDirection(direction);
scene.addChild(lightD1);
//创建阴影物体
Shape3D shadow=new Shadow3D((GeometryArray)plane.getGeometry(),direction,
new Color3f(0.2f,0.2f,0.2f),-0.5f);
scene.addChild(shadow);
SimpleUniverse u=new SimpleUniverse(c);
u.getViewingPlatform().setNominalViewingTransform();
u.addBranchGraph(scene);
}
public static void main(String argv[]){
new MainFrame(new SimpleShadow(),256,256);
}
} |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于Java3D中平行光投影的实现 - 编程入门网的所有评论