未验证 提交 4d875bbd 编写于 作者: M Mr.doob 提交者: GitHub

Merge pull request #18783 from Mugen87/dev39

Geometry: Make .fromBufferGeometry() more generic.
......@@ -179,6 +179,14 @@ var color = new THREE.Color( 1, 0, 0 );
Sets this color's components based on an array formatted like [ [page:Float r], [page:Float g], [page:Float b] ].
</p>
<h3>[method:this fromBufferAttribute]( [param:BufferAttribute attribute], [param:Integer index] )</h3>
<p>
[page:BufferAttribute attribute] - the source attribute.<br />
[page:Integer index] - index in the attribute.<br /><br />
Sets this color's components from the [page:BufferAttribute attribute].
</p>
<h3>[method:Integer getHex]()</h3>
<p>Returns the hexadecimal value of this color.</p>
......
......@@ -177,6 +177,14 @@
从格式为[ [page:Float r], [page:Float g], [page:Float b] ]的数组数据中来创建Color对象。
</p>
<h3>[method:this fromBufferAttribute]( [param:BufferAttribute attribute], [param:Integer index] )</h3>
<p>
[page:BufferAttribute attribute] - the source attribute.<br />
[page:Integer index] - index in the attribute.<br /><br />
Sets this color's components from the [page:BufferAttribute attribute].
</p>
<h3>[method:Integer getHex]()</h3>
<p>返回此颜色的十六进制值。</p>
......
......@@ -186,7 +186,7 @@ Geometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ),
const scope = this;
const indices = geometry.index !== null ? geometry.index.array : undefined;
const index = geometry.index !== null ? geometry.index : undefined;
const attributes = geometry.attributes;
if ( attributes.position === undefined ) {
......@@ -196,21 +196,21 @@ Geometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ),
}
const positions = attributes.position.array;
const normals = attributes.normal !== undefined ? attributes.normal.array : undefined;
const colors = attributes.color !== undefined ? attributes.color.array : undefined;
const uvs = attributes.uv !== undefined ? attributes.uv.array : undefined;
const uvs2 = attributes.uv2 !== undefined ? attributes.uv2.array : undefined;
const position = attributes.position;
const normal = attributes.normal;
const color = attributes.color;
const uv = attributes.uv;
const uv2 = attributes.uv2;
if ( uvs2 !== undefined ) this.faceVertexUvs[ 1 ] = [];
if ( uv2 !== undefined ) this.faceVertexUvs[ 1 ] = [];
for ( let i = 0; i < positions.length; i += 3 ) {
for ( let i = 0; i < position.count; i ++ ) {
scope.vertices.push( new Vector3().fromArray( positions, i ) );
scope.vertices.push( new Vector3().fromBufferAttribute( position, i ) );
if ( colors !== undefined ) {
if ( color !== undefined ) {
scope.colors.push( new Color().fromArray( colors, i ) );
scope.colors.push( new Color().fromBufferAttribute( color, i ) );
}
......@@ -218,37 +218,37 @@ Geometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ),
function addFace( a, b, c, materialIndex ) {
const vertexColors = ( colors === undefined ) ? [] : [
const vertexColors = ( color === undefined ) ? [] : [
scope.colors[ a ].clone(),
scope.colors[ b ].clone(),
scope.colors[ c ].clone() ];
const vertexNormals = ( normals === undefined ) ? [] : [
new Vector3().fromArray( normals, a * 3 ),
new Vector3().fromArray( normals, b * 3 ),
new Vector3().fromArray( normals, c * 3 )
const vertexNormals = ( normal === undefined ) ? [] : [
new Vector3().fromBufferAttribute( normal, a ),
new Vector3().fromBufferAttribute( normal, b ),
new Vector3().fromBufferAttribute( normal, c )
];
const face = new Face3( a, b, c, vertexNormals, vertexColors, materialIndex );
scope.faces.push( face );
if ( uvs !== undefined ) {
if ( uv !== undefined ) {
scope.faceVertexUvs[ 0 ].push( [
new Vector2().fromArray( uvs, a * 2 ),
new Vector2().fromArray( uvs, b * 2 ),
new Vector2().fromArray( uvs, c * 2 )
new Vector2().fromBufferAttribute( uv, a ),
new Vector2().fromBufferAttribute( uv, b ),
new Vector2().fromBufferAttribute( uv, c )
] );
}
if ( uvs2 !== undefined ) {
if ( uv2 !== undefined ) {
scope.faceVertexUvs[ 1 ].push( [
new Vector2().fromArray( uvs2, a * 2 ),
new Vector2().fromArray( uvs2, b * 2 ),
new Vector2().fromArray( uvs2, c * 2 )
new Vector2().fromBufferAttribute( uv2, a ),
new Vector2().fromBufferAttribute( uv2, b ),
new Vector2().fromBufferAttribute( uv2, c )
] );
}
......@@ -268,9 +268,9 @@ Geometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ),
for ( let j = start, jl = start + count; j < jl; j += 3 ) {
if ( indices !== undefined ) {
if ( index !== undefined ) {
addFace( indices[ j ], indices[ j + 1 ], indices[ j + 2 ], group.materialIndex );
addFace( index.getX( j ), index.getX( j + 1 ), index.getX( j + 2 ), group.materialIndex );
} else {
......@@ -284,17 +284,17 @@ Geometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ),
} else {
if ( indices !== undefined ) {
if ( index !== undefined ) {
for ( let i = 0; i < indices.length; i += 3 ) {
for ( let i = 0; i < index.count; i += 3 ) {
addFace( indices[ i ], indices[ i + 1 ], indices[ i + 2 ] );
addFace( index.getX( i ), index.getX( i + 1 ), index.getX( i + 2 ) );
}
} else {
for ( let i = 0; i < positions.length / 3; i += 3 ) {
for ( let i = 0; i < position.count; i += 3 ) {
addFace( i, i + 1, i + 2 );
......
import { BufferAttribute } from './../core/BufferAttribute';
/**
* @author Joe Pea / http://github.com/trusktr
*/
......@@ -188,6 +190,8 @@ export class Color {
*/
toArray( xyz: ArrayLike<number>, offset?: number ): ArrayLike<number>;
fromBufferAttribute( attribute: BufferAttribute, index: number ): this;
/**
* List of X11 color names.
*/
......
......@@ -580,6 +580,26 @@ Object.assign( Color.prototype, {
},
fromBufferAttribute: function ( attribute, index ) {
this.r = attribute.getX( index );
this.g = attribute.getY( index );
this.b = attribute.getZ( index );
if ( attribute.normalized === true ) {
// assuming Uint8Array
this.r /= 255;
this.g /= 255;
this.b /= 255;
}
return this;
},
toJSON: function () {
return this.getHex();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册