我有一個問題,當頂點的某些部分沒有被opengl讀取時,我該怎么辦?我的意思是當我運行代碼時,它沒有遵循我在方格紙上所做的坐標網格,即使在我洗掉了那個頂點之后,它仍然顯示相同的輸出。我想做楓葉。
我想通過降低該特定頂點的 y 值來使用直線制作某種曲線,但是當我運行代碼時,它并沒有將線設定到我已經設定的坐標,而是跳過了我設定的那個頂點并轉到其他頂點并創建一條直線。
假設,我為頂點 A(-0.44, 0.16) B(-0.46, 0.16) C(-0.52, 0.18) D(-0.54, 0.24) 設定,而不是從 A 到 B 到 C,它跳過了 B 和C,然后去了 D。
#include <windows.h>
#include <gl/glut.h>
void display() {
glClearColor(0.3, 0.1, 0.1, 0.2);
glClear(GL_COLOR_BUFFER_BIT);
//glTranslatef(0.5, 0, 0);
//glScalef(0.5, 0.5, 0);
//glRotatef(0, 0, 0, 0);
//Unifolié also known as Maple Leaf
glBegin(GL_POLYGON);
glColor3f(1, 0, 0);
glVertex2f(0.00, 0.00);
glVertex2f(0.00, 0.90);
glVertex2f(-0.08, 0.70);
glVertex2f(-0.12, 0.66);
glVertex2f(-0.16, 0.66);
glVertex2f(-0.20, 0.68);
glVertex2f(-0.24, 0.74);
glVertex2f(-0.22, 0.64);
glVertex2f(-0.22, 0.62);
glVertex2f(-0.24, 0.56);
glVertex2f(-0.26, 0.54);
glVertex2f(-0.30, 0.54);
glVertex2f(-0.34, 0.56);
glVertex2f(-0.36, 0.60);
glVertex2f(-0.36, 0.56);
glVertex2f(-0.38, 0.54);
glVertex2f(-0.40, 0.54);
glVertex2f(-0.42, 0.54);
glVertex2f(-0.56, 0.60);
glVertex2f(-0.52, 0.54);
glVertex2f(-0.50, 0.50);
glVertex2f(-0.48, 0.44);
glVertex2f(-0.48, 0.42);
glVertex2f(-0.50, 0.38);
glVertex2f(-0.54, 0.34);
glVertex2f(-0.48, 0.32);
glVertex2f(-0.44, 0.28);
glVertex2f(-0.42, 0.22);
glVertex2f(-0.42, 0.20);
glVertex2f(-0.44, 0.16);
glVertex2f(-0.46, 0.16); //this 1st
glVertex2f(-0.52, 0.18);
glVertex2f(-0.54, 0.24);
glVertex2f(-0.54, 0.20);
glVertex2f(-0.56, 0.16);
glVertex2f(-0.60, 0.14);
glVertex2f(-0.62, 0.14);
glVertex2f(-0.70, 0.16);
glVertex2f(-0.76, 0.20);
glVertex2f(-0.78, 0.24);
glVertex2f(-0.76, 0.18);
glVertex2f(-0.74, 0.14);
glVertex2f(-0.70, 0.08);
glVertex2f(-0.68, 0.06);
glVertex2f(-0.66, 0.02);
glVertex2f(-0.66, 0.00);
glVertex2f(-0.68, -0.04);
glVertex2f(-0.64, -0.02);
glVertex2f(-0.62, -0.02);
glVertex2f(-0.56, -0.04);
glVertex2f(-0.52, -0.08);
glVertex2f(-0.48, -0.16);
glVertex2f(-0.48, -0.20);
glVertex2f(-0.50, -0.26);
glVertex2f(-0.52, -0.30);
glVertex2f(-0.58, -0.34);
glVertex2f(-0.42, -0.32);
glVertex2f(-0.30, -0.28);
glVertex2f(-0.18, -0.22);
glVertex2f(-0.10, -0.20);
glVertex2f(0.00, -0.22);
glVertex2f(0.10, -0.20);
glVertex2f(0.18, -0.22);
glVertex2f(0.30, -0.28);
glVertex2f(0.42, -0.32);
glVertex2f(0.58, -0.34);
glVertex2f(0.52, -0.30);
glVertex2f(0.50, -0.26);
glVertex2f(0.48, -0.20);
glVertex2f(0.48, -0.16);
glVertex2f(0.52, -0.08);
glVertex2f(0.56, -0.04);
glVertex2f(0.62, -0.02);
glVertex2f(0.64, -0.02);
glVertex2f(0.68, -0.04);
glVertex2f(0.66, 0.00);
glVertex2f(0.66, 0.02);
glVertex2f(0.68, 0.06);
glVertex2f(0.70, 0.08);
glVertex2f(0.74, 0.14);
glVertex2f(0.76, 0.18);
glVertex2f(0.78, 0.24);
glVertex2f(0.76, 0.20);
glVertex2f(0.70, 0.16);
glVertex2f(0.62, 0.14);
glVertex2f(0.60, 0.14);
glVertex2f(0.56, 0.16);
glVertex2f(0.54, 0.20);
glVertex2f(0.54, 0.24);
glVertex2f(0.52, 0.18);
glVertex2f(0.46, 0.16);
glVertex2f(0.44, 0.16);
glVertex2f(0.42, 0.20);
glVertex2f(0.42, 0.22);
glVertex2f(0.44, 0.28);
glVertex2f(0.48, 0.32);
glVertex2f(0.54, 0.34);
glVertex2f(0.50, 0.38);
glVertex2f(0.48, 0.42);
glVertex2f(0.48, 0.44);
glVertex2f(0.50, 0.50);
glVertex2f(0.52, 0.54);
glVertex2f(0.56, 0.60);
glVertex2f(0.42, 0.54);
glVertex2f(0.40, 0.54);
glVertex2f(0.38, 0.54);
glVertex2f(0.36, 0.56);
glVertex2f(0.36, 0.60);
glVertex2f(0.34, 0.56);
glVertex2f(0.30, 0.54);
glVertex2f(0.26, 0.54);
glVertex2f(0.24, 0.56);
glVertex2f(0.22, 0.62);
glVertex2f(0.22, 0.64);
glVertex2f(0.24, 0.74);
glVertex2f(0.20, 0.68);
glVertex2f(0.16, 0.66);
glVertex2f(0.12, 0.66);
glVertex2f(0.08, 0.70);
glVertex2f(0.00, 0.90);
glEnd();
glFlush();
}
int main(int argc, char* argv[]) {
glutInit(&argc, argv);
glutInitWindowSize(1000, 1000);
glutInitWindowPosition(10, 10);
glutCreateWindow("Maple Leaf");
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
uj5u.com熱心網友回復:
這是你的多邊形:
你的形狀不是凸的并且GL_POLYGON
規定:
GL_POLYGON
繪制單個凸多邊形。頂點 1 到 N 定義了這個多邊形。
要柵格化此輪廓,請手動將您的形狀分解為三角形或其他原始組件,例如 TRIANGLE FAN 或 TRIANGLE STRIP。這稱為鑲嵌。雖然 GL_POLYGON 看起來很誘人,但它只適用于凸形。
(原圖來源)
對于任意多邊形,您需要自己細分輪廓。您可以尋找一個庫來執行此操作,例如:https ://github.com/mapbox/earcut.hpp 好訊息是您只需執行一次,您可以離線執行(而不是在運行時)。一旦你的多邊形被細分,你就可以用 GL_TRIANGLES 來繪制它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/472576.html
下一篇:win32中GUID的庫在哪里