Sunday, 2024-04-28, 1:51 PM
Welcome Guest

Tikus Neutron

Site menu
Section categories
Report [10]
Tugas Universitas
Our poll
Rate my site
Total of answers: 7
Statistics

Total online: 1
Guests: 1
Users: 0
Login form
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);

env->AddEffect(cp);
env->SetDateTime(2004, 11, 30, 15, 1, 1);

// Load the model files

// 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 :


env->SetFogEnable(true);
env->SetFogMode(dtCore::Environment::EXP2);
env->SetVisibility(5000.f);
env->SetFogNear(1000.f)

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

env->AddEffect(sky);
env->SetFogEnable(true);
env->SetFogMode(dtCore::Environment::EXP2);
env->SetVisibility(5000.f);
env->SetFogNear(1000.f);
env->AddEffect(cp);
env->SetDateTime(2004, 11, 30, 15, 1, 1);

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

orb->SetTarget(GetCamera());
};


Category: Report | Views: 1329 | Added by: bl4ckstar | Rating: 0.0/0
Total comments: 2
2 lbxbjcuc  
0
[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.

1 Dyennydapeusa  
0
apa yang saya cari, terima kasih

Name *:
Email *:
Code *:
Search
Calendar
«  May 2010  »
SuMoTuWeThFrSa
      1
2345678
9101112131415
16171819202122
23242526272829
3031
Entries archive
Site friends