Thursday 6 May 2010

Delta 3D : Tutorial Membuat Lingkungan Bagian 2

Pada tutorial sebelumnya kita membuat sebuah bidang awan (Cloud Plane). Bidang awan adalah cara yang baik untuk membuat langit yang sederhana dengan cepat. Namun, Delta3D memiliki generator awan yang lebih baik, Kubah Cloud (the Cloud Dome). Sebuah kubah awan pada dasarnya adalah sebuah kubah dengan menerapkan bagian gelap langit. Shader atau bagian gelap adalah fragmen program yang berjalan di GPU. Ini adalah topik yang kompleks dan keluar dari cakupan tutorial ini, namun informasi lebih lanjut tentang OpenGL Shading Language tersedia di opengl.org. Hal penting untuk tutorial ini adalah bahwa shader akan memungkinkan untuk menciptakan langit dan animasi yang akan terlihat lebih realistis.

Membuat Sebuah Kubah Awan

Menciptakan sebuah Cloud Dome sebenarnya cukup sederhana di Delta3D. Kita akan mulai dari source code dari Lingkungan Tutorial (1) dan mengeditnya untuk menggunakan Cloud Dome bukannya Cloud Plane. Function Config dari tutorial sebelumnya yaitu sebagai berikut:

void Config()
{
// Loading a 3D model
// First set the path for the model files
SetDataFilePathList("../../../data/");


 // 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);
  
 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);
  
 // Setting a motion model for the camera
 OrbitMotionModel *orb = new OrbitMotionModel(GetKeyboard(), GetMouse());

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

Sekarang ganti baris:
CloudPlane *cp = new CloudPlane(6,0.5,6,1,.3,0.96,256,1800);

dengan baris:
CloudDome *cd = new CloudDome(6,2,0.7,0.5,0.7,5,5500.f,20);

Ini akan membuat Cloud Dome sebagai pengganti Cloud Plane. Variabel untuk Cloud Dome didefinisikan sebagai berikut:
CloudDome( int   octaves,
           int   frequency,
           float amp,
           float persistence,
           float cutoff,
           float exponent,
           float radius,
           int   segments);

kemudian ganti baris berikut:
env->AddEffect(cp);

dengan baris:
env->AddEffect(cd);

Sekarang membuat Dome Cloud. Jika build dan menjalankannya maka akan menerima pesan kesalahan yaitu missing file frag dan vert.
cloud1.vert
cloud1.frag

File-file ini ada dalam program contoh testClouds dalam Delta3D build. Jika menginstal Delta3D dengan pengaturan standar maka lokasi file tersebut ada di:
C:\Program Files\Delta3D\examples\testClouds

Salin file tersebut ke suatu tempat pada Data File Path List. 
Daftar ini diatur pada baris pertama code di constructor. 
Setelah file-file disalin ke dalam path, maka program dapat dijalankan dan Cloud Dome akan terlihat.


Constructor terakhir akan menjadi seperti:
void Config()
{ 
 // Loading a 3D model
 // First set the path for the model files
 SetDataFilePathList("../../../data/");

 // 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;
 CloudDome *cd = new CloudDome(6,2,0.7,0.5,0.7,5,5500.f,20);  
 env->AddEffect(cd);
 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);
  
 // Setting a motion model for the camera
 OrbitMotionModel *orb = new OrbitMotionModel(GetKeyboard(), GetMouse());

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

sumber : www.delta3d.org/article.php?story=2005010315481862&topic=tutorials

0 comments:

 

About me

My photo
just a simple girl, living in a lonely world -dont stop believing-

Friends