Three.js: Putar kubus di sekitar tepinya.

Dibuat pada 5 Feb 2012  ·  5Komentar  ·  Sumber: mrdoob/three.js

Hai semuanya!

Saya sudah bertanya tentang rotasi di sekitar sumbu sewenang-wenang dan mendapat jawaban yang jelas diposting di # 1219 dan # 1220.

Tetapi masih belum jelas bagaimana memutar kubus di sekitar salah satu tepinya (adakah yang bisa membagikan kode seperti itu jika ada).

Ada dua fungsi yang diposting di # 1219:

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

dan

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

Mereka memungkinkan saya untuk memutar kubus tentang sumbu arbitrer yang melewati pusat kotak pembatasnya.

Yang saya butuhkan adalah memutar objek di sekitar sumbu arbitrer yang tidak harus melewati pusat objek.

Bagaimana melakukannya dengan benar?

Maaf, jika saya agak mengganggu tentang itu tetapi saya ingin menerapkan fungsi seperti itu.

Terima kasih.

PS Sepertinya saya membutuhkan fungsi yang terlihat seperti:

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

oleh axisBasePoint Maksud saya titik yang dilalui sumbu yang ditentukan.

Saya membaca di Internet bahwa rotasi seperti itu harus dilakukan dalam beberapa langkah:

  1. menerjemahkan ruang sehingga sumbu rotasi melewati titik asal.
  2. memutar ruang di sekitar sumbu Z sehingga sumbu rotasi terletak pada bidang XZ.
  3. memutar ruang di sekitar sumbu Y sehingga sumbu rotasi terletak di sepanjang sumbu Z.
  4. melakukan rotasi yang diinginkan oleh Theta tentang sumbu z.
  5. terapkan kebalikan dari langkah (3).
  6. terapkan kebalikan dari langkah (2).
  7. terapkan kebalikan dari langkah (1).

Apakah saya memahaminya dengan benar?

Bagaimana cara melakukan operasi seperti itu dengan three.js?

Saya mencoba mengalikan matriks (terjemahan / rotasi) yang berbeda satu sama lain di three.js tetapi tidak mendapatkan hasil yang diinginkan :-(

Terimakasih banyak.

Question

Komentar yang paling membantu

Bagaimana dengan sesuatu yang seperti ini?

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 );

Semua 5 komentar

Bagaimana dengan sesuatu yang seperti ini?

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 );

Terima kasih balasannya.

Sayangnya, kubus dalam contoh Anda masih berputar di sekitar sumbu lokalnya yang melewati pusatnya apa pun yang saya sebut:

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

atau

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

Yang benar-benar ingin saya ketahui adalah bagaimana menggeser sumbu rotasi objek tertentu.

Terimakasih banyak.

Apakah Anda mencoba memutar boneka / wadah alih-alih kubus?

Poin yang bagus. Ini bekerja seperti ini.

Tapi kenapa tidak begitu tegas :-)?

Saya pikir itu harus menjadi beberapa matriks aritmatika menggunakan fungsi yang saya sarankan di posting awal saya atau sesuatu yang lebih nyaman.

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

oleh axisBasePoint Maksud saya titik yang dilalui sumbu yang ditentukan.

Salam hormat.

@ooooooooooooooooooooooooo Ya, lupakan itu di cuplikan saya.

@Landlord Nah, itu mudah bagi saya. Itu bahkan tidak membutuhkan pengetahuan matriks;) Saya kira ini hanya masalah berpikir secara berbeda ... Bagaimanapun, secara internal, perhitungan matriks yang sama sedang terjadi.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat