Repositori ini berisi program visualisasi quaternion yang ditulis dalam bahasa C++ menggunakan OpenGL sebagai salah satu tugas kualifikasi asisten lab Ilmu dan Rekayasa Komputasi.
Program ini merupakan aplikasi GUI desktop untuk memvisualisasikan rotasi quaternion terhadap suatu objek 3D dari file berekstensi .OBJ. Sayangnya baru di-testing di Ubuntu 22.04 LTS saja.
- Bahasa: C++17 (of course)
- Library eksternal: cuma SDL2, untuk mencetak dari ruang 3D ke kanvas 2D (layar)
(maaf sedikit copas dari makalah saya, nggak saya translate sendiri)
Kuaternion, biasanya dilambangkan sebagai
Sebuah kuaternion dapat diekspresikan dalam bentuk
di mana
Komponen imajiner juga saling berhubungan sebagai berikut:
Kita juga dapat memandang
Jika
Salah satu sifat utama kuaternion adalah norma, padanan berdimensi-4 dari panjang vektor berdimensi-3, yang merupakan bilangan real dan didefinisikan sebagai
Misalkan
Penjumlahan dan pengurangan dua kuaternion
Penjumlahan dan pengurangan kuaternion bersifat komutatif dan asosiatif.
Perkalian kuaternion didefinisikan sebagai
Hal ini dapat dipandang seperti mendistribusikan setiap komponen dari
Konjugat dari sebuah kuaternion
Salah satu hasil menarik dari ini adalah
Hasil tersebut dapat digunakan untuk menurunkan rumus invers perkalian dari sebuah kuaternion tak nol,
Karena
Kuaternion dengan norma
di mana
Dengan cara serupa,
Menggunakan bentuk ini, kita dapat merotasikan sembarang vektor
Misalkan
Kita dapat mengekspresikan vektor
Vektor hasil rotasi
Kuaternion banyak digunakan untuk grafika komputer dan game 3-dimensi, robotika, serta masih banyak lagi. Hal paling bermanfaat dari kuaternion adalah rotasinya. Rotasi Euler bisa mengalami gimbal lock (ketika dua sumbu rotasi berimpitan), sementara kuaternion tidak.
-
Pastikan sudah menginstall compiler C++ yang mendukung C++17 atau lebih baru.
-
Pastikan sudah menginstall CMake, bisa diunduh dari sini. Aplikasi ini sudah diuji dengan CMake versi 4.1.0-rc2.
-
Pastikan sudah menginstall SDL2 dan SDL2_ttf. Aplikasi ini sudah diuji dengan SDL2 versi 2.0.20.
-
Untuk pengguna Windows (ribet njirrrr mending instal WSL):
- Unduh SDL2 dari sini dan SDL2_ttf dari sini.
- Buat folder di lokasi yang mudah diakses, misalnya
C:\Libs\SDL2. - Ekstrak isi dari kedua file
.tar.gzyang diunduh ke dalam folderC:\Libs\SDL2. Pastikan file.dll,.lib, dan.hdari kedua pustaka berada di subfolder yang sesuai (bin,lib,include) di dalamC:\Libs\SDL2. - Sebelum menjalankan
cmake .., atur variabel lingkunganSDL2_DIRkeC:\Libs\SDL2atau tambahkan baris berikut di awalCMakeLists.txt:set(SDL2_DIR "C:/Libs/SDL2" CACHE PATH "Path to SDL2 installation")
- Setelah itu, pastikan untuk menambahkan
C:\Libs\SDL2\binke dalam PATH agar program dapat menemukan file.dllsaat dijalankan.
-
Untuk pengguna Linux (Ubuntu/Debian): Install melalui package manager:
sudo apt-get install libsdl2-dev libsdl2-ttf-dev
-
Untuk pengguna macOS: Install melalui Homebrew:
brew install sdl2 sdl2_ttf
-
- Taruh model OBJ yang mau diuji di folder
models. - Buka terminal atau command prompt.
- Arahkan ke direktori repositori ini.
- Buat direktori build dan masuk ke dalamnya:
mkdir build cd build - Jalankan perintah CMake untuk mengkonfigurasi proyek:
cmake ..
- Setelah konfigurasi selesai, kompilasi proyek dengan perintah:
cmake --build . - Jalankan:
./quaternion_visualizer
- E. Lengyel, Mathematics for 3D Game Programming and Computer Graphics, 3rd ed. Boston, MA, USA: Cengage Learning, 2011, pp. 317-329. ISBN: 978-1-4354-5886-4.
- R. Goldman, “Understanding quaternions,” Graphical Models, vol. 73, no. 2. Elsevier BV, pp. 21–49, Mar. 2011. doi:10.1016/j.gmod.2010.10.004.
- https://www.youtube.com/watch?v=ih20l3pJoeU&ab_channel=javidx9
Hanya reminder untuk diri sendiri. :D
- Nama file pake PascalCase (pengecualian buat main.cpp):
namaFile.cpp,namaFile.hpp. - Nama kelas pake PascalCase:
NamaKelas. - Nama metode kelas pake camelCase:
namaMetode(). - Nama fungsi global pake snake_case:
nama_fungsi(). - Nama atribut kelas pake _camelCase:
_namaAtribut. - Nama variabel lokal dan parameter fungsi pake camelCase:
namaVariabel. - Nama konstanta pake UPPER_SNAKE_CASE:
NAMA_KONSTANTA. - Jangan disingkat (ntar bingung sendiri T_T).



