m3g note 4

m3g note 4

///////////////////
    note 4
///////////////////
1.camer的可视范围
照相机利用setPerspective方法设置在它前端的坐标系统中什么范围内的对象是可见的。
2.建立3D对象(棱锥)的过程。
2.1.这一步比较简单,指定棱锥用到的五个点。
2.2.建立一个点序列的INDICES 数组,这个数组中和第一步中建立的点1到点5对应.
2.3.分别指定五个点对应的颜色信息,
包含了顶点的信息,其中 0 到 4 依次每个顶点都是按中的元素是表示将对照RGB的顺序。在以上的步骤中请大家注意一点,就是每一步中的数组的类型。
2.4.指定一个LENGTH数组,它其应的INDICES数组中元素划分为序列时,每个序列的长度。例子中的值是3,就表示INDICES中每三个元素作为一个序列。我们会发现,将INDICES中按照三个一组进行划分,所得到的每组序列刚好是组成一个三角形所需要的三个顶点。
2.5.使用VertexArray 对象来保存顶点位置和颜色信息。VertexArray 中三个参数的意义分别为建组成棱锥的三角面。TriangleStripArray 是 IndexBuffer类的能会保存法线信息(setNormals)。是顶载范例程序和源代码:第一个是创建的对象中元素的个数,第二个是每个元素所包含的子元素数,第三个用来指定每个子元素所占的字节数。
2.6.使用TriangleStripArray对象创子类,它是根据第二个参数将第一个参数也就是INDICES数组中的元素划为序列,组成三角面。在例子中是将INDICES中元素每三个划分为一个序列,刚好组成一个三角面。但是有时可能不是三个划分的,例如对于正方体我们可以定义LENGTH={4,4,4,4,4,4},这时INDICES中元素就会按照四个一组划分,于是这四个元素中的前三个先组成一个三角面,然后后面的两个元素交换位置和第四个元素再组成一个三角面,例如S=(2,0,1,4)就定义了两个三角面:(2,0,1)和(1,0,4)。另外TriangleStripArray中的INDICES数组也可以隐式声明,即TriangleStripArray(int, int[]),此时第一个参数指定了数组中起始元素,后面的元素依次加1递增。例如LENGTH={3,4},那么TriangleStripArray(0, LENGTH)就相当于指定了INDICES={0,1,2,3,4,5,6}。
2.7.利用VertexBuffer保存位置和颜色信息,有时也可能会保存法线信息(setNormals)
2.8.这是最后一步,使用Mesh建立3D对象。这里Mesh的构造函数有三个参数,第一个点的相关信息,例如位置、颜色和法线等,第二个是组成3D对象的三角面或子Mesh对象(并不是指Mesh的子类或Mesh对象)的信息,第三个是外观,Appearance对象,如果在这里指定为null,那么在建立Mesh对象以后,还可以通过setAppearance设定。
// 棱锥用到的顶点. x, y, z
short []POINTS = new short[] {-1, -1, 1, // 点1
1, -1, 1, // 点2
1, -1, -1, // 点3
-1, -1, -1, // 点4
0, 1, 0}; // 点5, 顶点
// 点序列
int []INDICES = new int[] {0, 1, 4, 1, 2, 4, 2, 3, 4, 3, 0, 4, 2, 1, 0, 2, 0, 3};
byte []COLORS = new byte[] {127, 0, 0, //R
0, 127, 0, //G
0, 0, 127, //B
127, 0, 127, //B
0, 127, 127}; //B
//indices数组中每一个序列的长度。
int []LENGTH = new int[] {3, 3, 3, 3, 3, 3}; // 棱锥由6个三角形组成
VertexArray POSITION_ARRAY, COLOR_ARRAY;
IndexBuffer INDEX_BUFFER;
// 创建一个被VertexBuffer用到的VertexArray
POSITION_ARRAY = new VertexArray (POINTS.length / 3, 3, 2);
POSITION_ARRAY.set (0, POINTS.length / 3, POINTS);
COLOR_ARRAY = new VertexArray (COLORS.length / 3, 3, 1);
COLOR_ARRAY.set (0, COLORS.length / 3, COLORS);
INDEX_BUFFER = new TriangleStripArray (INDICES, LENGTH);
// VertexBuffer保存了对VertexArray对象的引用,而这些VertexArray对象可能包
// 含了一系列顶点的位置、法线、颜色和纹理信息。
VertexBuffer vertexBuffer = new VertexBuffer ();
vertexBuffer.setPositions (POSITION_ARRAY, 1.0f, null);
vertexBuffer.setColors (COLOR_ARRAY);
// 创建一个3D对象,定义为一个多边形的平面
Mesh mesh = new Mesh (vertexBuffer, INDEX_BUFFER, null);
// 一个包含了定义Mesh渲染特征的组件对象的集合。
Appearance appearance = new Appearance ();
// A set of component objects that define the rendering attributes of a Mesh
// 一个Appearance组件,它封装了多边形级别的特征
PolygonMode polygonMode = new PolygonMode ();
polygonMode.setPerspectiveCorrectionEnable (true);
// 通过使用CULL_NONE棱锥的所有面都会显示
polygonMode.setCulling (PolygonMode.CULL_NONE);
// 棱锥使用平滑的颜色渐变
polygonMode.setShading (PolygonMode.SHADE_SMOOTH);
appearance.setPolygonMode (polygonMode);
// 为3D对象设置外观(appearance)
mesh.setAppearance (0, appearance);

One thought on “m3g note 4

  1. wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling
    wow power leveling -229240473702756

Leave a Reply

Your email address will not be published. Required fields are marked *