|
现在用java开发3d 游戏有两种途径: 1:java3D. 这里面还分基于openGL和基于directx两种。 2:jogl。 也就是 java+openGL的缩写
据个例子来说明这两个的关系:同样实现一个程序,前者相当于 mfc,后者相当于 c+api。 同样能实现,方式不同而已。 现在jogl的类库在第三方公司已经开发的很好了。基本用起来和java3D一样方便。比如 jwogl
前一阵作了一个3D动画的编辑器,大家可以看看效果,图片上演示的是基本动作,摇尾巴,瞪眼睛,低头抬脚。给做游戏做个铺垫。
现在用java开发3d得比较少。仅以此信息让更多的观望者有个更好的选择。------可以不用c的选择。
 下面是一个简单的例子。也是java3d的helloworld程序。。
import java.applet.Applet;//可以插入html import java.awt.BorderLayout;//窗口采用BorderLayout方式布局 import com.sun.j3d.utils.applet.MainFrame;//application import com.sun.j3d.utils.geometry.Sphere;//调用生成Box的Utility import com.sun.j3d.utils.geometry.Primitive; import com.sun.j3d.utils.universe.*;//观测位置的设置 import javax.media.j3d.*;//核心类 import javax.vecmath.*;//矢量计算
public class Hello extends Applet { public BranchGroup createSceneGraph() {
// 创建一个用来包含对象的数据结构 BranchGroup objRoot = new BranchGroup();
// 创建一个球并把它加入到objRoot中 Sphere sphere = new Sphere(0.5f); // 小球的半径为0.5米 objRoot.addChild(sphere);
// 创建一束红色光 Color3f light1Color = new Color3f(1.8f, 0.1f, 0.1f); // 设置光线的颜色 BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0); // 设置光线的作用范围 Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f); // 设置光线的方向 DirectionalLight light1 = new DirectionalLight(light1Color, light1Direction); // 指定颜色和方向,产生单向光源 light1.setInfluencingBounds(bounds); // 把光线的作用范围加入光源中 objRoot.addChild(light1); // 将光源加入objRoot组
return objRoot; } public Hello() { setLayout(new BorderLayout()); // 设置一个BorderLayout Canvas3D c=new Canvas3D(null); // 构造一个图形环境 add("Center",c); // 将图形环境放入BorderLayout的中心位置 BranchGroup scene=createSceneGraph(); // 生成一个场景图分支,在其中定义分支的形体、材质、灯光等信息 SimpleUniverse u=new SimpleUniverse(c); // 生成虚拟空间 u.getViewingPlatform().setNominalViewingTransform(); // 设置观察者的位置为缺省位置 u.addBranchGraph(scene); // 把场景放入虚拟空间中 } public static void main(String[] args) { new MainFrame(new Hello(),300,300); // 生成一个MainFrame对象,MainFrame是Java 3D提供的一个实用工具 // 如此处理就使程序既可以按Application的方式在控制台上用“Java Hello”运行 // 也能作为Applet在被浏览的网页中运行 } }
java3d的结构继承了java的严谨。条理性趋近于完美。。如果你从用vc+opengl开发转到java3d平台,感觉就像是从垃圾堆里面爬出来,终于走上干净的大道了。 其结构如下: VirtualUniverse | | Locale | / \ BG BG | | TG TG | \ Shape ViewPlatform====View====Canvas3D====Screen3D | \ / \ Ap Ge Viewer Enviorment
BG: BranchGroup 分支节点 TG: TransformGroup 变换节点,可以用变换矩阵控制 Ap:Appearance 物体外观数据 Ge: Geometry 物体形状数据
|