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 AwanMenciptakan 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/");
{
// 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:
Post a Comment