Thursday, August 06, 2009

QuickStart Game 3D dengan Engine 3D TrueVision3D (FINAL)


Mencoba suatu produk/teknologi, bisa sangat memusingkan kalau tidak tau celah2 kegagalannya. Seperti halnya dengan produk TrueVision3D ini. Kalau Anda hanya mendownload paket TV3d 6.5 (versi terakhir saat artikel ini ditulis), maka kemungkinan sekali aplikasi tidak berjalan. Karena Anda harus juga mendownload DirectX SDK yang sesuai (terkini, meski saya agak ragu kalau aplikasi bisa jalan jika yang diinstal adalah versi DirectX terbaru). Nah, jadi, jika Anda sudah mendownload paket TrueVision3D ini, jangan lupa mendownload juga DirectX SDK Versi November 2008 yang juga disertakan pada situs tersebut, hanya agak tersembunyi :p
Nah, namun untuk segera membuat aplikasi dengan TV3D bisa mudah dan cepat sekali. Silahkan gunakan menu template pada start menu TV3D, dan pilih bahasa yang Anda pilih : C#, C++, Delphi, VB 6 dan VB.NET.



Aplikasi test yang saya buat menggunakan VB.NET. Dari aplikasi template tersebut, Anda dapatkan screenshot ini:


Layar blank, yang menyimpan misteri :)

Anda segera bisa modifikasi sehingga menghasilkan screenshot yang sudah saya sertakan.

Btw, sampai titik ini, saya belum bisa menganimasikan mesh yang di load. Wah, untuk itu, saya kudu wajib harus musti menguasai salah satu aplikasi Modeler 3D : 3DS Max, Maya atau MilkShape3D. Poser tidak bisa saya pergunakan, karena plugin exporter TV3D terbatas untuk aplikasi tersebut.

Sedikit preview tentang kode yang saya ubah dari template VB.NET tersebut adalah fungsi-fungsi baru berikut :


...
LoadTextureFile()
CreateWall()
CreateMesh()
SetCamera()
CheckInput()
...

Berikut cuplikkan fungsi CreateMesh.
Public Sub CreateMesh()
'person doing sholat
meshTable = Scene.CreateMeshBuilder("table")
meshTable.LoadTVM("meshes\sholat.tvm", True, True)
meshTable.SetPosition(80.0F, 0.0F, 100.0F)
meshTable.SetScale(300, 300, 300)
'meshTable.RotateY(25, True)
meshTable.SetTexture(Globals.GetTex("cinder"), -1)
End Sub

Satu fungsi yang kurang adalah LoadActor: nah, disinilah berbagai perihal tentang mesh yang teranimasi (tepatnya Actor) harus saya definisikan. Sudah ada gambaran, pun sudah melakukan uji coba di ModelViewer bawaan TV3D, hanya saya belum saya mulai di aplikasi ini. Secepatnyalah. Dan juga segera saya sharing.

Oya, satu fungsi yang penting adalah masalah input. Berikut saya paste, kode yang akan menggerakkan kamera dan satu2nya Mesh pada Scene tersebut:


Public Sub CheckInput()

If Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_LEFTARROW) Then
' _rotateGlasses = false; // stop the glasses
If Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_LEFTSHIFT) Then
meshTable.RotateY(-5)
Else
meshTable.MoveRelative(0, 0, -5)
End If

ElseIf Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_RIGHTARROW) Then
If Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_LEFTSHIFT) Then
meshTable.RotateY(5)
Else
meshTable.MoveRelative(0, 0, 5)
End If
ElseIf Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_UPARROW) Then
meshTable.MoveRelative(0, 5, 0)
ElseIf Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_DOWNARROW) Then
meshTable.MoveRelative(0, -5, 0)
End If

Dim increment As Integer
If Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_LEFTCONTROL) Then
Dim x As TV_3DVECTOR = TV.GetCamera.GetLookAt()
If Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_LEFTSHIFT) Then increment = 10 Else increment = 1
If Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_UPARROW) Then
TV.GetCamera.SetLookAt(x.x, x.y + increment, x.z)
ElseIf Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_DOWNARROW) Then
TV.GetCamera.SetLookAt(x.x, x.y - increment, x.z)
ElseIf Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_LEFTARROW) Then
TV.GetCamera.SetLookAt(x.x + increment, x.y, x.z)
ElseIf Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_RIGHTARROW) Then
TV.GetCamera.SetLookAt(x.x - increment, x.y, x.z)
End If

End If

End Sub


Nah, konsep dasar setiap Game, adalah merubah status dunia game berdasarkan input, dan menggambarkan kembali dunia yang telah berubah statusnya. Maka, efek interaktivitas dan pemain sebagai pengontrol dunia Game tercipta. Dan Anda pun terjebak ... dalam dunia Game 3D!

Semoga bermanfaat!

NB :

  • Temen saya, Aji Pamungkas yang-ga-terlalu-baik-karena-saya-ga-diundang-ke -pernikahannya-padahal-jaraknya-ga-sampai-4km, sarankan menggunakan JMonkeyEngine. Tapi berbasis Java. Belum bisa dipakai untuk kasus ini Ji!. hehe.
  • Juga tentang Away3D. Wah, game 3D di Flash pasti sangat komersial!
  • Perbandingan dengan Ogre 3D sebelumnya? saya bisa lebih cepat QuickStart di TrueVision3D. Juga, ... ya, jangan dibandingkan ding : wong Ogre fokus ke Rendering, sedangkan TV3D game engine. Ya bedalah. Fisik juga lengkap lho si TV3D : Anda bs segera gunakan NewtonPhysics yang sudah built-in
  • Hm... bisa segera dirampungkan ini.

No comments: