123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- THREE.WebGLRenderer.RibbonRenderer = function ( lowlevelrenderer, info ) {
- THREE.WebGLRenderer.Object3DRenderer.call( this, lowlevelrenderer, info );
- };
- THREE.WebGLRenderer.RibbonRenderer.prototype = Object.create( THREE.WebGLRenderer.Object3DRenderer.prototype );
- THREE.extend( THREE.WebGLRenderer.RibbonRenderer.prototype, {
- createBuffers: function ( geometry ) {
- var renderer = this.renderer;
- geometry.__webglVertexBuffer = renderer.createBuffer();
- geometry.__webglColorBuffer = renderer.createBuffer();
- geometry.__webglNormalBuffer = renderer.createBuffer();
- this.info.memory.geometries ++;
- },
- initBuffers: function ( geometry, object ) {
- var nvertices = geometry.vertices.length;
- geometry.__vertexArray = new Float32Array( nvertices * 3 );
- geometry.__colorArray = new Float32Array( nvertices * 3 );
- geometry.__normalArray = new Float32Array( nvertices * 3 );
- geometry.__webglVertexCount = nvertices;
- this.initCustomAttributes ( geometry, object );
- },
- setBuffers: function ( geometry, object , projectionScreenMatrix ) {
- var renderer = this.renderer;
- var v, c, n, vertex, offset, color, normal,
- i, il, ca, cal, customAttribute, value,
- vertices = geometry.vertices,
- colors = geometry.colors,
- normals = geometry.normals,
- vl = vertices.length,
- cl = colors.length,
- nl = normals.length,
- vertexArray = geometry.__vertexArray,
- colorArray = geometry.__colorArray,
- normalArray = geometry.__normalArray,
- dirtyVertices = geometry.verticesNeedUpdate,
- dirtyColors = geometry.colorsNeedUpdate,
- dirtyNormals = geometry.normalsNeedUpdate,
- customAttributes = geometry.__webglCustomAttributesList;
- if ( dirtyVertices ) {
- for ( v = 0; v < vl; v ++ ) {
- vertex = vertices[ v ];
- offset = v * 3;
- vertexArray[ offset ] = vertex.x;
- vertexArray[ offset + 1 ] = vertex.y;
- vertexArray[ offset + 2 ] = vertex.z;
- }
- renderer.setDynamicArrayBuffer( geometry.__webglVertexBuffer,vertexArray);
- }
- if ( dirtyColors ) {
- for ( c = 0; c < cl; c ++ ) {
- color = colors[ c ];
- offset = c * 3;
- colorArray[ offset ] = color.r;
- colorArray[ offset + 1 ] = color.g;
- colorArray[ offset + 2 ] = color.b;
- }
- renderer.setDynamicArrayBuffer( geometry.__webglColorBuffer, colorArray);
- }
- if ( dirtyNormals ) {
- for ( n = 0; n < nl; n ++ ) {
- normal = normals[ n ];
- offset = n * 3;
- normalArray[ offset ] = normal.x;
- normalArray[ offset + 1 ] = normal.y;
- normalArray[ offset + 2 ] = normal.z;
- }
- renderer.setDynamicArrayBuffer( geometry.__webglNormalBuffer, normalArray);
- }
- if ( customAttributes ) {
- for ( i = 0, il = customAttributes.length; i < il; i ++ ) {
- customAttribute = customAttributes[ i ];
- if ( customAttribute.needsUpdate &&
- ( customAttribute.boundTo === undefined ||
- customAttribute.boundTo === "vertices" ) ) {
- offset = 0;
- cal = customAttribute.value.length;
- if ( customAttribute.size === 1 ) {
- for ( ca = 0; ca < cal; ca ++ ) {
- customAttribute.array[ ca ] = customAttribute.value[ ca ];
- }
- } else if ( customAttribute.size === 2 ) {
- for ( ca = 0; ca < cal; ca ++ ) {
- value = customAttribute.value[ ca ];
- customAttribute.array[ offset ] = value.x;
- customAttribute.array[ offset + 1 ] = value.y;
- offset += 2;
- }
- } else if ( customAttribute.size === 3 ) {
- if ( customAttribute.type === "c" ) {
- for ( ca = 0; ca < cal; ca ++ ) {
- value = customAttribute.value[ ca ];
- customAttribute.array[ offset ] = value.r;
- customAttribute.array[ offset + 1 ] = value.g;
- customAttribute.array[ offset + 2 ] = value.b;
- offset += 3;
- }
- } else {
- for ( ca = 0; ca < cal; ca ++ ) {
- value = customAttribute.value[ ca ];
- customAttribute.array[ offset ] = value.x;
- customAttribute.array[ offset + 1 ] = value.y;
- customAttribute.array[ offset + 2 ] = value.z;
- offset += 3;
- }
- }
- } else if ( customAttribute.size === 4 ) {
- for ( ca = 0; ca < cal; ca ++ ) {
- value = customAttribute.value[ ca ];
- customAttribute.array[ offset ] = value.x;
- customAttribute.array[ offset + 1 ] = value.y;
- customAttribute.array[ offset + 2 ] = value.z;
- customAttribute.array[ offset + 3 ] = value.w;
- offset += 4;
- }
- }
- renderer.setDynamicArrayBuffer( customAttribute.buffer, customAttribute.array);
- }
- }
- }
- }
- } );
|