Arsip: [Tutorial] ng-openGL di delphi

 
user image
more 18 years ago

pebbie

kebetulan lagi ada proyek yang pake openGL. gw mo share pengalaman pake openGL di delphi. hasil akhir ====== hasil akhir dari tutorial I ini adalah membuat window openGL pada panel form dan menggambar kotak. [list:a47df79ebe]langkah 1[/list:u:a47df79ebe] Mari buat aplikasi baru (Menu File > New > Application). akan tampil form kosong, tambahkan Panel ke form lalu atur ukurannya menjadi Width:640 Height:640. [list:a47df79ebe]langkah 2[/list:u:a47df79ebe] ganti ke code view (F12). tambahkan openGL pada uses clause
uses Windows, Messages,...., ... ,openGL ;
[list:a47df79ebe]langkah 3[/list:u:a47df79ebe] tambahkan variabel dan prosedur berikut ini pada deklarasi form bagian private (boleh juga di protected)
{ Private declarations } FDC : HDC; FRC : HGLRC; procedure IdleLoop(Sender : TObject; Var Done : boolean);
tekan Shift+Control+C untuk membuat secara otomatis prosedur IdleLoop di bagian implementation (akan muncul kode berikut setelah implementation)
procedure TForm1.IdleLoop(Sender:TObject; Var Done: boolean); begin end;
biarkan prosedur ini kosong, akan kita isi nanti. [list:a47df79ebe]langkah 4[/list:u:a47df79ebe] tambahkan event Handler OnCreate pada form (klik dua kali pada form atau klik dua kali pada window event OnCreate)
procedure TForm1.FormCreate(Sender : TObject); var pfd : TPIXELFORMATDESCRIPTOR; pixelformat : integer; begin { TAHAP I : Buat Window OpenGL } FDC := GetDC( Panel1.Handle ); //window openGL akan ditampilkan di panel FillChar(pfd, sizeof(pfd), 0); pfd.nSize := sizeof(pfd); pfd.nVersion := 1; pfd.dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER; pfd.iPixelType := PFD_TYPE_RGBA; pfd.cColorBits := 16; {$WARNINGS OFF} //biar nggak muncul warning karena penggunaan operator '@' pf := ChoosePixelFormat(FDC, @pfd); SetPixelFormat(FDC, pf, @pfd); {$WARNINGS ON} //kembalikan ke normal FRC := wglCreateContext(FDC); wglMakeCurrent(FDC, FRC); { TAHAP II : Inisialisasi variabel openGL } glSetViewport( 0, 0, Panel1.Width, Panel1.Height ); // glClearColor( 0, 0, 0, 1.0 ); // r:0 g:0 b:0 = hitam glMatrixMode( GL_PROJECTION ); glLoadIdentity; gluPerspective( 45, Panel1.Width/Panel1.Height, 1, 500);//FoV, Aspect Ratio, Near Clip, Far Clip glMatrixMode( GL_MODELVIEW ); glLoadIdentity; { Set Kamera } gluLookAt( 0, 0, -4, 0, 0, 0, 0, 1, 0 );// posisi.x, posisi.y, posisi.z, lookat.x, lookat.y, lookat.z, up.x, up.y, up.z Application.OnIdle := IdleLoop; end;
[list:a47df79ebe]langkah 5[/list:u:a47df79ebe] sekarang waktunya mengisi body prosedur IdleLoop
procedure TForm1.IdleLoop(Sender : TObject; Var Done : Boolean); begin glClear( GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT ); glPushMatrix; glColor( 0, 0.5, 0, 1); //warna ijo glBegin(GL_QUADS); //gambar kotak (warna ijo) glVertex3f( -0.5, -0.5, -0,5 ); glVertex3f( 0.5, -0.5, -0,5 ); glVertex3f( 0.5, 0.5, -0,5 ); glVertex3f( -0.5, 0.5, -0,5 ); glEnd; glPopMatrix; glFlush; SwapBuffers(DC); //update hasil penggambaran ke layar end;
OK, tutorial nya sekian dulu, dah magrib nih. nanti dilanjutin lagi ke tutorial berikutnya.
user image
more 18 years ago

DelphiExpert

Hehe ada cara lebih gampang ngga' utk nge-render object/gambar?
user image
more 18 years ago

pebbie

hmm, klo menurut gw. openGL dah lumayan gampang, karena tinggal ngirimin data objek yang mau digambar sama data bagaimana penggambarannya. datanya bisa dikelola sendiri. :D maksudnya lebih gampang gimana nih om? :D
user image
more 18 years ago

deLogic

@pebbie: mungkin akan lebih bermanfaat jk dikirim sbg Artikel :)
user image
more 18 years ago

pebbie

nanti dobel dong?emang klo artikel bedanya gimana ya om? gw pengennya sih marathon.. di satu thread, isinya tutorial bertahap.. :D mulai dari gambar sederhana, transformasi, pemodelan objek, penggunaan kamera, struktur data spasial sampe akhirnya aplikasi 3d bwt studi kasus (CAD, GIS, ato miniGame). tar kalo udah mateng keknya baru deh dikompilasi jadi artikel. :D
user image
more 17 years ago

pebbie

artikel untuk load dan menampilkan model 3d dalam format quake 2 (md2) ada di pebbie.wordpress.com
more ...
  • Pages:
  • 1
Share to

AI Forward

🚀 We're thrilled to partner with Alibaba Cloud for "AI Forward - Alibaba Cloud Global Developer Summit 2025" in Jakarta! Join us and explore the future of AI. Register now: https://int.alibabacloud.com/m/1000400772/
#AlibabaCloud #DeveloperSummit #Jakarta #AIFORWARD

Random Topic

Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com