o3d 常见几何图形创造
发布时间:2011-06-27 20:23:20 文章来源:www.iduyao.cn 采编人员:星星草
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; //关联索引缓存对象
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
关于opengl源码的问题
gluPickMatrix函数的实现在哪?我在glut源码中找了半天没有找到
------解决方案--------------------
这是...
-
关于傅立叶变换的数字水印嵌入算法的问题
需求:
首先对图像和水印图像进行傅里叶变换;
讲数字水印嵌入到图像中;
逆变换显示潜入水印...
-
Matlab和OpenCV的处理速度问题
大家好!我正准备用Windows下的OPENCV实现MSR算法来处理图像,目前已经有在Matlab下面的处理的程序,但...
-
问一个Ghostscript的问题!
我用Ghostscript API将eps转换成pdf,在其他的环境下都能很好的执行。但是在windows server 2008上却不行...
-
求教D3D9.DLL为什么没有被游戏进程加载?
我本来想wrap一下D3D9.DLL给一个3D游戏搞点破坏,但用IcdSword监视一下游戏使用模块,发现连D...
-
请教几个DirectX的问题
1:切线贴图就是法线贴图的意思么?
如果不是,那两者有什么区别?
2:The NPatch mode segments 是什么意思?
原文:
...
-
用OpenCV作的一个车牌识别程序
新手用OpenCV作的一个车牌识别程序,目前只能处理黄底黑字
的车牌图像,供大家交流学习之用。如果感...
-
求助:用matlab实现图像的dct变换
如题
用matlab实现图像的dct变换
不要用自带的dct2函数
多谢了
------解决方案----------------...
-
建了一个群,OCR字符识别技术,欢迎大家加入!
欢迎大家讨论各种字符的识别技术,从图像的预处理到最后分类识别的过程都可以讨论。
qq...
-
Matlab下怎么才能把封闭曲线作为边界判断区域内外
大家好!我对一幅图进行边缘分割,得到了边缘(是一条曲线),下一步想要用得到的边缘曲...