Apakah Komputasi Paralel itu ?
Apakah Parallel Virtual Machine tersebut ?
dan Apa yang dimaksud dengan peningkatan kinerja komputasi ?
3 pertanyaan ini pasti akan berputar-putar di kepala kalian semua..saya akan coba meringkas dan mengambil intisari dari sebuah jurnal yang berjudul "Komputasi Paralel Menggunakan Parallel Virtual machine Untuk Peningkatan Kinerja Komputasi", jurnal ini ditulis oleh Tomiputra Lauwali, Maria A. Kartawidjaja dari Jur.Teknik Elektro, Universitas Katolik Indonesia Atma Jaya.
> KOMPUTASI PARALEL adalah.......
Michael J. Flynn membagi komputer dalam 4 kategori yaitu :
1. SISD (Single Instruction, Single Data Stream)
2. MISD (Multiple Instruction, Single Data Stream)
3. SIMD (Single Instruction, Multiple Data Streams)
4. MIMD (Multiple Instruction, Multiple Data Streams)
Dalam penelitian ini, komputasi paralel digunakan dengan menggunakan paradigma master-slave, yaitu satu proses bertindak sebagai master (tuan) yang dapat membangkitkan proses dari slave (hamba).
Ukuran yang dapat digunakan untuk mengevaluasi kinerja sistem adalah waktu eksekusi, peningkatan kecepatan (speedup), efisiensi dan biaya.
A. Waktu Eksekusi Program Paralel adalah.......
Penjumlahan waktu komputasi dan waktu komunikasi. Waktu eksekusi dapat diperpanjang dengan adanya Overhead. Overhead dapat dilakukan dengan :
1. Adanya prosessor yang berhenti bekerja
2. Adanya pekerjaan komputasi ekstra pada program paralel
3. Adanya proses sinkronisasi
B. Peningkatan Kecepatan
Rumus dari Peningkatan Kecepatan adalah Sp = ts/tp
ket : ts = waktu eksekusi program pada satu prosesor
tp = waktu eksekusi program pada p prosesor
Peningkatan kecepatan dibagi 2 yaitu :
1. Peningkatan Kecepatan Mutlak yaitu perbandingan antara waktu eksekusi program serial tercepat dan waktu eksekusi suatu program paralel.
2. Peningkatan Kecepatan Relatif yaitu perbandingan antara waktu eksekusi program paralel pada satu prosesor dan waktu eksekusi program paralel yang sama pada p prosesor.
Pada penelitian ini yang digunakan adalah Peningkatan Kecepatan Relatif yaitu untuk menginvestasi seberapa besar peningkatan kerja yang diperoleh dengan menggunakan sejumlah prosesor yang bekerja bersama-sama dalam mengeksekusi suatu program.
> PARALLEL VIRTUAL MACHINE (PVM) adalah.......
Suatu perangkat lunak yang telah menjadi standar pemrograman paralel yang umum digunakan.
Penelitian ini dilakukan dengan menggunakan bahasa C.
Proses yang dilakukan adalah dengan melakukan perkalian Matriks dan Quicksort.
Kesimpulan yang didapat dari tulisan penelitian diatas adalah program paralel perkalian matriks memberikan peningkatan kinerja yang cukup baik.
Referensi :
http://isjd.pdii.lipi.go.id/admin/jurnal/11083648.pdf
Rabu, 18 Mei 2011
Selasa, 12 April 2011
Mobile Computing
Mobile Computing System adalah sistem komputasi yang dapat dengan mudah dipindahkan secara fisik. Mobile computing device tidak selalu harus terhubung dengan jaringan telekomunikasi. Kalkulator, HP, laptop, netbook bisa dikategorikan sebagai perangkat mobile computing.
Sistem Operasi yang dapat digunakan dalam pembuatan aplikasi mobile adalah android. Android adalah sistem operasi untuk telepon seluler yang berbasis Linux. Android menyediakan platform terbuka bagi para pengembang buat menciptakan aplikasi mereka sendiri untuk digunakan oleh bermacam peranti bergerak. Untuk memulai membuat aplikasi, kita harus mengintegrasikan sistem android dan beberapa piranti yang dibutuhkan, seperti :
- JDK 6 (Java Development Kit)
- Android SDK
- Eclipse 3.5 (Galileo)
- ADT 9.0.0 (Android Development Tools)
Selain Android, OS yang dapat digunakan untuk membuat aplikasi pada mobile adalah symbian. Perbandingan Android dan Symbian dapat dilihat dari gambar dibawah ini :

Referensi :
http://blogdosen.unsada.ac.id/adam_arif/?p=207
http://www.kaskus.us/showthread.php?p=369514756
http://www.speedytown.com/kimyong/index.php/2009/11/22/membuat-aplikasi-handphone-berbasis-symbian-android-sony-ericsson-websdk/
Mobile Computing System adalah sistem komputasi yang dapat dengan mudah dipindahkan secara fisik. Mobile computing device tidak selalu harus terhubung dengan jaringan telekomunikasi. Kalkulator, HP, laptop, netbook bisa dikategorikan sebagai perangkat mobile computing.
Sistem Operasi yang dapat digunakan dalam pembuatan aplikasi mobile adalah android. Android adalah sistem operasi untuk telepon seluler yang berbasis Linux. Android menyediakan platform terbuka bagi para pengembang buat menciptakan aplikasi mereka sendiri untuk digunakan oleh bermacam peranti bergerak. Untuk memulai membuat aplikasi, kita harus mengintegrasikan sistem android dan beberapa piranti yang dibutuhkan, seperti :
- JDK 6 (Java Development Kit)
- Android SDK
- Eclipse 3.5 (Galileo)
- ADT 9.0.0 (Android Development Tools)
Selain Android, OS yang dapat digunakan untuk membuat aplikasi pada mobile adalah symbian. Perbandingan Android dan Symbian dapat dilihat dari gambar dibawah ini :
Referensi :
http://blogdosen.unsada.ac.id/adam_arif/?p=207
http://www.kaskus.us/showthread.php?p=369514756
http://www.speedytown.com/kimyong/index.php/2009/11/22/membuat-aplikasi-handphone-berbasis-symbian-android-sony-ericsson-websdk/
Selasa, 01 Maret 2011
KOMPUTASI MODERN
• ILMU KOMPUTASI
Ilmu komputasi adalah bidang ilmu yang mempunyai perhatian pada penyusunan model matematika dan teknik penyelesaian numerik serta penggunaan komputer untuk menganalisis dan memecahkan masalah-masalah ilmu (sains).
• KOMPUTASI MODERN
Kata “komputer” pertama kali di perdengarkan kepada public pada tahun 1613, hal ini mengacu pada perhitungan aritmatika dan kata “komputer” digunakan dalam pengertian itu sampai pertengahan abad ke-20.
Sejarah komputer modern dimulai dengan dua teknologi yang terpisah- perhitungan otomatis dan dapat di program-tapi tidak ada satu perangkat pun yang dapat dikatakan sebagai komputer, karena sebagian penerapan yang tidak konsisten istilah tersebut. Contoh-contoh awal perangkat penghitung mekanis termasuk sempoa (yang berasal dari sekitar 150-100 SM).
• SEJARAH KOMPUTASI MODERN
Salah satu tokoh yang sangat mempengaruhi perkembangan komputasi modern adalah John von Neumann (1903-1957), Beliau adalah ilmuan yang meletakkan dasar-dasar komputer modern.Von Neumann telah menjadi ilmuwan besar abad 21. Von Neumann memberikan berbagai sumbangsih dalam bidang matematika, teori kuantum, game theory, fisika nuklir, dan ilmu komputer yang di salurkan melalui karya-karyanya . Beliau juga merupakan salah satu ilmuwan yang terkait dalam pembuatan bom atom di Los Alamos pada Perang Dunia II lalu.
Berikut ini beberapa contoh komputasi modern sampai dengan lahirnya ENIAC :
• Konrad Zuse’s electromechanical “Z mesin”.Z3 (1941) sebuah mesin pertama menampilkan biner aritmatika, termasuk aritmatika floating point dan ukuran programmability. Pada tahun 1998, Z3 operasional pertama di dunia komputer itu di anggap sebagai Turing lengkap.
• Berikutnya Non-programmable Atanasoff-Berry Computer yang di temukan pada tahun 1941 alat ini menggunakan tabung hampa berdasarkan perhitungan, angka biner, dan regeneratif memori kapasitor.Penggunaan memori regeneratif diperbolehkan untuk menjadi jauh lebih seragam (berukuran meja besar atau meja kerja).
• Selanjutnya komputer Colossus ditemukan pada tahun 1943, berkemampuan untuk membatasi kemampuan program pada alat ini menunjukkan bahwa perangkat menggunakan ribuan tabung dapat digunakan lebih baik dan elektronik reprogrammable.Komputer ini digunakan untuk memecahkan kode perang Jerman.
• The Harvard Mark I ditemukan pada 1944, mempunyai skala besar, merupakan komputer elektromekanis dengan programmability terbatas.
• Lalu lahirlah US Army’s Ballistic Research Laboratory ENIAC ditemukan pada tahun 1946, komputer ini digunakan unutk menghitung desimal aritmatika dan biasanya disebut sebagai tujuan umum pertama komputer elektronik (ENIAC merupaka generasi yang sudah sangat berkembang di zamannya sejak komputer pertama Konrad Zuse ’s Z3 yang ditemukan padatahun 1941).
REFERENSI :
http://id.wikipedia.org/wiki/Komputasi
http://phenomenalsite.co.cc/?p=46
Ilmu komputasi adalah bidang ilmu yang mempunyai perhatian pada penyusunan model matematika dan teknik penyelesaian numerik serta penggunaan komputer untuk menganalisis dan memecahkan masalah-masalah ilmu (sains).
• KOMPUTASI MODERN
Kata “komputer” pertama kali di perdengarkan kepada public pada tahun 1613, hal ini mengacu pada perhitungan aritmatika dan kata “komputer” digunakan dalam pengertian itu sampai pertengahan abad ke-20.
Sejarah komputer modern dimulai dengan dua teknologi yang terpisah- perhitungan otomatis dan dapat di program-tapi tidak ada satu perangkat pun yang dapat dikatakan sebagai komputer, karena sebagian penerapan yang tidak konsisten istilah tersebut. Contoh-contoh awal perangkat penghitung mekanis termasuk sempoa (yang berasal dari sekitar 150-100 SM).
• SEJARAH KOMPUTASI MODERN
Salah satu tokoh yang sangat mempengaruhi perkembangan komputasi modern adalah John von Neumann (1903-1957), Beliau adalah ilmuan yang meletakkan dasar-dasar komputer modern.Von Neumann telah menjadi ilmuwan besar abad 21. Von Neumann memberikan berbagai sumbangsih dalam bidang matematika, teori kuantum, game theory, fisika nuklir, dan ilmu komputer yang di salurkan melalui karya-karyanya . Beliau juga merupakan salah satu ilmuwan yang terkait dalam pembuatan bom atom di Los Alamos pada Perang Dunia II lalu.
Berikut ini beberapa contoh komputasi modern sampai dengan lahirnya ENIAC :
• Konrad Zuse’s electromechanical “Z mesin”.Z3 (1941) sebuah mesin pertama menampilkan biner aritmatika, termasuk aritmatika floating point dan ukuran programmability. Pada tahun 1998, Z3 operasional pertama di dunia komputer itu di anggap sebagai Turing lengkap.
• Berikutnya Non-programmable Atanasoff-Berry Computer yang di temukan pada tahun 1941 alat ini menggunakan tabung hampa berdasarkan perhitungan, angka biner, dan regeneratif memori kapasitor.Penggunaan memori regeneratif diperbolehkan untuk menjadi jauh lebih seragam (berukuran meja besar atau meja kerja).
• Selanjutnya komputer Colossus ditemukan pada tahun 1943, berkemampuan untuk membatasi kemampuan program pada alat ini menunjukkan bahwa perangkat menggunakan ribuan tabung dapat digunakan lebih baik dan elektronik reprogrammable.Komputer ini digunakan untuk memecahkan kode perang Jerman.
• The Harvard Mark I ditemukan pada 1944, mempunyai skala besar, merupakan komputer elektromekanis dengan programmability terbatas.
• Lalu lahirlah US Army’s Ballistic Research Laboratory ENIAC ditemukan pada tahun 1946, komputer ini digunakan unutk menghitung desimal aritmatika dan biasanya disebut sebagai tujuan umum pertama komputer elektronik (ENIAC merupaka generasi yang sudah sangat berkembang di zamannya sejak komputer pertama Konrad Zuse ’s Z3 yang ditemukan padatahun 1941).
REFERENSI :
http://id.wikipedia.org/wiki/Komputasi
http://phenomenalsite.co.cc/?p=46
Minggu, 31 Oktober 2010
Peluang Usaha Yang Memanfaatkan Bidang Informatika
Berbagai peluang usaha dapat diterapkan dalam kehidupan sehari-hari.Untuk menunjang usaha yang kita lakukan, biasanya kita menggunakan bidang lain untuk menunjang usaha yang sedang kita jalankan.
Usaha kecil yang paling banyak diterapkan adalah usaha kerajinan tangan. Usaha tersebut juga memanfaatkan bidang informatika. Informatika digunakan untuk pendataan barang yang dihasilkan per tahun, barang yang terjual, laba dan rugi per tahun.
Pemanfaatan informatika akan membuat pembukuan lebih rapi, sehingga tiap tahunnya akan tersimpan datanya secara lengkap. Selain itu, dari segi keamanannya jauh lebih terjaga karena dengan menggunakan komputer kemungkinan data untuk terbuang lebih kecil serta dengan menggunakan komputer data dapat di backup dengan cara yang mudah dan cepat, sedangkan jika anda menggunakan kertas, maka akan membuang-buang kertas dan kemungkinan data terselip lebih besar.
Selain itu, saat ini banyak minimarket yang dibangun. Usaha inilah yang sangat memanfaatkan bidang informatika, karena kasir yang ada pada minimarket menggunakan komputer untuk melakukan proses perhitungan ketika ada pelanggan yang melakukan pembelanjaan. Hal lain yang juga memanfaatkan informatika adalah ketika pembuatan database dari barang-barang yang tersedia di minimarket tersebut. Sehingga untuk ketersediaan barang dapat langsung diperiksa pada databasenya. Selain itu, dengan pemanfaatan teknologi kita dapat mengguanakn sistem barcode untuk setiap barang ayng ada pada minimarket tersebut.
Usaha-usaha lain juga banyak yang memanfaatkan bidang informatika. Tulisan ini hanyalah sebagian kecil dari usaha-usaha yang menggunakan informatika. Untuk zaman saat ini, bisa dikatakan seluruh usaha baik dari usaha kecil hingga usaha dengan skala besar memanfaatkan informatika didalamnya.
Usaha kecil yang paling banyak diterapkan adalah usaha kerajinan tangan. Usaha tersebut juga memanfaatkan bidang informatika. Informatika digunakan untuk pendataan barang yang dihasilkan per tahun, barang yang terjual, laba dan rugi per tahun.
Pemanfaatan informatika akan membuat pembukuan lebih rapi, sehingga tiap tahunnya akan tersimpan datanya secara lengkap. Selain itu, dari segi keamanannya jauh lebih terjaga karena dengan menggunakan komputer kemungkinan data untuk terbuang lebih kecil serta dengan menggunakan komputer data dapat di backup dengan cara yang mudah dan cepat, sedangkan jika anda menggunakan kertas, maka akan membuang-buang kertas dan kemungkinan data terselip lebih besar.
Selain itu, saat ini banyak minimarket yang dibangun. Usaha inilah yang sangat memanfaatkan bidang informatika, karena kasir yang ada pada minimarket menggunakan komputer untuk melakukan proses perhitungan ketika ada pelanggan yang melakukan pembelanjaan. Hal lain yang juga memanfaatkan informatika adalah ketika pembuatan database dari barang-barang yang tersedia di minimarket tersebut. Sehingga untuk ketersediaan barang dapat langsung diperiksa pada databasenya. Selain itu, dengan pemanfaatan teknologi kita dapat mengguanakn sistem barcode untuk setiap barang ayng ada pada minimarket tersebut.
Usaha-usaha lain juga banyak yang memanfaatkan bidang informatika. Tulisan ini hanyalah sebagian kecil dari usaha-usaha yang menggunakan informatika. Untuk zaman saat ini, bisa dikatakan seluruh usaha baik dari usaha kecil hingga usaha dengan skala besar memanfaatkan informatika didalamnya.
Minggu, 26 September 2010
Peranan Sisetm Informasi Dalam Bidang Keuangan
Sistem informasi memiliki pengaruh dalam berbagai bidang, baik bidang pendidikan, kesehatan, keuangan bahkan hingga dalam bidang pemerintahan.
Sistem informasi dalam bidang keuangan akan coba dijelaskan sedikit dibawah ini.
Bank Information System (BIS) adalah salah satu cara bank menawarkan untuk menerima informasi. BIS memungkinkan klien untuk mendapatkan informasi melalui telepon atau faks tentang bank, layanan, nilai tukar, rekening, dan untuk meneruskan pesan ke bank atau pelanggan sistem lainnya.
Beberapa manfaat dari BIS ini ialah :
IT telah menyediakan solusi bagi bank untuk mengurus akuntansi dan persyaratan back office. Selain itu, bidang IT juga memfasilitasi pengenalan delivery channel baru - dalam bentuk Anjungan Tunai Mandiri, Net Banking, Mobile Banking dan sejenisnya.
Beberapa produk sistem informasi perbankan yang dihasilkan dari berbagai bank ritel di Indonesia :
terbukanya peluang untuk memadukan produk-produk asuransi, pasar-modal dan dana-pensiun ke dalam layanan perbankan. Teknologi yang dihasilkan tersebut sifatnya menjadi sangat individual dan tergantung pada profil dan kebutuhan masing-masing nasabah. Maka, perlu adanya penambahan di bidang perbankan untuk menajukan di sekitar mobile-banking dan ekstenfikasi layanan prifate banking khususnya di Indonesia.
Referensi :
Sistem informasi dalam bidang keuangan akan coba dijelaskan sedikit dibawah ini.
Bank Information System (BIS) adalah salah satu cara bank menawarkan untuk menerima informasi. BIS memungkinkan klien untuk mendapatkan informasi melalui telepon atau faks tentang bank, layanan, nilai tukar, rekening, dan untuk meneruskan pesan ke bank atau pelanggan sistem lainnya.
Beberapa manfaat dari BIS ini ialah :
- BIS menyediakan komunikasi interaktif antara klien dan bank 24 jam sehari
- Akses informasi dan transfer dapat dilakukan dari setiap bagian dari dunia
- Rekening bank garansi kerahasiaan klien dengan memberikan nomor identifikasi dan password.
- BIS tersambung ke saluran telepon nomor-multi.
IT telah menyediakan solusi bagi bank untuk mengurus akuntansi dan persyaratan back office. Selain itu, bidang IT juga memfasilitasi pengenalan delivery channel baru - dalam bentuk Anjungan Tunai Mandiri, Net Banking, Mobile Banking dan sejenisnya.
Beberapa produk sistem informasi perbankan yang dihasilkan dari berbagai bank ritel di Indonesia :
Tabungan
Deposito
Giro
Kartu Debit
Kartu Kredit
Perdagangan Bank Notes, Valas, dsb (Trade Finance)
Packet S/W (Windows) gratis dan tak terbatas sebagai antisipasi memenangkan persaingan teller-less.
Packet software keuangan (Quicken, MoneyOne, BankNow)
Packet Entreprise Resourches Planning (ERP software) yang tentunya sangat dibutuhkan dalam mengelola bisnisnya.
Referensi :
- http://translate.google.co.id/translate?hl=id&langpair=en|id&u=http://www.snoras.com/en/corporate/ebanking/bis
http://translate.google.co.id/translate?hl=id&langpair=en|id&u=http://findarticles.com/p/articles/mi_6776/is_6_7/ai_n28514260/
Jumat, 25 Juni 2010
Perbandingan Game Engine
Torque Game Engine adalah versi modifikasi dari sebuah 3D komputer mesin game awalnya dikembangkan oleh Dynamix untuk 2001 FPS Suku 2 . Beberapa judul terkenal yang dikembangkan dengan menggunakan torque game engine adalah Blockland , Marble Blast Gold , Minion dari Mirth , TubeTwist , Ultimate Duck Hunting , Wildlife Tycoon: Venture Afrika , ThinkTanks , The Destiny dari Zorro dan Penny Arcade Adventures . Namun Torque Game Engine tidak lagi dijual karena telah digantikan oleh Torque 3D.
- Kelebihan dari torque game engine ialah fiturnya menyediakan kode jaringan yang kuat, scripting, di-mesin dunia editing dan GUI penciptaan. Source code dapat dikompilasi pada Windows , Macintosh , Linux , Wii , Xbox 360 dan iPhone platform. Pada Torque game engine mendukung pemuatan model 3D dalam DTS dan format file DIF.
Model DTS dapat menjalankan animasi baik menggunakan animasi tulang atau animasi morph target . Hal ini juga memungkinkan untuk paduan animasi beberapa kerangka bersama dengan memainkan mereka secara bersamaan atau secara otomatis tweening antara posisi yang berbeda dalam kerangka tulang. Model DTS biasanya digunakan untuk karakter dan kendaraan meskipun terkadang digunakan untuk bangunan dan interior.
Sedangkan pada model DIF dihitung pencahayaan pra, sehingga tidak cocok untuk animasi. Sebaliknya, model DIF digunakan untuk bangunan dan interior. Model DIF secara otomatis memiliki ikatan kotak yang sangat cocok dengan geometri terlihat.
fitur Torque Game Engine yang paling terkenal adalah kemampuannya untuk berinteraksi dengan program lain melalui Internet.
Beberapa versi torque game engine :
- Torque Game Engine Advanced
Torque Game Engine Advanced (sebelumnya dikenal sebagai Torque Shader Engine) adalah versi yang diperluas Torque Game Engine dibuat untuk mendukung teknologi maju termasuk shaders , pencahayaan per-pixel, dan medan besar. Beberapa game Xbox Live Arcade telah dirilis menggunakan mesin Torque, terutama Marble Blast Ultra .
-Torque Game Builder
Beberapa waktu setelah rilis Torque Shader Engine, perusahaan mulai menciptakan Torque 2D. 2D adalah torsi mesin permainan yang dirancang untuk permainan 2D berdasarkan Torque Game Engine. Lalu akhirnya namanya berubah menjadi Torque Game Builder karena tujuan utamanya adalah untuk membuat Torque Game Builder suite pembuatan sebuah permainan. Torque game builder digunakan untuk menciptakan permainan puzzle bergerak.
-Torque Lighting Kit
Torque Lighting Kit adalah semacam pak ekspansi ke Torque Game Engine yang dikembangkan oleh John Kabus. Pada jenis game engine ini, ia menambahkan berbagai fitur pencahayaan yang ditingkatkan dari Torque Game Engine. Pada fitur terbarunya pencahayaan dinamis dan bayangan yang ditambahkan. Torque Lighting Kit kini disertakan sebagai bagian dari Torque Game Engine 1.5 dan Torque Game Engine Advanced.
-Torque X
Setelah merilis Torque Game Builder, GarageGames mulai mengembangkan Torque Torque X. X adalah mesin permainan berdasarkan Torque Game Builder menggunakan sistem komponen yang memungkinkan benda-benda permainan ganda untuk memiliki kemampuan yang sama.
Unreal Game Engine
Unreal Engine dapat di katakan sebagai salah satu game engine yang paling sering di gunakan dalam generasi sekarang ini. Terutama setelah munculnya Unreal Engine 3, sudah beberapa game yang menggunakan engine ini. Unreal Engine 3 menjadi pilihan yang paling diminati karena kemudahan fitur multiformat-nya. Hingga saat ini engine ini masih di kembangakan oleh developer Epic Games. Unreal engine menjadi solusi game engine yang paling mudah unuk generasi next-gen sekarang ini. Epic Games sedang mengerjakan Unreal Engine 4 yang akan muncul pada tahun 2012.
http://yaminobu.wordpress.com/2009/09/20/top-10-best-game-engine-2009/
- Referensi :
http://yaminobu.wordpress.com/2009/09/20/top-10-best-game-engine-2009/
Senin, 24 Mei 2010
Membuat Sebuah Actor menggunakan Delta 3D
Tutorial ini akan menunjukkan bagaimana membuat seorang aktor baru, impor ke Editor, dan kemudian melihatnya dalam sebuah dtCore:: Scene. Aktor yang akan kita ciptakan menerapkan sebuah gelombang sinus untuk vertex sebagai simulasi fisika kain, contoh seperti bendera melambai tertiup angin. Aktor ini juga akan mengekspos sifat yang tepat yang terkait dengan fisika flag yang kemudian dapat diubah dalam Editor. Beberapa langkah yang harus dilakukan untuk mencapai pembuatan aktor, yaitu :
1.Anda harus mengetahui kode aktor yang akan ditempatkan di dalam layar kerja.
2.Anda harus mengetahui kode proxy aktor yang akan mewakili aktor di Editor.
3.Anda harus menulis sebuah library tempat aktor harus diekspor.
Sebelum semua langkah-langkah diatas kita lakukan, kita perlu menyiapkan sebuah proyek. Tutorial ini menggunakan Microsoft Visual Studio 2003. Untuk mengatur Delta3D, silakan lihat tutorial ini. Sekarang kita perlu link ke library yang tepat untuk menggunakan, Buka Scene Grafik fungsi. Klik kanan pada proyek Anda dan pilih "Properties". Di bawah tab "Linker, pilih Input". Di bawah seleksi "additional dependencies ", tambahkan library berikut: dtcored.lib, dtUtild.lib, dtDALd.lib, dtActorsd.lib, dtvis_d.lib, sg_d.lib, ul_d.lib, osgd.lib, osgDBd.lib, osgUtild . lib.
Ini adalah Delta3D dan Scene Buka Grafik library Anda harus link agar berhasil membangun proyek ini.
Anda juga perlu menambahkan DT_PLUGIN ke definisi preprocessor dalam properti proyek -> c / c + + -> Preprocessor.
Setelah proyek diatur dengan benar, saatnya untuk mulai coding aktor yang sebenarnya. Harap dicatat bahwa aktor ini menggunakan gambar perilaku kompleks yang memerlukan pemahaman dasar-dasar bagaimana Terbuka Scene Grafik bekerja. Secara khusus, penggunaan fungsi callback dan traversal adegan grafik. Mayoritas dari kode ini untuk benar-benar tessellate (melambaikan gerak) aktor dapat ditemukan dalam contoh Scene Terbuka Grafik "osgprerender" yang didistribusikan secara bebas dengan sumber Scene Open Grafik.
Mari kita mulai dengan membuat dua file untuk TessellationActor kelas. Dalam file header, kita perlu menyatakan kelas callback untuk menyelesaikan Scene Grafik yang akan digunakan untuk memperbarui pesawat tessellation. Letakkan kode berikut dalam TessellationActor.h:
#include
#include
#include
class GeometryCallback : public osg::Drawable::UpdateCallback,
public osg::Drawable::AttributeFunctor
{
public:
GeometryCallback(const osg::Vec3& o, const osg::Vec3& x,
const osg::Vec3& y, const osg::Vec3& z, double period, double xphase,
double amplitude): _firstCall(true),_startTime(0.0),_time(0.0),_period(period),
_xphase(xphase), _amplitude(amplitude),_origin(o),_xAxis(x),_yAxis(y), _zAxis(z)
{}
virtual void update(osg::NodeVisitor* nv,osg::Drawable* drawable)
{
const osg::FrameStamp* fs = nv->getFrameStamp();
double referenceTime = fs->getReferenceTime();
if (_firstCall)
{
_firstCall = false;
_startTime = referenceTime;
}
_time = referenceTime-_startTime;
drawable->accept(*this);
drawable->dirtyBound();
}
virtual void apply(osg::Drawable::AttributeType type,unsigned int count,osg::Vec3* begin)
{
if (type == osg::Drawable::VERTICES)
{
const float TwoPI=2.0f*osg::PI;
const float phase = -_time/_period;
osg::Vec3* end = begin+count;
for (osg::Vec3* itr=begin;itr {
osg::Vec3 dv(*itr-_origin);
osg::Vec3 local(dv*_xAxis,dv*_yAxis,dv*_zAxis);
local.z() = local.x()*_amplitude*
sinf(TwoPI*(phase+local.x()*_xphase));
(*itr) = _origin +
_xAxis*local.x()+
_yAxis*local.y()+
_zAxis*local.z();
}
}
}
bool _firstCall;
double _startTime, _time, _period, _xphase;
float _amplitude;
osg::Vec3 _origin, _xAxis, _yAxis, _zAxis;
};
Kode ini mendefinisikan panggilan kembali kelas yang Terbuka Scene Grafik yang akan digunakan untuk tessellate aktor. Sekarang, kita perlu mendefinisikan kelas tessellation aktor yang baru. Tambahkan kode berikut ke file TessellationActor.h:
class TessellationActor : public dtCore::Transformable
{
public:
TessellationActor();
virtual ~TessellationActor();
void GeneratePlane();
// Accessors
inline float GetPeriod() { return period; }
inline float GetAmplitude() { return amplitude; }
inline float GetPhase() { return phase; }
inline int GetNumberOfSteps() { return numberOfSteps; }
inline int GetWidth() { return width; }
inline int GetHeight() { return height; }
inline std::string GetTextureFile() { return textureFile; }
// Mutators
inline void SetPeriod(float newPeriod) { period = newPeriod; GeneratePlane(); }
inline void SetAmplitude(float newAmp) { amplitude = newAmp; GeneratePlane(); }
inline void SetPhase(float newPhase) { phase = newPhase; GeneratePlane(); }
inline void SetWidth(int newWidth) { width = newWidth; GeneratePlane(); }
inline void SetHeight(int newHeight) { height = newHeight; GeneratePlane(); }
inline void SetNumberOfSteps(int numSteps) { numberOfSteps = numSteps; GeneratePlane();}
inline void SetTextureFile(const std::string &fileName) { textureFile = fileName; GeneratePlane(); }
private:
osg::Geode *geode;
std::string textureFile;
int width, height, numberOfSteps;
float period, amplitude, phase;
};
Sekarang kita telah menetapkan TessellationActor, kita mungkin melihat beberapa anggota variabel. File tekstur, misalnya, adalah properti sumber daya. Lebar, tinggi, sejumlah langkah di antara setiap segmen pesawat, periode, amplitudo, dan fasa adalah semua sifat pesawat ini tessellating yang dapat diedit di Tingkat Editor. Sekarang, mari kita kepala ke TessellationActor.cpp file dan menentukan fungsi kelas kami. Fungsi GeneratePlane () bertanggung jawab untuk menghasilkan sebuah pesawat tessellation baru setiap kali sebuah properti diedit. Letakkan kode berikut dalam file TessellationActor.cpp:
#include "TessellationActor.h"
#include
#include
#include
#include
#include
#include
#include
#include
TessellationActor::TessellationActor() :
geode(NULL),width(200), height(100),
numberOfSteps(20), period(1.0), amplitude(0.2)
{
phase = 1.0 / width;
GeneratePlane();
}
TessellationActor::~TessellationActor()
{
}
void TessellationActor::GeneratePlane()
{
// Since the actor will only ever have one plane, remove the old one
// if it contains it
if(geode && geode->getDrawable(0))
geode->removeDrawables(0, 1);
// Initialize the data
osg::Geometry *geometry = new osg::Geometry;
osg::Vec3Array *verts = new osg::Vec3Array;
geode = new osg::Geode;
osg::Vec3 origin(0.0f,0.0f,0.0f);
osg::Vec3 xAxis(1.0f,0.0f,0.0f);
osg::Vec3 yAxis(0.0f,0.0f,1.0f);
osg::Vec3 zAxis(0.0f,-1.0f,0.0f);
osg::Vec3 bottom = origin;
osg::Vec3 top = origin;
top.z() += height;
osg::Vec3 dv = xAxis*(width/((float)(numberOfSteps-1)));
osg::Vec2Array* texcoords = new osg::Vec2Array;
osg::Vec2 bottom_texcoord(0.0f,0.0f);
osg::Vec2 top_texcoord(0.0f,1.0f);
osg::Vec2 dv_texcoord(1.0f/(float)(numberOfSteps-1),0.0f);
// Set up the vertices and texture coordinates
for(int i = 0; i < numberOfSteps; i++)
{
verts->push_back(top);
verts->push_back(bottom);
top += dv;
bottom += dv;
texcoords->push_back(top_texcoord);
texcoords->push_back(bottom_texcoord);
top_texcoord += dv_texcoord;
bottom_texcoord += dv_texcoord;
}
// Apply the texture
osg::Image *texture = osgDB::readImageFile(textureFile);
osg::Texture2D *temp = new osg::Texture2D(texture);
temp->setFilter(osg::Texture2D::MIN_FILTER,osg::Texture2D::LINEAR);
temp->setFilter(osg::Texture2D::MAG_FILTER,osg::Texture2D::LINEAR);
osg::StateSet *ss = new osg::StateSet;
ss->setTextureAttributeAndModes(0, temp, osg::StateAttribute::ON);
temp->setUnRefImageDataAfterApply(true);
// Set up the geometry
geode->setStateSet(ss);
geometry->setVertexArray(verts);
geometry->setTexCoordArray(0, texcoords);
geode->addDrawable(geometry);
geometry->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::QUAD_STRIP, 0, verts->size()));
geometry->setUpdateCallback(new
GeometryCallback(origin,xAxis,yAxis,zAxis,period,phase,amplitude));
geometry->setSupportsDisplayList(false);
// Add to the transformable
GetMatrixNode()->addChild(geode);
}
Sekarang kita telah mendefinisikan konstruktor berdasarkan nilai defaultnya, dan kami GeneratePlane fungsi didefinisikan untuk membuat pesawat, dan disebut dari masing-masing fungsi mutator kita sehingga pesawat kami akan dibuat ulang dengan nilai-nilai baru dengan benar.
Sekarang kita memiliki kelas TessellationActor yang telah kita siapakan, saatnya untuk membangun proxy nya aktor kelas. Fungsi utama untuk mengetahui dalam kelas proxy aktor adalah fungsi BuildPropertyMap. Fungsi ini bertanggung jawab untuk menambahkan sifat yang terkait dengan aktor. Fungsi lain yang perlu diperhatikan adalah fungsi CreateActor, yang sebenarnya instantiates aktor bahwa proxy adalah abstrak. Letakkan kode berikut dalam file bernama TessellationActorProxy.h:
#ifndef _TESSELLATION_ACTOR_PROXY_H_
#define _TESSELLATION_ACTOR_PROXY_H_
#include "dtDAL/transformableactorproxy.h"
#include "TessellationActor.h"
class TessellationActorProxy : public dtDAL::TransformableActorProxy
{
public:
void CreateActor() {
SetActor(*new TessellationActor);
}
TessellationActorProxy(void);
virtual ~TessellationActorProxy(void);
void BuildPropertyMap();
void SetTextureFile(const std::string &fileName)
{
TessellationActor *actor = dynamic_cast (GetActor());
if(!actor)
{
printf("Actor initialized incorrectly\n");
return;
}
actor->SetTextureFile(fileName);
}
};
#endif
Perhatikan bahwa kelas TessellationActorProxy mewarisi dari dtDAL:: TransformableActorProxy, cara yang mewarisi kelas TessellationActor dari dtCore:: Transformable. Kami juga memiliki fungsi SetTextureFile, yang bertanggung jawab untuk melacak file tekstur sumber daya yang diterapkan pada aktor. Sekarang, kita gunakan TessellationActorProxy.cpp file dan menentukan fungsi kami. Letakkan kode berikut dalam TessellationActorProxy.cpp:
#include "TessellationActorProxy.h"
#include "dtDAL/enginepropertytypes.h"
#include "dtDAL/datatype.h"
TessellationActorProxy::TessellationActorProxy()
{
}
TessellationActorProxy::~TessellationActorProxy()
{
}
void TessellationActorProxy::BuildPropertyMap()
{
// The property group
const std::string groupName = "PolyGrid";
// Make sure to build the base class properties
TransformableActorProxy::BuildPropertyMap();
// Make sure our actor is valid
TessellationActor *actor = dynamic_cast (GetActor());
if(!actor)
{
printf("Actor was initialized incorrectly\n");
return;
}
// Property for the width of the plane
AddProperty(new dtDAL::IntActorProperty("Width", "Width",
dtDAL::MakeFunctor(*actor, &TessellationActor::SetWidth),
dtDAL::MakeFunctorRet(*actor, &TessellationActor::GetWidth),
"Property for the width of the tessellation plane", groupName));
// Property for the height of the plane
AddProperty(new dtDAL::IntActorProperty("Height", "Height",
dtDAL::MakeFunctor(*actor, &TessellationActor::SetHeight),
dtDAL::MakeFunctorRet(*actor, &TessellationActor::GetHeight),
"Property for the height of the tessellation plane", groupName));
// Property for the number of steps in between each "slice" of the plane
AddProperty(new dtDAL::IntActorProperty("Number of Steps", "Number of Steps",
dtDAL::MakeFunctor(*actor, &TessellationActor::SetNumberOfSteps),
dtDAL::MakeFunctorRet(*actor, &TessellationActor::GetNumberOfSteps),
"Property for the number of steps in between each segment of the tessellation plane",
groupName));
// Property for the period of the tessellation
AddProperty(new dtDAL::FloatActorProperty("Period", "Period",
dtDAL::MakeFunctor(*actor, &TessellationActor::SetPeriod),
dtDAL::MakeFunctorRet(*actor, &TessellationActor::GetPeriod),
"Property for the period of the sine wave", groupName));
// Property for the amplitude of the tessellation
AddProperty(new dtDAL::FloatActorProperty("Amplitude", "Amplitude",
dtDAL::MakeFunctor(*actor, &TessellationActor::SetAmplitude),
dtDAL::MakeFunctorRet(*actor, &TessellationActor::GetAmplitude),
"Property for the amplitude of the sine wave", groupName));
// Property for the phase of the tessellation
AddProperty(new dtDAL::FloatActorProperty("Phase", "Phase",
dtDAL::MakeFunctor(*actor, &TessellationActor::SetPhase),
dtDAL::MakeFunctorRet(*actor, &TessellationActor::GetPhase),
"Property for the phase of the sine wave", groupName));
// Property for the texture file of the plane
// Note that resource properties are a little different that other properties. The editor
// DAL needs to store a reference to the actual proxy due to its internals, so all we do
// is add a function onto the proxy which simply calls the actual actor function.
AddProperty(new dtDAL::ResourceActorProperty(*this,dtDAL::DataType::TEXTURE,"Texture",
"Texture", dtDAL::MakeFunctor(*this, &TessellationActorProxy::SetTextureFile), groupName));
Fungsi BuildPropertyMap bertanggung jawab untuk menambahkan semua properti untuk aktor tessellation. Perhatikan bahwa kita menambahkan properti untuk mewakili masing-masing bagian data bahwa aktor tessellation berisi. Sekarang kami memastikan bahwa proxy kami akan tessellation aktor abstrak kita dengan benar dan bahwa sifat ini akan tersedia untuk perubahan di editor. Perlu diketahui bahwa bila menyesuaikan periode, amplitudo, atau fase bahwa tidak ada perubahan yang terlihat akan berlangsung di editor, karena ini adalah properti runtime. Sekarang kita telah aktor kami, dan proxy aktor mendirikan, saatnya untuk menulis sebuah library sehingga kita dapat mengimpor aktor baru kita ke dalam editor.
* Translate : http://www.delta3d.org/article.php?story=20050720135053455&topic=tutorials
1.Anda harus mengetahui kode aktor yang akan ditempatkan di dalam layar kerja.
2.Anda harus mengetahui kode proxy aktor yang akan mewakili aktor di Editor.
3.Anda harus menulis sebuah library tempat aktor harus diekspor.
Sebelum semua langkah-langkah diatas kita lakukan, kita perlu menyiapkan sebuah proyek. Tutorial ini menggunakan Microsoft Visual Studio 2003. Untuk mengatur Delta3D, silakan lihat tutorial ini. Sekarang kita perlu link ke library yang tepat untuk menggunakan, Buka Scene Grafik fungsi. Klik kanan pada proyek Anda dan pilih "Properties". Di bawah tab "Linker, pilih Input". Di bawah seleksi "additional dependencies ", tambahkan library berikut: dtcored.lib, dtUtild.lib, dtDALd.lib, dtActorsd.lib, dtvis_d.lib, sg_d.lib, ul_d.lib, osgd.lib, osgDBd.lib, osgUtild . lib.
Anda juga perlu menambahkan DT_PLUGIN ke definisi preprocessor dalam properti proyek -> c / c + + -> Preprocessor.
Setelah proyek diatur dengan benar, saatnya untuk mulai coding aktor yang sebenarnya. Harap dicatat bahwa aktor ini menggunakan gambar perilaku kompleks yang memerlukan pemahaman dasar-dasar bagaimana Terbuka Scene Grafik bekerja. Secara khusus, penggunaan fungsi callback dan traversal adegan grafik. Mayoritas dari kode ini untuk benar-benar tessellate (melambaikan gerak) aktor dapat ditemukan dalam contoh Scene Terbuka Grafik "osgprerender" yang didistribusikan secara bebas dengan sumber Scene Open Grafik.
Mari kita mulai dengan membuat dua file untuk TessellationActor kelas. Dalam file header, kita perlu menyatakan kelas callback untuk menyelesaikan Scene Grafik yang akan digunakan untuk memperbarui pesawat tessellation. Letakkan kode berikut dalam TessellationActor.h:
#include
#include
#include
class GeometryCallback : public osg::Drawable::UpdateCallback,
public osg::Drawable::AttributeFunctor
{
public:
GeometryCallback(const osg::Vec3& o, const osg::Vec3& x,
const osg::Vec3& y, const osg::Vec3& z, double period, double xphase,
double amplitude): _firstCall(true),_startTime(0.0),_time(0.0),_period(period),
_xphase(xphase), _amplitude(amplitude),_origin(o),_xAxis(x),_yAxis(y), _zAxis(z)
{}
virtual void update(osg::NodeVisitor* nv,osg::Drawable* drawable)
{
const osg::FrameStamp* fs = nv->getFrameStamp();
double referenceTime = fs->getReferenceTime();
if (_firstCall)
{
_firstCall = false;
_startTime = referenceTime;
}
_time = referenceTime-_startTime;
drawable->accept(*this);
drawable->dirtyBound();
}
virtual void apply(osg::Drawable::AttributeType type,unsigned int count,osg::Vec3* begin)
{
if (type == osg::Drawable::VERTICES)
{
const float TwoPI=2.0f*osg::PI;
const float phase = -_time/_period;
osg::Vec3* end = begin+count;
for (osg::Vec3* itr=begin;itr
osg::Vec3 dv(*itr-_origin);
osg::Vec3 local(dv*_xAxis,dv*_yAxis,dv*_zAxis);
local.z() = local.x()*_amplitude*
sinf(TwoPI*(phase+local.x()*_xphase));
(*itr) = _origin +
_xAxis*local.x()+
_yAxis*local.y()+
_zAxis*local.z();
}
}
}
bool _firstCall;
double _startTime, _time, _period, _xphase;
float _amplitude;
osg::Vec3 _origin, _xAxis, _yAxis, _zAxis;
};
Kode ini mendefinisikan panggilan kembali kelas yang Terbuka Scene Grafik yang akan digunakan untuk tessellate aktor. Sekarang, kita perlu mendefinisikan kelas tessellation aktor yang baru. Tambahkan kode berikut ke file TessellationActor.h:
class TessellationActor : public dtCore::Transformable
{
public:
TessellationActor();
virtual ~TessellationActor();
void GeneratePlane();
// Accessors
inline float GetPeriod() { return period; }
inline float GetAmplitude() { return amplitude; }
inline float GetPhase() { return phase; }
inline int GetNumberOfSteps() { return numberOfSteps; }
inline int GetWidth() { return width; }
inline int GetHeight() { return height; }
inline std::string GetTextureFile() { return textureFile; }
// Mutators
inline void SetPeriod(float newPeriod) { period = newPeriod; GeneratePlane(); }
inline void SetAmplitude(float newAmp) { amplitude = newAmp; GeneratePlane(); }
inline void SetPhase(float newPhase) { phase = newPhase; GeneratePlane(); }
inline void SetWidth(int newWidth) { width = newWidth; GeneratePlane(); }
inline void SetHeight(int newHeight) { height = newHeight; GeneratePlane(); }
inline void SetNumberOfSteps(int numSteps) { numberOfSteps = numSteps; GeneratePlane();}
inline void SetTextureFile(const std::string &fileName) { textureFile = fileName; GeneratePlane(); }
private:
osg::Geode *geode;
std::string textureFile;
int width, height, numberOfSteps;
float period, amplitude, phase;
};
Sekarang kita telah menetapkan TessellationActor, kita mungkin melihat beberapa anggota variabel. File tekstur, misalnya, adalah properti sumber daya. Lebar, tinggi, sejumlah langkah di antara setiap segmen pesawat, periode, amplitudo, dan fasa adalah semua sifat pesawat ini tessellating yang dapat diedit di Tingkat Editor. Sekarang, mari kita kepala ke TessellationActor.cpp file dan menentukan fungsi kelas kami. Fungsi GeneratePlane () bertanggung jawab untuk menghasilkan sebuah pesawat tessellation baru setiap kali sebuah properti diedit. Letakkan kode berikut dalam file TessellationActor.cpp:
#include "TessellationActor.h"
#include
#include
#include
#include
#include
#include
#include
#include
TessellationActor::TessellationActor() :
geode(NULL),width(200), height(100),
numberOfSteps(20), period(1.0), amplitude(0.2)
{
phase = 1.0 / width;
GeneratePlane();
}
TessellationActor::~TessellationActor()
{
}
void TessellationActor::GeneratePlane()
{
// Since the actor will only ever have one plane, remove the old one
// if it contains it
if(geode && geode->getDrawable(0))
geode->removeDrawables(0, 1);
// Initialize the data
osg::Geometry *geometry = new osg::Geometry;
osg::Vec3Array *verts = new osg::Vec3Array;
geode = new osg::Geode;
osg::Vec3 origin(0.0f,0.0f,0.0f);
osg::Vec3 xAxis(1.0f,0.0f,0.0f);
osg::Vec3 yAxis(0.0f,0.0f,1.0f);
osg::Vec3 zAxis(0.0f,-1.0f,0.0f);
osg::Vec3 bottom = origin;
osg::Vec3 top = origin;
top.z() += height;
osg::Vec3 dv = xAxis*(width/((float)(numberOfSteps-1)));
osg::Vec2Array* texcoords = new osg::Vec2Array;
osg::Vec2 bottom_texcoord(0.0f,0.0f);
osg::Vec2 top_texcoord(0.0f,1.0f);
osg::Vec2 dv_texcoord(1.0f/(float)(numberOfSteps-1),0.0f);
// Set up the vertices and texture coordinates
for(int i = 0; i < numberOfSteps; i++)
{
verts->push_back(top);
verts->push_back(bottom);
top += dv;
bottom += dv;
texcoords->push_back(top_texcoord);
texcoords->push_back(bottom_texcoord);
top_texcoord += dv_texcoord;
bottom_texcoord += dv_texcoord;
}
// Apply the texture
osg::Image *texture = osgDB::readImageFile(textureFile);
osg::Texture2D *temp = new osg::Texture2D(texture);
temp->setFilter(osg::Texture2D::MIN_FILTER,osg::Texture2D::LINEAR);
temp->setFilter(osg::Texture2D::MAG_FILTER,osg::Texture2D::LINEAR);
osg::StateSet *ss = new osg::StateSet;
ss->setTextureAttributeAndModes(0, temp, osg::StateAttribute::ON);
temp->setUnRefImageDataAfterApply(true);
// Set up the geometry
geode->setStateSet(ss);
geometry->setVertexArray(verts);
geometry->setTexCoordArray(0, texcoords);
geode->addDrawable(geometry);
geometry->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::QUAD_STRIP, 0, verts->size()));
geometry->setUpdateCallback(new
GeometryCallback(origin,xAxis,yAxis,zAxis,period,phase,amplitude));
geometry->setSupportsDisplayList(false);
// Add to the transformable
GetMatrixNode()->addChild(geode);
}
Sekarang kita telah mendefinisikan konstruktor berdasarkan nilai defaultnya, dan kami GeneratePlane fungsi didefinisikan untuk membuat pesawat, dan disebut dari masing-masing fungsi mutator kita sehingga pesawat kami akan dibuat ulang dengan nilai-nilai baru dengan benar.
Sekarang kita memiliki kelas TessellationActor yang telah kita siapakan, saatnya untuk membangun proxy nya aktor kelas. Fungsi utama untuk mengetahui dalam kelas proxy aktor adalah fungsi BuildPropertyMap. Fungsi ini bertanggung jawab untuk menambahkan sifat yang terkait dengan aktor. Fungsi lain yang perlu diperhatikan adalah fungsi CreateActor, yang sebenarnya instantiates aktor bahwa proxy adalah abstrak. Letakkan kode berikut dalam file bernama TessellationActorProxy.h:
#ifndef _TESSELLATION_ACTOR_PROXY_H_
#define _TESSELLATION_ACTOR_PROXY_H_
#include "dtDAL/transformableactorproxy.h"
#include "TessellationActor.h"
class TessellationActorProxy : public dtDAL::TransformableActorProxy
{
public:
void CreateActor() {
SetActor(*new TessellationActor);
}
TessellationActorProxy(void);
virtual ~TessellationActorProxy(void);
void BuildPropertyMap();
void SetTextureFile(const std::string &fileName)
{
TessellationActor *actor = dynamic_cast
if(!actor)
{
printf("Actor initialized incorrectly\n");
return;
}
actor->SetTextureFile(fileName);
}
};
#endif
Perhatikan bahwa kelas TessellationActorProxy mewarisi dari dtDAL:: TransformableActorProxy, cara yang mewarisi kelas TessellationActor dari dtCore:: Transformable. Kami juga memiliki fungsi SetTextureFile, yang bertanggung jawab untuk melacak file tekstur sumber daya yang diterapkan pada aktor. Sekarang, kita gunakan TessellationActorProxy.cpp file dan menentukan fungsi kami. Letakkan kode berikut dalam TessellationActorProxy.cpp:
#include "TessellationActorProxy.h"
#include "dtDAL/enginepropertytypes.h"
#include "dtDAL/datatype.h"
TessellationActorProxy::TessellationActorProxy()
{
}
TessellationActorProxy::~TessellationActorProxy()
{
}
void TessellationActorProxy::BuildPropertyMap()
{
// The property group
const std::string groupName = "PolyGrid";
// Make sure to build the base class properties
TransformableActorProxy::BuildPropertyMap();
// Make sure our actor is valid
TessellationActor *actor = dynamic_cast
if(!actor)
{
printf("Actor was initialized incorrectly\n");
return;
}
// Property for the width of the plane
AddProperty(new dtDAL::IntActorProperty("Width", "Width",
dtDAL::MakeFunctor(*actor, &TessellationActor::SetWidth),
dtDAL::MakeFunctorRet(*actor, &TessellationActor::GetWidth),
"Property for the width of the tessellation plane", groupName));
// Property for the height of the plane
AddProperty(new dtDAL::IntActorProperty("Height", "Height",
dtDAL::MakeFunctor(*actor, &TessellationActor::SetHeight),
dtDAL::MakeFunctorRet(*actor, &TessellationActor::GetHeight),
"Property for the height of the tessellation plane", groupName));
// Property for the number of steps in between each "slice" of the plane
AddProperty(new dtDAL::IntActorProperty("Number of Steps", "Number of Steps",
dtDAL::MakeFunctor(*actor, &TessellationActor::SetNumberOfSteps),
dtDAL::MakeFunctorRet(*actor, &TessellationActor::GetNumberOfSteps),
"Property for the number of steps in between each segment of the tessellation plane",
groupName));
// Property for the period of the tessellation
AddProperty(new dtDAL::FloatActorProperty("Period", "Period",
dtDAL::MakeFunctor(*actor, &TessellationActor::SetPeriod),
dtDAL::MakeFunctorRet(*actor, &TessellationActor::GetPeriod),
"Property for the period of the sine wave", groupName));
// Property for the amplitude of the tessellation
AddProperty(new dtDAL::FloatActorProperty("Amplitude", "Amplitude",
dtDAL::MakeFunctor(*actor, &TessellationActor::SetAmplitude),
dtDAL::MakeFunctorRet(*actor, &TessellationActor::GetAmplitude),
"Property for the amplitude of the sine wave", groupName));
// Property for the phase of the tessellation
AddProperty(new dtDAL::FloatActorProperty("Phase", "Phase",
dtDAL::MakeFunctor(*actor, &TessellationActor::SetPhase),
dtDAL::MakeFunctorRet(*actor, &TessellationActor::GetPhase),
"Property for the phase of the sine wave", groupName));
// Property for the texture file of the plane
// Note that resource properties are a little different that other properties. The editor
// DAL needs to store a reference to the actual proxy due to its internals, so all we do
// is add a function onto the proxy which simply calls the actual actor function.
AddProperty(new dtDAL::ResourceActorProperty(*this,dtDAL::DataType::TEXTURE,"Texture",
"Texture", dtDAL::MakeFunctor(*this, &TessellationActorProxy::SetTextureFile), groupName));
Fungsi BuildPropertyMap bertanggung jawab untuk menambahkan semua properti untuk aktor tessellation. Perhatikan bahwa kita menambahkan properti untuk mewakili masing-masing bagian data bahwa aktor tessellation berisi. Sekarang kami memastikan bahwa proxy kami akan tessellation aktor abstrak kita dengan benar dan bahwa sifat ini akan tersedia untuk perubahan di editor. Perlu diketahui bahwa bila menyesuaikan periode, amplitudo, atau fase bahwa tidak ada perubahan yang terlihat akan berlangsung di editor, karena ini adalah properti runtime. Sekarang kita telah aktor kami, dan proxy aktor mendirikan, saatnya untuk menulis sebuah library sehingga kita dapat mengimpor aktor baru kita ke dalam editor.
* Translate : http://www.delta3d.org/article.php?story=20050720135053455&topic=tutorials
Langganan:
Postingan (Atom)