---- Saat mengembangkan program grafis, khususnya program grafis tiga dimensi, saya memilih DelphiOpenGL karena menurut saya OpenGL tidak serumit DirectX. Dari segi feeling, Delphi tidak serumit C++ dan lebih user-friendly. jadi saya memilih Delphi+ yang berfungsi. Dalam prosesnya, saya (pasti) menemui beberapa masalah, dan saya ingin menyampaikan harapan saya agar saya dapat berkomunikasi dengan teman-teman saya.
---- Yang pertama adalah inisialisasi. Selama inisialisasi, beberapa tugas perlu dilakukan: ① Membuat tabel deskripsi perangkat (Konteks Perangkat). (Catatan: Mengenai DC, terjemahan berbagai materi berbeda, seperti lingkungan perangkat, tabel deskripsi perangkat, konteks perangkat, dll., tetapi tampaknya kurang tepat. Alangkah baiknya jika ada penerjemah seperti Li Shanlan. Situasi RC di bawah ini sama )②Atur format piksel yang sesuai (PIXELFORMAT DESCripTOR). ③Buat tabel deskripsi rendering (Rendering Context). Ada beberapa cara untuk mendapatkan atau membuat tabel konteks perangkat di Delphi. Cara paling sederhana adalah dengan langsung memperoleh atribut pegangan (Handle) dari objek kanvas (TCanvas), seperti:
DC: HDC; DC: = Canvas.Handle; Anda juga dapat menggunakan fungsi API GetDC untuk mendapatkan tabel deskripsi perangkat. Seperti: DC:=GetDC(Handle, DC);
---- Anda juga dapat menggunakan fungsi CreateCompatibleDC atau BeginPaint..EndPaint (Anda perlu memperhatikan perbedaan di antara keduanya) untuk mendapatkan tabel deskripsi perangkat. Namun, setelah tabel deskripsi perangkat habis, Anda harus ingat untuk melepaskan atau menghapusnya untuk mengosongkan sumber daya. Setelah Anda memiliki akses ke tabel konteks perangkat, Anda dapat mengatur format piksel yang sesuai. Format piksel adalah jenis rekaman dengan beberapa bidang atau bidang yang jarang digunakan (setidaknya untuk saat ini). Setelah deskripsi format piksel selesai, panggil fungsi ChoosePixelFormat dan SetPixelFormat untuk mencocokkan dan mengaturnya dengan tabel deskripsi perangkat. Seperti kode berikut:
fungsi SetupPixelFormat(var dc:HDC):Boolean;var ppfd:PPIXELFORMATDESCRIPTOR; npixelformat:Integer;mulai Baru(ppfd^.nUkuran:=sizeof(PIXELFORMATDESCRIPTOR); =PFD_DRAW_TO_WINDOW atau PFD_SUPPORT_OPENGL atau PFD_DOUBLEBUFFER; ppfd^.dwLayerMask:=PFD_MAIN_PLANE; ppfd^.iPixelType:=PFD_TYPE_COLORINDEX; ppfd^.cStencilBits:=0; npixelformat:=ChoosePixelFormat(dc, ppfd); jika (nPixelformat=0) maka mulai MessageBox(NULL, 'choosePixelFormat gagal', 'Error', MB_OK); ; jika (SetPixelFormat(dc, npixelformat, ppfd)= FALSE) lalu mulai MessageBox(NULL, 'SetPixelFormat failed', 'Error', MB_OK); Anda juga dapat mengaturnya sebagai berikut: var pfd: PixelFormatDescriptor; nPixelFormat : Integer;mulai FillChar(pfd,SizeOf(pfd),0); dengan pfd mulai nSize:=sizeof(pfd); cDepthBits:=32; iLayerType:=Byte(PFD_MAIN_PLANE); akhir; nPixelFormat:=PilihPixelFormat(DC,@pfd); Gunakan DescriptionPixelFormat untuk memeriksa apakah format piksel diatur dengan benar DescriptionPixelFormat(DC,nPixelFormat,SizeOf(pfd),@pfd); if (pfd.dwFlags dan PFD_NEED_PALETTE) < > 0 maka SetupPalette(DC,pfd);//SetupPalette adalah a fungsi khusus }akhir;
----Setelah pekerjaan di atas selesai, yang terbaik adalah menjalankannya kembali dan memeriksa nilai nPixelFormat. Biasanya, nilai ini harus lebih besar dari 0, jika tidak maka akan ada masalah. Untuk kode yang sama, saya bisa mendapatkan nilai yang benar lebih besar dari 0 di mesin NT tetapi bukan nilai yang benar di mesin PWIN97 atau 98, namun tidak akan ada masalah saat kompilasi, dan setelah dikompilasi di NT, bisa juga digunakan pada mesin PWIN97. Jalankan dengan benar. Sekarang saatnya membuat konteks bayangan (RC). Panggil fungsi wglCreateContext dan wglMakeCurrent, seperti yang ditunjukkan dalam contoh berikut:
RC: HGLRC; RC:=wglCreateContext(DC); wglMakeCurrent(DC,RC); wglMakeCurrent(0,0); jika RC< >null maka wglDeleteContext(RC); jika ghDC< >null maka ReleaseDC(Handle,DC);
---- Kode berikut diadaptasi dari contoh OpenGL di C++Builder 4. Ukuran program yang dikompilasi adalah sekitar 300K, sedangkan ukuran program yang dikompilasi di bawah C++Builder 4 adalah 384K.
---- < a href="061403-05.zip ">Kode program Zip 3KB
---- Fungsi OpenGL dan format piksel dalam program dijelaskan secara detail di MSHelp di Delphi.