Gunakan MimeTex/LaTex untuk menulis simbol dan persamaan matematika.

Welcome to Forum Sains Indonesia. Please login or sign up.

April 18, 2024, 11:47:12 PM

Login with username, password and session length

Topik Baru

Artikel Sains

Anggota
Stats
  • Total Tulisan: 139,653
  • Total Topik: 10,405
  • Online today: 53
  • Online ever: 1,582
  • (Desember 22, 2022, 06:39:12 AM)
Pengguna Online
Users: 0
Guests: 44
Total: 44

Aku Cinta ForSa

ForSa on FB ForSa on Twitter

Trigonometri 3D

Dimulai oleh Farabi, November 06, 2011, 08:50:39 PM

« sebelumnya - berikutnya »

0 Anggota dan 1 Pengunjung sedang melihat topik ini.

Farabi

Kalau hubungan antara Sin dan Cos telah diketahui hanyalah distribusi angka 1. Dan diketahui bahwa, Jika a=Sin(x) dan Cos=1-a, tergantung diregion mana dia berada, maka bagaimana hubungan antara X dan Y dengan Z?

Sebuah Garis tegak Lurus ke X. Maka kita akan mendefiniskan distribusinya sebagai (1,0,0)
Jika Z diabaiskan, dan untuk membuat lingkaran maka diketahui bahwa Rotasi A adalah (Sin(A),Cos(A),0)

Bagaimana dengan distribusi terhadap Z?

Ga akan saya kasih tahu, biar meledak kepala kalian saya tanya gini ;D Jangan dijawab, sengaja cuma bikin pening aja.

Berarti Rotasinya ada 3 kan? Rotasi A, B, C atau RotX, RotY, RotZ

;D
Raffaaaaael, raffaaaaael, fiiii dunya la tadzikro. Rafaael. Fi dunya latadzikro bil hikmah, wa bil qiyad

Maa lahi bi robbi. Taaqi ilaa robbi. La taaqwa, in anfusakum minallaaahi.

Farabi

#1
Sebenernya gampang kok.

x y z n
-------
1 0 0 0 X
0 1 0 0 Y
0 0 1 0 Z
0 0 0 1 W

Nah matrix ini adalah posisi default anda.  Menggunakan matrix 3x3 sebetulnya juga bisa, tapi karena dikomputer intel kelipatan 2 lebih cepat, makanya dipaskan jadi 4. Tapi yang perlu anda perhatikan hanya 3x3 saja, sisanya abaikan.

Nah kalau anda punya misalkan sebuah VERTEX (Posisi dalam ruang 3 Dimensi) dengan anggota, X, Y, Z dan W. Ingat, W hanya supaya pas, nilainya harus, 1 karena perkalian matrix, jumlah baris harus sama dengan kolom.
Maka posisinya menjadi begini

x y z n
-------
1 0 0 0 X  VX
0 1 0 0 Y  VY
0 0 1 0 Z  VZ
0 0 0 1 W VW

Supaya mudah, saya kasih nomer ya


Mengurutnya sebetulnya bukan kebawah, tapi kekanan, tapi sama saja, asal anda tahu mana dengan mana yang harus dikalikan. Urutan begini biasanya digunakan dalam Standard Idustri, OpenGL, yaitu sebuah de facto penyebutan langkah langkah atau prosedur dalam pembuatan gambar 3D.

Matrix diatas adalah matrix dasar, dimana belum terjadi perputaran sama sekali. Ingat, trigonometri hanyalah pendistribusian angka 1 sedemikian rupa, sehingga sebuah benda berputar dengan jarak tetap, sehingga meninggalkan jejak lingkaran.


x y z n
-------
1*VX 0*VX 0*VY 0 X  VX
0       1       0       0 Y  VY
0       0       1       0 Z  VZ
0       0       0       1 W VW

X=m0*VX+m4*VY+m8*VZ
Y=m1*VX+m5*VY+m9*VZ
Z=m2*VX+m6*VY+m10*VZ

dst...

Perkalian baris kesatu, akan menghasilkan nilai X, akan tetapi, pada prakteknya, perhitungan ini, biasanya terjadi, setelah anda memutar mutar benda, sedemikian rupa, sehingga hasil akhirnya adalah, nilai yang telah diputar, akan tetapi, karena belum diputar, maka nilai yang dikalikan masih tetap sama.
Raffaaaaael, raffaaaaael, fiiii dunya la tadzikro. Rafaael. Fi dunya latadzikro bil hikmah, wa bil qiyad

Maa lahi bi robbi. Taaqi ilaa robbi. La taaqwa, in anfusakum minallaaahi.

Farabi

Nah biar asik, langsung aja rumus lengkap nya? Pilih deh, mau tangan kanan, mau tangan kiri.


[pranala luar disembunyikan, sila masuk atau daftar.]
Raffaaaaael, raffaaaaael, fiiii dunya la tadzikro. Rafaael. Fi dunya latadzikro bil hikmah, wa bil qiyad

Maa lahi bi robbi. Taaqi ilaa robbi. La taaqwa, in anfusakum minallaaahi.

Farabi

Ada yang mau ditanyakan ga? Saya butuh banyak orang yang ngerti masalah ini. Udah mepet waktunya ;D
Raffaaaaael, raffaaaaael, fiiii dunya la tadzikro. Rafaael. Fi dunya latadzikro bil hikmah, wa bil qiyad

Maa lahi bi robbi. Taaqi ilaa robbi. La taaqwa, in anfusakum minallaaahi.

Farabi

Karena Dunia 3D adalah dunia yang relatif, maka hitungan yang ada didalam dunia 3D tidak bisa atomic, dalam artian tidak bisa dibagi lagi, melainkan hitungan relatif. Saat anda menggambar 10 pixel pada ruang 2D, 10 pixel ini bisa menjadi 100 pixel dalam koordinat 3D, karena adanya hukum, semakin dekat benda semakin besar. Hal ini jelas membuktikan bahwa anda membutuhkan sebuah unit pengolah (prosessor) dan unit penghapal (memory) yang sangat besar.

Seringkali sebuah texture saat diperbesar menjadi jelek, sebaliknya, tekstur yang terlalu besar saat dijadikan kecil, membuak komputasi menjadi berat, itulah sebabnya, sebetulnya didalam GPU atau Graphic card anda, dibutuhkan memori yang besar. Saat anda memasukkan sebuah tekstur dengan dimensi misalkan 1024x1024, saat texture anda diload ke Graphic Card, GP akan membuat gambar tersebut menjadi beberapa versi yang lebih kecil, sehingga, saat terjadi pembesaran atau pengecilan, komputasi yang terjadi tidak terlalu mahal, mahal disini dalam artian terlalu banyak memakan sumber daya.

Membuat sebuah piranti lunak 3D dengan bilangan bulat memang bisa, tapi akan terlihat aneh saat terjadi pergerakan, dimana gerakan awal sangat cepat, tapi setelah itu menjadi sangat lambat sekali, karena presisi yang banyak terlewat. Itu sebabnya sebuah bilangan pecahan, atau "Floating-point" nilai mengambang, atau kalau istilah saya, nilai antara sangat memegang peranan penting.

Dibandingkan dengan instruksi perkalian bilangan bulat, bilangan antara ini lebih lambat 100 kali, bisa sampai 100 detak setiap operasinya. Jika prosesor anda 1 miliar deta perdetik, tinggal anda bagikan saja berapa kali bisa menghitung bilangan antara atau pecahan ini. Sedangkan perkalian bulat, hanya memakan 10 sampai 20 detak saja, perbedaan yang sangat jauh. Akan tetapi, fungsi bilangan bulat pada komputer Intel tidak mempunyai hitungan akar quadrat dari bilangan cacah. Konon SSE2 yang adalah instruksi tambahan dari komputer intel bisa menghitung 4 buah bilangan bulat akar quadrat sekaligus, tapi sayangnya, menurut saya, selain rumit, kecepatannya masih sama saja dengan bilangan cacah.

Beberapa prosesor AMD katanya memiliki kemampuan antara bilangan bulat dan cacah yang sama, tapi entah sama cepat atau sama lambat, tapi dari beberapa pengguna AMD, mereka puas dengan performa komputer AMD untuk bermain game. Tapi saya belum pernah coba.

Jadi inti dari tulisan saya, anda harus memahami bahwa dalam 3D sebuah koordinat adalah relatif, dan harus menggunakan pecahan.
Raffaaaaael, raffaaaaael, fiiii dunya la tadzikro. Rafaael. Fi dunya latadzikro bil hikmah, wa bil qiyad

Maa lahi bi robbi. Taaqi ilaa robbi. La taaqwa, in anfusakum minallaaahi.

Farabi

Yang lama dan berat dari 3D itu adalah floodfill, alias pengarsiran sebuah bidang, juga penskalaan gambar dan mapping gambar. Semisal, sebuah gambar dengan ukuran 1024x1024 dimasukkan ke sebuah kotak dengan ukuran 50x50 unit relative dalam koordinat 3D. Disini langkah yang harus dibuat adalah, pertama anda menskalakan gambar, kemudian menghitung luas dari kotak tersebut, baru kemudian gambar diisi sesuai dengan yang telah diarsir, proses ini sangat lambat dan memakan banyak waktu. Harus menggunakan prosesor khusus, dengan bandwith memory yang besar. Dan dengan kemampuan hitung yang banyak, kalau bisa, 1024 pixel itu ditangani oleh 1024 chip juga, dengan sebuah arsitektur chipset yang telah dioptimasi sedemikian rupa, sehingga bisa dengan cepat melakukan pengarsiran texture, sebenarnya, dalam hal inilah CPU kalah dibandingkan GPU. Karena CPU berpusat pada bilangan bulat, sedangkan GPU pada bilangan Cacah.
Raffaaaaael, raffaaaaael, fiiii dunya la tadzikro. Rafaael. Fi dunya latadzikro bil hikmah, wa bil qiyad

Maa lahi bi robbi. Taaqi ilaa robbi. La taaqwa, in anfusakum minallaaahi.

Farabi

[pranala luar disembunyikan, sila masuk atau daftar.]

Contoh implementasi. Untuk kalkulasi kamera menjadi lebih cepat, tapi sayangnya, saya tidak punya model manusia lagi, jadinya ya saya pakai ini sehingga pada komputer saya CPU usagenya 30%. Ukuran tekxture memang luar biasa, 2048x2048 32bit RGBA, beberapa komputer jadul mungkin tidak akan sanggup, atau hanya sanggup meload 1 texture itu sama. ;D Model yang terakhir hilang, padahal itu yang paling efisien.
Raffaaaaael, raffaaaaael, fiiii dunya la tadzikro. Rafaael. Fi dunya latadzikro bil hikmah, wa bil qiyad

Maa lahi bi robbi. Taaqi ilaa robbi. La taaqwa, in anfusakum minallaaahi.

Farabi

Pada contoh sebelumnya saya salah melihat, ternyata Matrix OpenGL entah bagaimana salah menghitung jika anda mentranslasikan sebuah vektor misalkan dengan panjang lurus ke Z, sehingga pada contoh diatas kameranya berantakan. Ini adalah versi kamera yang telah diperbaiki, artinya, pada tiap tiap Matrix, Vektor harus anda kalikan sendiri menggunakan FPU di CPU anda


Sebetulnya Trigonometri 3D ini sangat mudah, kadang yang membuat rumit adalah istilah istilah dan logika yang nyaris susah untukdipahami.
Sayangnya, mau dibagaimanapun, ternyata setelah menggunakan cahaya dan texture, biarpun hanya beberapa VRTEX saja, tetap saja dikomputer saya minimal 25% CPU Usage, tampaknya itu adalah minimal dari kemampuan GPU saya. Sedangkan untuk membaca VRAM, yang biasanya menggunakan syslinux cepat, kalau menggunakan OpenGL sangat lambat sekali, bisa mencapai CPU Usage 100%

Ini adalah contoh implementasi kamera yang telah diperbaiki.
[pranala luar disembunyikan, sila masuk atau daftar.] (5 MBytes, ouch)
Raffaaaaael, raffaaaaael, fiiii dunya la tadzikro. Rafaael. Fi dunya latadzikro bil hikmah, wa bil qiyad

Maa lahi bi robbi. Taaqi ilaa robbi. La taaqwa, in anfusakum minallaaahi.

Farabi

Gimana nih? Pada ngerti ga? ????
Raffaaaaael, raffaaaaael, fiiii dunya la tadzikro. Rafaael. Fi dunya latadzikro bil hikmah, wa bil qiyad

Maa lahi bi robbi. Taaqi ilaa robbi. La taaqwa, in anfusakum minallaaahi.

Farabi

Simpel kok. Hubungannya cuma Sin Cos, -Sin Cos untuk yang lainnya. Cuma itu saja.
Raffaaaaael, raffaaaaael, fiiii dunya la tadzikro. Rafaael. Fi dunya latadzikro bil hikmah, wa bil qiyad

Maa lahi bi robbi. Taaqi ilaa robbi. La taaqwa, in anfusakum minallaaahi.

Farabi

Luas sebuah Object.

Coba anda hitung berapa luasnya?


Anda tidak akan mampu. Tapi bukan berarti tidak bisa. Sebuah objek 3D dibentuk oleh minimal 3 buah VERTEX yang biasa disebut TRI Mesh, atau 4 buah VERTEX yang biasa disebut Quad Mesh. Sebetulnya gambar diatas terdiri dari titik titik yang terbentuk dari 1 TRI Mesh atau 3 buah VERTEX.



Sehingga memungkinkan bagi anda untuk menghitung jika kurang kerjaan ;D
Raffaaaaael, raffaaaaael, fiiii dunya la tadzikro. Rafaael. Fi dunya latadzikro bil hikmah, wa bil qiyad

Maa lahi bi robbi. Taaqi ilaa robbi. La taaqwa, in anfusakum minallaaahi.