1. คำนำ:
วิธีการวาดเส้นใน Delphi นั้นโดยพื้นฐานแล้วเหมือนกับวิธีการวาดจุด ความแตกต่างอยู่ที่พารามิเตอร์ของ glBegin() รหัสเฟรมเวิร์กการวาดสามารถอ้างถึงรหัสในการเริ่มต้นการวาด OpenGL2d ภายใต้ Delphi ที่อยู่คือ //www.VeVB.COm/article/52141.htm ส่วนที่แก้ไขคือเนื้อหาของฟังก์ชัน Draw
2. ขั้นตอนการวาดเส้น:
GL_LINES: ถือว่าแต่ละจุดยอดเป็นส่วนหนึ่งของเส้นตรงที่เป็นอิสระ มีการกำหนดส่วนของเส้นทั้งหมด n เส้นระหว่างจุดยอด 2n-1 และ 2n และมีการวาดส่วนของเส้นทั้งหมด N/2
GL_LINE_STRIP: วาดชุดส่วนของเส้นตรงที่เชื่อมต่อกันตามลำดับจากจุดยอดแรกถึงจุดยอดสุดท้าย จุดยอดที่ n และ n+1 กำหนดส่วนของเส้นตรง n จำนวนเส้นทั้งหมด n-1 จะถูกวาด
GL_LINE_LOOP: วาดชุดส่วนของเส้นตรงที่เชื่อมต่อตามลำดับจากจุดยอดแรกไปยังจุดยอดสุดท้าย จากนั้นจุดยอดสุดท้ายเชื่อมต่อกับจุดยอดแรก จุดยอดที่ n และ n+1 กำหนดส่วนของเส้นตรง n และผลรวมของเส้น n ส่วนต่างๆ ถูกวาดออกมา
ฟังก์ชั่นต่อไปนี้อาจใช้ในการวาดเส้น:
glLineWidth() กำหนดความกว้างของเส้น
glShadeModel() ตั้งค่าโหมดการเปลี่ยนสี
glColor3f() กำหนดสีของเส้น
ขั้นตอน TForm1.Draw;เริ่ม
// ล้างบัฟเฟอร์
glClear(GL_COLOR_BUFFER_BIT หรือ GL_DEPTH_BUFFER_BIT);
// ----------- GL_LINES -----------
//กำหนดความกว้างของบรรทัด
glLineWidth(5);
// การไล่ระดับสีระหว่างจุดสองจุด
glShadeModel(GL_SMOOTH);
glBegin(GL_LINES); // วาดเส้น
//กำหนดสีของเส้นเริ่มต้น
glColor3f(1, 0, 0);
// วาดจุดเริ่มต้น
glVertex2f(50, 50);
//กำหนดสีของเส้นจุดสิ้นสุด
glColor3f(0, 0, 1);
//จุดสิ้นสุดของการวาดภาพ
glVertex2f(200, 200);
glend;
// สีเดียวกันระหว่างจุดสองจุด
glShadeModel(GL_FLAT);
glBegin(GL_LINES);
glColor3f(0, 1, 0);
glVertex2f(200, 50);
glColor3f(1, 1, 0);
glVertex2f(50, 200);
glend;
// ----------- GL_LINE_LOOP -----------
// สามจุดปิดลูปเพื่อสร้างสามเหลี่ยม glShadeModel(GL_SMOOTH); ไม่ทำงาน
glLineWidth(1);
glBegin(GL_LINE_LOOP);
glColor3f(0, 0, 1);
glVertex2f(250, 50);
glVertex2f(250, 200);
glVertex2f(280, 150);
glend;
// ----------- GL_LINE_STRIP -----------
// glShadeModel แบบหลายจุด (GL_SMOOTH);
glLineWidth(1);
glBegin(GL_LINE_STRIP);
glColor3f(1, 0, 255);
glVertex2f(350, 50);
glVertex2f(400, 200);
glVertex2f(480, 150);
glVertex2f(490, 60);
glend;
SwapBuffers(FDC); //สลับเนื้อหาของบัฟเฟอร์คู่ ซึ่งจะคัดลอกกราฟิกที่เพิ่งวาดไปที่หน้าจอ
จบ;
คุณสามารถดูการไล่ระดับสีของเส้น X แรกได้ OpenGL มีสไตล์นี้ตามค่าเริ่มต้น OpenGL มีฟังก์ชัน glShadeModel เพื่อตัดสินใจว่าจะจัดการกับสถานการณ์สีที่แตกต่างกันนี้อย่างไร
glShadeModel(GL_SMOOTH); // โหมด Smooth ซึ่งเป็นวิธีการประมวลผลเริ่มต้นของ opengl ได้รับเอฟเฟกต์ของการไล่ระดับสี glShadeModel(GL_FLAT); // โหมดขาวดำ สีของส่วนของเส้นจะขึ้นอยู่กับสีของบางอย่าง จุดสุดยอดซึ่งถูกกำหนดโดยการใช้งานเฉพาะ เพื่อหลีกเลี่ยงความไม่แน่นอน ให้ลองใช้สีเดียวกันทั่วทั้งรูปหลายเหลี่ยม
หลังจากการทดสอบ พบว่าเอฟเฟกต์การไล่ระดับสีไม่ถูกต้องภายใต้สไตล์ GL_LINE_LOOP และ GL_LINE_STRIP! จำเป็นต้องตรวจสอบเหตุผลเฉพาะเพิ่มเติม
นอกจากนี้ OpenGL ยังมีฟังก์ชันต่อต้านนามแฝงอีกด้วย
glEnable(GL_LINE_SMOOTH); //เปิดใช้งาน glHint(GL_LINE_SMOOTH,GL_NICEST); //ปิด
หลังจากใช้แล้ว ฉันพบว่าผลการลดรอยหยักไม่ชัดเจน ยังคงต้องศึกษาเพิ่มเติม
คลิกที่นี่เพื่อดาวน์โหลดรหัสที่สมบูรณ์