JSR184解读(一)

来源:互联网 发布:大道行知文化传媒 编辑:程序博客网 时间:2024/06/05 21:17

JSR184规范是J2ME3D图形的核心.

包名: Package javax.microedition.m3g.

WTK2.5.2  lib 中包含了jsr184.jar,不用额外添加.

JSR184一共定义了30个类.

 

Object3D是其中最重要的类,J2ME的核心.现在就解析一下Object3D.

 

Object3D 3D对象类.抽象类.抽象了3D物体的某些共同操作.,例如:变形,位移,动画等.其子类AnimationController, AnimationTrack, Appearance, Background, CompositingMode, Fog, Image2D, IndexBuffer, KeyframeSequence, Material, PolygonMode, Transformable, VertexArray, VertexBuffer:

其重要的关系网.除了Graphics3DTransform,其他的类都继承于Object3D

       

 

.3D场景的实现:

3D的场景中的 最底层是World,Graphics3D直接绘制在GameCanvas中的实例.

World类中只有2个重要方法.setActiveCamera , setBackgound.设置背景和设置照相机.

Background在世界中的是无位置的,视角上时刻位于3d世界的-Z无穷远处.可以设置颜色或Image2D图片作为背景.默认情况下,Background是一幅静止不动的图片,3D世界中的视角转动的时候,图片依旧不变.但是可以自己编写代码,使Background呈现上下左右的移动视角.

Camera就是视角,设定在3D视角中看到的范围,在固定的范围显示物体.其最重要的方法是setPerspective.

Mesh就是多面体的意思.所有的3D实物都归纳为多面体.我们构造的实例,如人物,高山,飞机等都是多面体的实例.多面体添加到world中就形式3D空间中的物体.

Group 组节点的意思.它的作用就是把多个Mesh放到一组中,然后移动或变换Group就能实现对一组Mehs的操作. CameraLight通常都放在一个Group,方便视角移动的时候光线也移动.

注意:任何一个节点都只有一个父节点,换个话说,就是一个节点只有一个直接上级.一个上级下面可以有多个不同的下级.

Sprite3D 3D精灵.2D图片实现3纬效果.2D游戏时代就用这种方法了.

 

.3D效果的应用:

  1.Mesh的外观Appearance.Appearance引用到Material Fog Texture2D等类.

   多边形的表面属性是通过Mesh.setAppearance(int index,Appearance appearance)来设置,也可以在Mesh构造方法内设置.

  Appearanc直接New一个就Ok.但是新建立的Appearance没什么意义.需要用一下方法扩充: setCompositingMode(颜色合成模式),颜色的融合,Alpha门限(透明属性)

setFog(雾化参数),目的就是使Mesh轮廓不太尖锐.

setLayer(将要显示的层),

setPOlygonmode(多边形模式), 修饰Mesh是否平滑,显示正面背面等性质.

setMaterial(材质,有光线效果的时候用), 设置物体表面反射光线的属性.

SetTexture(纹理.) 设置纹理.Mesh的贴图就是靠设置这个属性.

  通常理想的情况下只需要使用到Image2D把大部分的特效绘制出来,这样可以减少手机的运算.

共同构成立体物件的类组合:

2.动画特效:

2.1Sprite3D 3D精灵来实现,这样比较简单,而且少负荷.

2.2动画的对象是Mesh! Mesh运动轨迹AnimationTrack.动画的运动时间,速度或多个动画轨迹在一个Mesh中使用需要设置AnimationController.动画轨迹的核心KeyframeSequence负责设置有限的数帧Mesh位置,CPU计算出Mesh运动中其他帧的位置.

此过程设置的动画分为 关键帧动画,骨骼蒙皮动画,变形物体动画.

(具体方法我会在另外的文章中提及.)