o3d 常见几何图形创建

1、基本形状包括:

o3djs.primitives.createCylinder(pack, material, 1, 2, 30, 30) //半径为1高度为2的圆柱体
o3djs.primitives.createCube(pack,material,1);             // 一个单位的正六面体
o3djs.primitives.createSphere(pack, material, 1, 30, 30) // 一个单位的球体

o3djs.primitives.createPlane(pack, material, 1, 1, 20, 20)//创建一个四边形平面
o3djs.primitives.createPrism(pack,material,polygon,1); //创建一个多边形,Z轴深度为1,polygon 顶点数组
createRainbowCube(pack, material, 1);彩色六面体
2、基础的几何形状包括:

POINTLIST, 离散的点
LINELIST, 离散的线
LINESTRIP, 连续的线
TRIANGLELIST, 离散的三角面
TRIANGLESTRIP, 带状三角面
TRIANGLEFAN 扇形三角面
3、形状的数据组成

顶点数据有下列组成:

POSITION, 顶点位置坐标
TEXTURE, 顶点纹理坐标
COLOR, 顶点颜色坐标
NORMAL, 顶点法线向量
TANGENT,顶点切线向量
BINORMAL,顶点次法线向量
indexBuffer ,面得顶点索引
其中,法线是为进行光照计算使用,纹理坐标是为纹理贴图使用,如果你不使用纹理,就要给每个顶点设置颜色。

4、如何创建一个几何形状

1)设置几何形状的顶点坐标、法线向量、颜色、纹理坐标等数据数组,其中顶点数据必须,其他可选。
2)设置面得数据索引数组。确定哪三个顶点组成一个三角面。
3)创建形状对象、图元对象、数据流对象,将对象关联到图元对象。
4)设置图元对象的基础几何形状类型、顶点数量、面得数量。
5)创建数据缓存对象,包括顶点数据缓存、法线数据缓存、纹理数据缓存、颜色数据缓存。根据第一步设置的数据确定;并设置数据格式,包括(float,float2,floa3)等;将数据数组加入到数据缓存中。
6)将数据缓存中的数据加入到数据流中。
7)将面的索引数组加入到图元对象的所有数据缓存中。

   var positionArray = [-0.5, -0.5, 0.5, // 顶点0    
                        0.5, -0.5, 0.5, // 顶点1   
               -0.5, 0.5, 0.5, // 顶点2    
               0.5, 0.5, 0.5, // 顶点3   
               -0.5, 0.5, -0.5, // 顶点4    
                 0.5, 0.5, -0.5, // 顶点5   
                 -0.5, -0.5, -0.5, // 顶点6    
               0.5, -0.5, -0.5   // 顶点7
               ];

    var indicesArray = [

                0, 1, 2, // 面1       每个面包含两个三角面
                 2, 1, 3,     
                 2, 3, 4, // 面2     
                 4, 3, 5,     
                 4, 5, 6, // 面3     
                 6, 5, 7,     
                 6, 7, 0, // 面4     
               0, 7, 1,     
               1, 7, 3, // 面5     
               3, 7, 5,     
               6, 0, 4, // 面6     
               4, 0, 2 ];

   var cubeShape = g_pack.createObject('Shape');   //创建几何形状对象
   var cubePrimitive = g_pack.createObject('Primitive');//创建图元对象
   var streamBank = g_pack.createObject('StreamBank');//创建流数据对象

   cubePrimitive.material = material;//关联材质对象
   cubePrimitive.owner = cubeShape;//关联形状对象
   cubePrimitive.streamBank = streamBank;//关联流数据对象

   cubePrimitive.primitiveType = g_o3d.Primitive.TRIANGLELIST;//几何形体的类型是离散三角型
   cubePrimitive.numberPrimitives = 12;//12个三角面
   cubePrimitive.numberVertices = 8; //8个顶点


    var positionsBuffer = g_pack.createObject('VertexBuffer');   //创建顶点缓存对象
    var positionsField = positionsBuffer.createField('FloatField', 3); //设置顶点缓存数据格式
    positionsBuffer.set(positionArray); //将顶点数据加入到顶点缓存中
    var indexBuffer = g_pack.createObject('IndexBuffer'); //创建索引缓存
    indexBuffer.set(indicesArray);//将索引数据加入到索引缓存中

    streamBank.setVertexStream(g_o3d.Stream.POSITION,0,positionsField,0);//设置数据流
    cubePrimitive.indexBuffer = indexBuffer; //关联索引缓存对象

你可能感兴趣的:(创建)