Three.js: κ°€μž₯자리λ₯Ό μ€‘μ‹¬μœΌλ‘œ 큐브λ₯Ό νšŒμ „ν•©λ‹ˆλ‹€.

에 λ§Œλ“  2012λ…„ 02μ›” 05일  Β·  5μ½”λ©˜νŠΈ  Β·  좜처: mrdoob/three.js

μ•ˆλ…•ν•˜μ„Έμš”, μ—¬λŸ¬λΆ„!

λ‚˜λŠ” 이미 μž„μ˜μ˜ 좕을 μ€‘μ‹¬μœΌλ‘œ ν•œ νšŒμ „μ— λŒ€ν•΄ 묻고 μžˆμ—ˆκ³  # 1219 및 # 1220에 λͺ…ν™•ν•œ 닡변을 κ²Œμ‹œν–ˆμŠ΅λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ κ°€μž₯자리 쀑 ν•˜λ‚˜λ₯Ό μ€‘μ‹¬μœΌλ‘œ 큐브λ₯Ό νšŒμ „ν•˜λŠ” 방법은 아직 λͺ…ν™•ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ (μ‘΄μž¬ν•˜λŠ” 경우 λˆ„κ΅¬λ‚˜ μ΄λŸ¬ν•œ μ½”λ“œλ₯Ό 곡유 ν•  수 있음).

# 1219μ—λŠ” 두 가지 κΈ°λŠ₯이 κ²Œμ‹œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

function rotateAroundObjectAxis( object, axis, radians ) { .. }

κ³Ό

function rotateAroundWorldAxis( object, axis, radians ) { .. }

경계 μƒμžμ˜ 쀑심을 ν†΅κ³Όν•˜λŠ” μž„μ˜μ˜ 좕을 μ€‘μ‹¬μœΌλ‘œ 큐브λ₯Ό νšŒμ „ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ‚΄κ°€ ν•„μš”ν•œ 것은 객체의 쀑심을 ν†΅κ³Όν•˜μ§€ μ•Šμ•„λ„λ˜λŠ” μž„μ˜μ˜ 좕을 μ€‘μ‹¬μœΌλ‘œ 객체λ₯Ό νšŒμ „ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

μ˜¬λ°”λ₯΄κ²Œ μˆ˜ν–‰ν•˜λŠ” 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?

μ£„μ†‘ν•©λ‹ˆλ‹€. 쑰금 μ§œμ¦λ‚˜μ§€λ§Œ κ·ΈλŸ¬ν•œ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

감사.

μΆ”μ‹  : λ‹€μŒκ³Ό 같은 κΈ°λŠ₯이 ν•„μš”ν•œ 것 κ°™μŠ΅λ‹ˆλ‹€.

function rotateAroundArbitraryAxis (object, axisDirection, axisBasePoint, radians) {..}

axisBasePointλŠ” μ§€μ •λœ 좕이 ν†΅κ³Όν•˜λŠ” 지점을 μ˜λ―Έν•©λ‹ˆλ‹€.

λ‚˜λŠ” μΈν„°λ„·μ—μ„œ κ·ΈλŸ¬ν•œ μˆœν™˜μ΄ μ—¬λŸ¬ λ‹¨κ³„λ‘œ μ΄λ£¨μ–΄μ Έμ•Όν•œλ‹€κ³  μ½μ—ˆμŠ΅λ‹ˆλ‹€.

  1. νšŒμ „ 좕이 원점을 ν†΅κ³Όν•˜λ„λ‘ 곡간을 λ³€ν™˜ν•©λ‹ˆλ‹€.
  2. Z 좕을 μ€‘μ‹¬μœΌλ‘œ 곡간을 νšŒμ „ν•˜μ—¬ νšŒμ „ 좕이 XZ 평면에 놓 μ΄λ„λ‘ν•©λ‹ˆλ‹€.
  3. Y 좕을 μ€‘μ‹¬μœΌλ‘œ 곡간을 νšŒμ „ν•˜μ—¬ νšŒμ „μΆ•μ΄ Z 좕을 따라 놓 μ΄λ„λ‘ν•©λ‹ˆλ‹€.
  4. Z 좕을 μ€‘μ‹¬μœΌλ‘œ Theta둜 μ›ν•˜λŠ” νšŒμ „μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.
  5. 단계 (3)의 역을 μ μš©ν•˜μ‹­μ‹œμ˜€.
  6. 단계 (2)의 역을 μ μš©ν•©λ‹ˆλ‹€.
  7. 단계 (1)의 역을 μ μš©ν•©λ‹ˆλ‹€.

λ‚˜λŠ” 그것을 μ •ν™•ν•˜κ²Œ μ΄ν•΄ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?

three.js둜 μ΄λŸ¬ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?

three.jsμ—μ„œ μ„œλ‘œ λ‹€λ₯Έ (λ²ˆμ—­ / νšŒμ „) 행렬을 κ³±ν•˜λ €κ³  μ‹œλ„ν–ˆμ§€λ§Œ μ›ν•˜λŠ” κ²°κ³Όλ₯Ό 얻지 λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.

κ°μ‚¬ν•©λ‹ˆλ‹€.

Question

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

이런 건 μ–΄λ•Œ?

var dummy = new THREE.Object3D();
dummy.position.x = 50;
dummy.position.z = 50;
scene.add( dummy );

var cube = new THREE.Mesh( new THREE.CubeGeometry( 100, 100, 100 ), new THREE.MeshBasicMaterial() );
cube.position.x = - 50;
cube.position.z = - 50;
dummy.add( cube );

λͺ¨λ“  5 λŒ“κΈ€

이런 건 μ–΄λ•Œ?

var dummy = new THREE.Object3D();
dummy.position.x = 50;
dummy.position.z = 50;
scene.add( dummy );

var cube = new THREE.Mesh( new THREE.CubeGeometry( 100, 100, 100 ), new THREE.MeshBasicMaterial() );
cube.position.x = - 50;
cube.position.z = - 50;
dummy.add( cube );

λ‹΅μž₯을 보내 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

λΆˆν–‰νžˆλ„ 예제의 νλΈŒλŠ” λ‚΄κ°€ λΆ€λ₯΄λŠ” 것과 상관없이 쀑심을 ν†΅κ³Όν•˜λŠ” 둜컬 좕을 μ€‘μ‹¬μœΌλ‘œ μ—¬μ „νžˆ νšŒμ „ν•©λ‹ˆλ‹€.

function rotateAroundObjectAxis( object, axis, radians ) { .. }

λ˜λŠ”

function rotateAroundWorldAxis( object, axis, radians ) { .. }

μ œκ°€ μ •λ§λ‘œ μ•Œκ³  싢은 것은 νŠΉμ • 물체의 νšŒμ „μΆ•μ„ μ΄λ™ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.

κ°μ‚¬ν•©λ‹ˆλ‹€.

큐브 λŒ€μ‹  더미 / μ»¨ν…Œμ΄λ„ˆλ₯Ό νšŒμ „ ν•΄ λ³΄μ…¨μŠ΅λ‹ˆκΉŒ?

쒋은 지적. 이런 μ‹μœΌλ‘œ μž‘λ™ν•©λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ μ™œ κ·Έλ ‡κ²Œ κ°„λ‹¨ν•˜μ§€ μ•Šμ€κ°€ :-)?

λ‚˜λŠ” λ‚΄κ°€ 초기 ν¬μŠ€νŠΈμ—μ„œ μ œμ•ˆν•œ κΈ°λŠ₯μ΄λ‚˜ 더 νŽΈλ¦¬ν•œ 것을 μ‚¬μš©ν•˜μ—¬ λͺ‡ 가지 ν–‰λ ¬ μ‚°μˆ μ΄μ–΄μ•Όν•©λ‹ˆλ‹€.

function rotateAroundArbitraryAxis( object, axisDirection, axisBasePoint, radians ) { .. }

axisBasePointλŠ” μ§€μ •λœ 좕이 ν†΅κ³Όν•˜λŠ” 지점을 μ˜λ―Έν•©λ‹ˆλ‹€.

κ°μ‚¬ν•©λ‹ˆλ‹€.

@oosmoxiecode μ•— ! 그래, λ‚΄ 슀 λ‹ˆνŽ«μ—μ„œ μžŠμ–΄ 버렸어.

@Landlord κΈ€μŽ„, 그것은 λ‚˜μ—κ²Œ κ°„λ‹¨ν•©λ‹ˆλ‹€. 그것은 심지어 ν–‰λ ¬ 지식을 ν•„μš”λ‘œν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€;) λ‚˜λŠ” 단지 λ‹€λ₯΄κ²Œ μƒκ°ν•˜λŠ” 문제라고 μƒκ°ν•©λ‹ˆλ‹€. μ–΄λŠ μͺ½μ΄λ“ , λ‚΄λΆ€μ μœΌλ‘œ λ™μΌν•œ ν–‰λ ¬ 계산이 μΌμ–΄λ‚˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰