知识大全 java3D中平行光投影的实现

Posted

篇首语:最是人间留不住,朱颜辞镜花辞树。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 java3D中平行光投影的实现相关的知识,希望对你有一定的参考价值。

java3D中平行光投影的实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  理论根据:假设一个光的方向是( )  投影到XZ平面

  一个是直线方程 一个是平面方程 求交而且平面方程还比较特殊 经过原点 法向量是 简化后就简单了 假定v是直线的方向

  x vertex x       y vertex y        z vertex z   = =          直线方程     v x               v y                 v z

  平面方程 y =

  带入就得到了x = vertex x + v x / v y * ( vertex y)z = vertex z + v x / v z * ( vertex z)

  源程序:import java applet Applet;import java awt BorderLayout;import java awt GraphicsConfiguration;import java awt Label;import sun j d utils applet MainFrame;import sun j d utils universe *;import sun j d utils geometry *;import dia j d *;import javax vecmath *;public class SimpleShadow extends Applet //三角平面类 public class TriPlane extends Shape D  TriPlane(Point f A Point f B Point f C)   this setGeometry(this createGeometry (A B C));   this setAppearance(this createAppearance());    //建立三角平面    Geometry createGeometry (Point f A Point f B Point f C)   TriangleArray plane=new TriangleArray( GeometryArray COORDINATES|GeometryArray NORMALS);   //设置平面 个顶点的坐标   plane setCoordinate( A);   plane setCoordinate( B);   plane setCoordinate( C);      //计算平面法向量   Vector f a=new Vector f(A x B x A y B y A z B z);   Vector f b=new Vector f(C x B x C y B y C z B z);   Vector f n=new Vector f();   n cross(b a);   //法向量单位化   n normalize();   //设置平面 个顶点的法向量   plane setNormal( n);   plane setNormal( n);      plane setNormal( n);   return plane;      //创建Material不为空的外观    Appearance createAppearance()   Appearance appear=new Appearance();   Material material=new Material();   appear setMaterial(material);   return appear;        //四边平面类 public class QuadPlane extends Shape D    QuadPlane(Point f A Point f B Point f C Point f D)   this setGeometry(this createGeometry (A B C D));   this setAppearance(this createAppearance());      //创建四边性平面  Geometry createGeometry (Point f A Point f B Point f C Point f D)   QuadArray plane=new QuadArray( GeometryArray COORDINATES|GeometryArray NORMALS);   //设置平面 个顶点的坐标   plane setCoordinate( A);   plane setCoordinate( B);   plane setCoordinate( C);   plane setCoordinate( D);   //计算平面法向量   Vector f a=new Vector f(A x B x A y B y A z B z);   Vector f b=new Vector f(C x B x C y B y C z B z);   Vector f n=new Vector f();   n cross(b a);   //法向量单位化   n normalize();   //设置平面 个顶点的法向量   plane setNormal( n);   plane setNormal( n);   plane setNormal( n);   plane setNormal( n);   return plane;     

  //创建Material不为空的外观    Appearance createAppearance()   Appearance appear=new Appearance();   Material material=new Material();   appear setMaterial(material);   return appear;      //阴影类 public class Shadow D extends Shape D  Shadow D(GeometryArray geom Vector f direction Color f col float height)   int vCount=geom getVertexCount();   TriangleArray poly=new TriangleArray(vCount GeometryArray COORDINATES|GeometryArray COLOR_ );   int v;   Point f vertex=new Point f();   Point f shadow=new Point f();      for(v= ;v<vCount;v++)    //计算可见面顶点在投影面上的投影坐标    geom getCoordinate(v vertex);    System out println(vertex y height);          shadow set(vertex x (vertex y height) height+ f 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();  Canvas D c=new Canvas D(null);  this add( Center c);  //创建分支节点  BranchGroup scene=new BranchGroup();  //创建三角形可见平面  Shape D plane=new TriPlane(new Point f( f f f) new Point f( f f f) new Point f( f f f));  //添加到根分支节点  scene addChild(plane);  //创建四边形投影平面  Shape D floor=new QuadPlane(new Point f( f f f) new Point f( f f f) new Point f( f f f) new Point f( f f f));  //添加到根分支节点  scene addChild(floor);  //添加到环境光  AmbientLight lightA=new AmbientLight();  lightA setInfluencingBounds(new BoundingSphere());  scene addChild(lightA);  //添加平行光  DirectionalLight lightD =new DirectionalLight();  lightD setInfluencingBounds(new BoundingSphere());  Vector f direction=new Vector f( f f f);  //方向矢量单位化   direction normalize();  lightD setDirection(direction);  scene addChild(lightD );  //创建阴影物体  Shape D shadow=new Shadow D((GeometryArray)plane getGeometry() direction new Color f( f f f) f);  scene addChild(shadow);  SimpleUniverse u=new SimpleUniverse(c);  u getViewingPlatform() setNominalViewingTransform();  u addBranchGraph(scene);   public static void main(String argv[])  new MainFrame(new SimpleShadow() ); 

cha138/Article/program/Java/hx/201311/26962

相关参考

猫眼性Chatoyancy

猫眼性是某些矿物在反射光时产生一个光的亮带,犹如猫的眼睛一样的这种性质。  在有些矿物中,由于有平行排列的长条状包裹体或者是由于紧密平行排列的纤维产生的这种丝绢状现象。一块从这种矿物切成的圆顶宝石散射

什么叫近视、远视、散光?

在调节静止状态下,5米以远的平行光射入眼后聚焦于视网膜前--近视  在调节静止状态下,5米以远的平行光射入眼后聚焦于视网膜后--远视  在调节静止状态下,5米以远的平行光射入眼后不能聚焦,而是形成多条

什么是侧光

阳光从侧面射向被摄体,称为侧光。侧光照射被摄体,在另一侧产生具有明显方向性的投影,它能较好地表现被摄体的肌理和立体感,纵深感强,造型效果好。所以,侧光摄影的影调层次比正面光丰富得多。被摄体的某些部位受

知识大全 用手机投影到电脑上该怎么弄

用手机投影到电脑上该怎么弄将手机当做U盘连接电脑,传输歌曲、照片等文件使用。具体连接方法如下:1.首先在您的电脑上安装Kies软件,如果您的电脑中未安装Kies软件,有可能会因缺少手机驱动导致无法连接

激光视网膜光凝有哪些优点?

(1)由于激光的平行性和相干性好,可形成很细的光束,它在视网膜上的成焦面积可小到以微米计。故损伤面积很小,又加上其光凝点可精确地落到欲治疗的部位上,因此特别适于黄斑区周围病变的治疗。  (2)激光的光

激光视网膜光凝有哪些优点?

(1)由于激光的平行性和相干性好,可形成很细的光束,它在视网膜上的成焦面积可小到以微米计。故损伤面积很小,又加上其光凝点可精确地落到欲治疗的部位上,因此特别适于黄斑区周围病变的治疗。  (2)激光的光

知识大全 请推荐几款家用投影仪,价格300到500左右,上课的时候投影在墙上可以看清楚的。谢谢

请推荐几款家用投影仪,价格300到500左右,上课的时候投影在墙上可以看清楚的。谢谢!你说的价位的投影仪估计达不到你想要的效果你可以看一下vez、极米、酷乐视、智歌、巨集碁、明基、美迪、山水、坚果这些

知识大全 什么软体可以吧手机萤幕投影到电脑上

什么软体可以吧手机萤幕投影到电脑上膝上型电脑先安装好豌豆荚软体。笔记本连线好投影仪,调至笔记本的萤幕可以在投影仪上正常显示。把智慧手机与膝上型电脑进行连线,启动豌豆荚软体,连线上手机。开启豌豆荚软体上

知识大全 iphone能投影到ipad上吗

iphone能投影到ipad上吗不能哦,可以投影到电视机上。具体步骤如下:(1)如果手机里的视讯和照片是下载快取在手机上的,可以用资料线把手机和电视机的USB介面连线起来,这样手机就可以作为U盘,电视

知识大全 投影机是不是流明越高,清晰度越高呢

投影机是不是流明越高,清晰度越高呢,投影机是流明越高,清晰度就越高吗?流明:光通量的单位,通俗的的说就是亮度了。我们选择投影机的时候并不是亮度越高越好,而要根据使用环境来选择。因为亮度过高看起来会刺眼