1. Kata Pengantar:
Cara menggambar garis pada Delphi pada dasarnya sama dengan cara menggambar titik. Perbedaannya terletak pada parameter glBegin(). Kode kerangka gambar dapat merujuk ke kode inisialisasi gambar OpenGL2d di bawah Delphi, alamatnya adalah //www.VeVB.COm/article/52141.htm. Bagian yang dimodifikasi adalah isi dari fungsi Draw.
2. Langkah-langkah menggambar garis:
GL_LINES: Perlakukan setiap simpul sebagai ruas garis independen. Sebanyak n ruas garis ditentukan antara simpul 2n-1 dan 2n, dan total N/2 ruas garis tergambar.
GL_LINE_STRIP: Gambarlah himpunan ruas garis yang terhubung secara berurutan dari simpul pertama sampai simpul terakhir. Simpul n dan n+1 mendefinisikan ruas garis n. Sebanyak n-1 ruas garis digambar.
GL_LINE_LOOP: Gambarlah himpunan ruas garis yang terhubung secara berurutan dari simpul pertama ke simpul terakhir, kemudian simpul terakhir dihubungkan ke simpul pertama. Simpul ke-n dan n+1 menentukan ruas garis n, dan berjumlah n garis segmen digambar.
Fungsi berikut dapat digunakan untuk menggambar garis:
glLineWidth() mengatur lebar garis
glShadeModel() mengatur mode transisi warna
glColor3f() mengatur warna garis
prosedur TForm1.Draw;mulai
// Hapus buffernya
glClear(GL_COLOR_BUFFER_BIT atau GL_DEPTH_BUFFER_BIT);
// ----------- GL_LINES -----------
//Tetapkan lebar garis
glLebarGaris(5);
// Warna gradien antara dua titik
glShadeModel(GL_SMOOTH);
glBegin(GL_LINES); // menggambar garis
//Mengatur warna garis awal
glColor3f(1, 0, 0);
// menggambar titik awal
glVertex2f(50, 50);
//Mengatur warna garis titik akhir
glColor3f(0, 0, 1);
//Titik akhir lukisan
glVertex2f(200, 200);
akhir;
// Warna yang sama antara dua titik
glShadeModel(GL_FLAT);
glMulai(GL_LINES);
glColor3f(0, 1, 0);
glVertex2f(200, 50);
glColor3f(1, 1, 0);
glVertex2f(50, 200);
akhir;
// ----------- GL_LINE_LOOP -----------
// Tiga titik menutup loop untuk membentuk segitiga glShadeModel(GL_SMOOTH);
glLebarGaris(1);
glMulai(GL_LINE_LOOP);
glColor3f(0, 0, 1);
glVertex2f(250, 50);
glVertex2f(250, 200);
glVertex2f(280, 150);
akhir;
// ----------- GL_LINE_STRIP -----------
// Polyline multi-titik glShadeModel(GL_SMOOTH);
glLebarGaris(1);
glMulai(GL_LINE_STRIP);
glColor3f(1, 0, 255);
glVertex2f(350, 50);
glVertex2f(400, 200);
glVertex2f(480, 150);
glVertex2f(490, 60);
akhir;
SwapBuffers(FDC); //Tukar konten buffer ganda, yang akan menyalin grafik yang baru saja digambar ke layar.
akhir;
Anda dapat melihat gradien warna pada garis X pertama. OpenGL memiliki gaya ini secara default. OpenGL menyediakan fungsi glShadeModel untuk memutuskan bagaimana menangani situasi warna yang berbeda ini.
glShadeModel(GL_SMOOTH); // Mode halus, yang juga merupakan metode pemrosesan default opengl, mencapai efek gradien warna glShadeModel(GL_FLAT); // Mode monokrom, warna segmen garis didasarkan pada warna tertentu simpul, yang ditentukan oleh implementasi spesifik. Untuk menghindari ketidakpastian, coba gunakan warna yang sama pada seluruh poligon
Setelah pengujian, ditemukan bahwa efek gradien tidak valid pada gaya GL_LINE_LOOP dan GL_LINE_STRIP! Alasan spesifiknya perlu dipastikan lebih lanjut.
Selain itu, OpenGL menyediakan fungsi anti-aliasing, fungsinya
glEnable(GL_LINE_SMOOTH); //Aktifkan glHint(GL_LINE_SMOOTH,GL_NICEST); glDisable(GL_LINE_SMOOTH);
Setelah menggunakannya, saya menemukan bahwa efek anti-aliasing tidak terlihat jelas. Masih harus dipelajari lebih lanjut.
Klik di sini untuk mengunduh kode lengkapnya