o3d 创建一个平面


var vertexInfo = o3djs.primitives.createVertexInfo(); //创建顶点对象

//设置面的宽和Z轴深度,此平面垂直Y轴平行XOZ坐标
var width;
var depth;
//创建面分成subdivisionsDepth*subdivisionsWidth个正方形
var subdivisionsDepth;
var subdivisionsWidth;


//创建顶点位置数据流对象
var positionStream = vertexInfo.addStream(3,o3djs.base.o3d.Stream.POSITION);
//创建顶点法线数据流对象
varnormalStream=vertexInfo.addStream(3,o3djs.base.o3d.Stream.NORMAL);
//创建顶点纹理数据流对象
vartexCoordStream=vertexInfo.addStream(2,o3djs.base.o3d.Stream.TEXCOORD,0);
//设置顶点的位置坐标、法线、纹理数据加入到数据流对象
for (var z = 0; z <= subdivisionsDepth; z++) {
for (var x = 0; x <= subdivisionsWidth; x++) {
var u = x / subdivisionsWidth;
var v = z / subdivisionsDepth;
positionStream.addElement(width * u - width * 0.5,0,depth*v-depth*0.5);
      normalStream.addElement(0, 1, 0);
      texCoordStream.addElement(u, 1 - v);
}
}                   

var numVertsAcross = subdivisionsWidth + 1;
for (var z = 0; z < subdivisionsDepth; z++) {
for (var x = 0; x < subdivisionsWidth; x++) {
// 四边形的第一个三角面
vertexInfo.addTriangle(
(z + 0) * numVertsAcross + x,
(z + 1) * numVertsAcross + x,
(z + 0) * numVertsAcross + x + 1);
// 四边形的第二个三角面
vertexInfo.addTriangle(
(z + 1) * numVertsAcross + x,
(z + 1) * numVertsAcross + x + 1,
(z + 0) * numVertsAcross + x + 1);
}
}

// 使用顶点数据对象创建几何形状
vertexInfo.createShape(pack, material);

                           
     
   //----------------------------------------------------------------   
此处创建的平面没有颜色信息如果没有纹理,将无法看到

如果要给平面着色。需要创建颜色数据流对象,并赋值

var colorStream = vertexInfo.addStream(4, o3djs.base.o3d.Stream.COLOR);
for (var z = 0; z <= subdivisionsDepth; z++) {
var alpha = z / subdivisionsDepth;
for (var x = 0; x <= subdivisionsWidth; x++) {
colorStream.addElement(1, 0, 0, alpha); //每个顶点颜色为红色
}
}

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