λ¬Έμ κ° λ°μνμ΅λλ€.-μ₯λ©΄μμ μΌλΆ κ°μ²΄λ₯Ό ν΄λ¦ ν λ μΉ΄λ©λΌκ°μ΄ κ°μ²΄λ₯Ό μ€μ¬μΌλ‘ν΄μΌν©λλ€. μ΄λ₯Ό μν΄ λ¬Όμ²΄μ μ€μ¬ μ’ν (y μΆ)κ° νμν©λλ€. μ΄κ²μ μ΄λ»κ² κ³μ°ν μ μμ΅λκΉ? μ΄ μ€λΈμ νΈμ λͺ¨λ μ μ μ ν©νκ³ μ μ μΌλ‘ λλλ €κ³ νμ§λ§ λ¬Όλ‘ μλͺ»λ κ²°μ μ λλ€.
object.position.y
?
μ°λ¦¬ λͺ¨λΈμμλ νμ 0μ΄κ³ λͺ¨λΈμ μ λμ μΌλ‘ μμΉν©λλ€.
μ λ μμΉ λ 무μμ μλ―Έν©λκΉ? λͺ¨λ μ€λΈμ νΈκ° 0,0,0μ μμ§λ§ μ μ ν΄λ¬μ€ν°κ° μ€μ¬ μ£Όμμ μμ§ μμ΅λκΉ?
νμ κ²½κ³ μμμ μ€μ¬μ μ»μ μ μμ΅λλ€.
geometry.computeBoundingBox();
var centerX = 0.5 * ( geometry.boundingBox.x[ 1 ] - geometry.boundingBox.x[ 0 ] );
var centerY = 0.5 * ( geometry.boundingBox.y[ 1 ] - geometry.boundingBox.y[ 0 ] );
var centerZ = 0.5 * ( geometry.boundingBox.z[ 1 ] - geometry.boundingBox.z[ 0 ] );
κ·Έλ° λ€μ μΉ΄λ©λΌμ λμμ κ°μ²΄ μμΉμ μ€μ¬μΌλ‘ μ€μ ν μ μμ΅λλ€.
camera.target.position.copy( object.position );
camera.target.position.addSelf( new THREE.Vector3( centerX, centerY, centerZ ) );
μ΄κ²μ λ΄κ° μ€λμ μ μ΄ μμ κΈ°λ₯μ λλ€. μλ§λ κ·Έκ²μ λΉμ μ μ‘°κΈ λμΈ κ²μ λλ€.
getCentroid: function ( mesh ) {
mesh.geometry.computeBoundingBox();
boundingBox = mesh.geometry.boundingBox;
var x0 = boundingBox.x[ 0 ];
var x1 = boundingBox.x[ 1 ];
var y0 = boundingBox.y[ 0 ];
var y1 = boundingBox.y[ 1 ];
var z0 = boundingBox.z[ 0 ];
var z1 = boundingBox.z[ 1 ];
var bWidth = ( x0 > x1 ) ? x0 - x1 : x1 - x0;
var bHeight = ( y0 > y1 ) ? y0 - y1 : y1 - y0;
var bDepth = ( z0 > z1 ) ? z0 - z1 : z1 - z0;
var centroidX = x0 + ( bWidth / 2 ) + mesh.position.x;
var centroidY = y0 + ( bHeight / 2 )+ mesh.position.y;
var centroidZ = z0 + ( bDepth / 2 ) + mesh.position.z;
return mesh.geometry.centroid = { x : centroidX, y : centroidY, z : centroidZ };
}
λΉμ μ alteredqμ μνμ ν΅ν© ν μμμ κ²μ λλ€.
κΆκΈ ν΄μ ...μ΄κ² λ κ°λ¨νμ§ μμκΉμ?
geometry.centroid = new THREE.Vector3();
for ( var i = 0, l = geometry.vertices.length; i < l; i ++ ) {
geometry.centroid.addSelf( geometry.vertices[ i ].position );
}
geometry.centroid.divideScalar( geometry.vertices.length );
μ, μΌν° λ§ νμνλ©΄ λ κ°λ¨ν©λλ€. μ΄λ―Έ κ²½κ³ μμκ° μκ±°λ λ€λ₯Έ κ²μ λν κ²½κ³ μμκ° νμν κ²½μ° μ€μ¬μ κ³μ°νλ κ²μ΄ λ κ°λ¨ν©λλ€.
μ, μ΄μ μ΄ λ κ°μ§ λ°©λ²μ΄ λμΌν κ²°κ³Όλ₯Ό μ»μ μ μλμ§ κΆκΈν©λλ€. νμͺ½μ λ§μ μ μ΄ μκ³ λ€λ₯Έμͺ½μ μ μ μμ μ μ΄μλ κ²½μ° κ²½κ³ μμμ μ€μ¬μ νμμ μ€μ¬μ΄λκ³ μ€μ¬μ "μ€λ ₯ μ€μ¬"μ μμΌλ©° λ°λκ° λμ μ ν΄λ¬μ€ν°μ λ κ°κΉμ΅λλ€.
>>> points = [ 0, 10, 11, 12 ]
>>> sum(points)/float(len(points)) # centroid
8.25
>>> 0.5 * (min(points) + max(points)) # center of bounding box
6.0
λ κ°μ§ λ°©λ²μ΄ μλ‘ λ€λ₯Έ μ¬μ© μ¬λ‘μ μ μ©νλ€κ³ μκ°ν©λλ€.
μ¬μ€μ λλ€. κ²½κ³ μμμ μ€μ¬μ λλΆλΆμ μ¬λλ€μ΄ νμλ‘νλ κ²μ λλ€.
κ·Έλ, λ΄ μκ° μ μ λ§ μ€μ¬ ν¨μκ° μλμΌ.
var x0 = boundingBox.x[ 0 ];
var x1 = boundingBox.x[ 1 ];
var y0 = boundingBox.y[ 0 ];
var y1 = boundingBox.y[ 1 ];
var z0 = boundingBox.z[ 0 ];
var z1 = boundingBox.z[ 1 ];
νμ¬ :
var x0 = boundingBox.min.x;
var x1 = boundingBox.max.x;
var y0 = boundingBox.min.y;
var y1 = boundingBox.max.y;
var z0 = boundingBox.min.z;
var z1 = boundingBox.max.z;
(r47 κΈ°μ€)
κ°λ μ μΌλ‘ λ κ°μ 벑ν°λ₯Ό μΆκ°νκ³ κ²°κ³Όμ μ λ°μ μ·¨ν©λλ€. λ λΉ λ₯Έμ§ νμ€νμ§ μμ§λ§ λ ... λͺ νν©λλ€.
c.addVectors(
object.children[0].geometry.boundingBox.min,
object.children[0].geometry.boundingBox.max
);
c.divideScalar(2);
κ°μ₯ μ μ©ν λκΈ
νμ κ²½κ³ μμμ μ€μ¬μ μ»μ μ μμ΅λλ€.
κ·Έλ° λ€μ μΉ΄λ©λΌμ λμμ κ°μ²΄ μμΉμ μ€μ¬μΌλ‘ μ€μ ν μ μμ΅λλ€.