Main » 2010 » May » 10 » Creating Fog Effects in Delta3D
10:02 AM
Creating Fog Effects in Delta3D
Fog alias kabut sebenarnya efek yang sangat diperlukan, terutama dalam situasi tertentu agar menimbulkan suatu kesan yang diinginkan. Namun dalam pembuatannya kita harus memperhatikan hal – hal tertentu. Menurut pengalaman pengalaman saya waktu membuat fog pada aplikasi Ogre3d, hasilnya justru membuat efek particle yang saya buat menjadi kotak – kotak alias spritenya jadi keliatan.
Baru – baru ini saya sadar bahwa shader lah pelakunya. Maka kali ini saya akan menjelaskan membuat fog pada Delta3D tanpa shader. Karena environment cloud dome menggunakan shader dan belum tentu juga jalan di semua sistem, maka saya akan mempergunakan cloud plane.
Untuk membuat environment cloud plane dimana tidak akan saya jelaskan..hehe, bisa dilihat pada kode di bawah ini :
void Config() { // Loading a 3D model // First set the path for the model files SetDataFilePathList("../../../data/");
// NOTE: You do not need to call delete on these new // Instantiate the object related to the model InfiniteTerrain *mTerrain = new InfiniteTerrain; mTerrain->SetHorizontalScale(0.01f); mTerrain->SetVerticalScale(25.f); mTerrain->Regenerate();
// NOTE: You do not need to call delete on these new Environment *env = new Environment; CloudPlane *cp = new CloudPlane(6, 0.5, 6, 1, .3, 0.96, 256, 1800);
// Adding the object to the scene as a Drawable object GetScene()->AddDrawable(mTerrain); GetScene()->AddDrawable(env);
// Adjusting the Camera position // Instantiating a transform object to store the camera // position and attitude Transform camPos;
//coordinates are x y z camPos.SetLookAt( 0.f, -100.f, 200.f, //position 0.f, 0.f, 0.f, //lookAt 0.f, 0.f, 1.f); //up Vector
GetCamera()->SetTransform(&camPos);
// NOTE: You do not need to call delete on these new // Setting a motion model for the camera OrbitMotionModel *orb = new OrbitMotionModel(GetKeyboard(), GetMouse());
orb->SetTarget(GetCamera()); };
Next, untuk membuat atmosphere dari foggy day alias hari yang berkabut, yang kita butuhkan adalah sebuah horizon. To set this up, add kode di bawah ini setelah kode untuk membuat environment.
SkyDome *sky = new SkyDome(); env->AddEffect(sky);
Berikutnya baru kita add fog ke dalam scene dengan kode berikut :
Okeh..untuk baris pertama dipakai untuk meng-enablekan fog. Satu hal yang perlu diperhatikan bahwa pada Delta3D sudah disediakan instant kode layaknya instant food yang bisa langsung dipergunakan. Jadi dalam hal ini yang kita pergunakan adalah fasilitas Delta3D untuk membuat efek fog. Baris berikutnya adalah menentuka tipe fog yang dipergunakan : LINEAR, EXP, EXP2, and ADV. Tiga yang pertama merupakan standar OpenGL cloud generator, sedangkan yang terakhir adalah advance option. Tipe ini menggunakan shader untuk menghasilkan fog. So, we stay away from it alias jauh – jauh deh dari yang namanya shader. So, yang kita pergunakan adalah EXP2. Why? Karena EXP2 menggunakan exponential fog generator (kata si mbah google). Saya mah nurut aja sama yang lebih tua..hehe..
Next.. set visibility untuk mengatur seberapa jauh kabut menyelimuti scene, jadi semakin besar nilainya scene akan semakin tertutup kabut. Sedangkan set fog near digunakan untuk mengatur jarak pandang kamera.
Berikutnya kita ganti code terrain di dalam scene, pertama cari kode di bawah ini :
GetScene->AddDrawable(mTerrain);
Terus ganti dengan kode ini :
env->AddChild(mTerrain);
Kode ini akan memberikan terrain ke scene, sebenarnya kode sebelumnya juga sama, bedanya jika kita mempergunakan kode ini, terrain akan ikut terpengaruh oleh efek fog.
Sekarang fog sudah jadi, tetapi masih ada yang kurang. Sebagai tambahan yaitu posisi kamera, karena ada pepatah mengatakan "posisi menentukan prestasi” (ada gak sih?? Mungkin berlaku klo lagi ujian..hehe). However, agar kamera menunjukkan the best view, mari kita modifikasi posisi kamera. Pertama cari kode seperti di bawah ini :
Transform camPos; // coordinates are x y z camPos.SetLookAt( 0.f, -100.f, 200.f, //position 0.f, 0.f, 0.f, //lookAt 0.f, 0.f, 1.f); //up Vector GetCamera()->SetTransform(&camPos);
Terus ganti dengan kode ini :
Transform trans = Transform( 0.0f, 0.0f, mTerrain->GetVerticalScale() + 15.0f );
GetCamera()->SetTransform(&trans);
Hasil akhir kodenya akan seperti di bawah ini :
void Config() { // Loading a 3D model // First set the path for the model files SetDataFilePathList("../../../data/");
// NOTE: You do not need to call delete on these new // Instantiate the object related to the model InfiniteTerrain *mTerrain = new InfiniteTerrain; mTerrain->SetHorizontalScale(0.01f); mTerrain->SetVerticalScale(25.f); mTerrain->Regenerate();
Environment *env = new Environment; CloudPlane *cp = new CloudPlane (6,0.5,6,1,.3,0.96,256,1800); SkyDome *sky = new SkyDome();
// Adding the object to the scene as a Drawable object env->AddChild(mTerrain); GetScene()->AddDrawable(env);
// Adjusting the Camera position // Instantiating a transform object to store the camera position // and attitude Transform trans = Transform(0.0f, 0.0f, mTerrain->GetVerticalScale() + 15.0f);
GetCamera()->SetTransform(&trans);
// NOTE: You do not need to call delete on these new // Setting a motion model for the camera OrbitMotionModel *orb = new OrbitMotionModel(GetKeyboard(), GetMouse());
[url=http://www.swarovskisales.com/#85220]swarovski sale in canada [/url] are designed with various styles and designs, how can i use swarovski elements to satisfy different requirements of global customers. These swarovski rings low price will definitely leave you a memorable impression for its stylish and unique design. [url=http://www.swarovskisales.com/]swarovski sale june 2012 [/url] offers the discount with top quality. swarovski crystal quotes sale. 70% OFF.