简述BufferGeometry

作者:桑榆
QQ:934440653
有问题,评论留言,或qq联系

还未完成,待续…

1、BufferGeometry与Geometry的区别

BufferGeometry和Geometry可以实现同样的功能,在功能上并没有很大的区别;主要的区别在对象的数据结构不同。
BufferGeometry高效的秘诀:奖数据放在一个连续的内存空间中,和geometry一样,它存储了顶点,面索引,法线,颜色,纹理座标和自定义的一些数据。连续的存储空间能够节省传递数据到CPU的时间。

通过以下代码进行比较:

var geometry = new THREE.BoxGeometry(10, 8, 9);
console.log('几何体数据结构',geometry);
console.log('顶点位置数据',geometry.vertices);
console.log('顶点纹理座标',geometry.faceVertexUvs);
console.log('几何体三角形信息',geometry.faces);
var geometry = new THREE.BoxBufferGeometry(7, 6, 8);
console.log('几何体数据结构',geometry);
console.log('顶点位置、法向量、UV、颜色顶点等数据集合',geometry.attributes);
console.log('顶点位置数据',geometry.attributes.position);
console.log('顶点索引数据',geometry.index);

创建一个BufferGeometry对象

在vertices 这个数组中有18条数据,每3个为一组数据(即一个顶点),共计6组顶点数据。
:在threejs中不论是二维数组,或者一维数组,最终都会转化为一个数组。

var geometry = new THREE.BufferGeometry();
var vertices = new Float32Array( [
	-1.0, -1.0,  1.0,
	 1.0, -1.0,  1.0,
	 1.0,  1.0,  1.0,

	 1.0,  1.0,  1.0,
	-1.0,  1.0,  1.0,
	-1.0, -1.0,  1.0
] );
geometry.addAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) ); //查看下方,方法文档
var material = new THREE.MeshBasicMaterial( { color: 0xff0000 } );
var mesh = new THREE.Mesh( geometry, material );

方法

1、addAttribute ( name : String, attribute : BufferAttribute ) 给Geometry添加属性

name :给Geometry添加的属性名;attribute:该属性的参数
BufferAttribute与BufferGeometry联合使用BufferAttribute(array,itemSize)。array数组,itemSize表示数组中的几个数为一组(顶点或其它)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章