OpenGL绘制了一颗星星



我正在研究一颗2D恒星。我可以为这些点创建5个三角形,然后为中间创建多边形,但当我运行程序时,多边形剪切出了一个未着色的部分。我试图用三角形覆盖未覆盖的部分,但也没有成功。

代码出了什么问题?或者我可以添加什么来确保我的形状没有遗漏颜色?

这是我的代码:

void draw() {

glBegin(GL_TRIANGLES);
glColor3f(1, 0, 0);
glVertex3f(-0.60, 0.77, 0);
glColor3f(0, 1, 0);
glVertex3f(-0.42, 0.77, 0);
glColor3f(0, 0, 1);
glVertex3f(-0.58, 0.68, 0);
//second triangle top triangle
glColor3f(1, 0, 0);
glVertex3f(-0.64, 1, 0);
glColor3f(0, 1, 0);
glVertex3f(-0.68, 0.77, 0);
glColor3f(0, 0, 1);
glVertex3f(-0.60, 0.77, 0);
//3rd Triangle
glColor3f(1, 0, 0);
glVertex3f(-0.68, 0.77, 0);
glColor3f(0, 1, 0);
glVertex3f(-0.7, 0.68, 0);
glColor3f(0, 0, 1);
glVertex3f(-0.86, 0.77, 0);
//4th Triangle
glColor3f(1, 0, 0);
glVertex3f(-0.64, 0.63, 0);
glColor3f(0, 1, 0);
glVertex3f(-0.7, 0.68, 0);
glColor3f(0, 0, 1);
glVertex3f(-0.82, 0.43, 0);
//5th Triangle
glColor3f(1, 0, 0);
glVertex3f(-0.64, 0.63, 0);
glColor3f(0, 1, 0);
glVertex3f(-0.58, 0.68, 0);
glColor3f(0, 0, 1);
glVertex3f(-0.51, 0.43, 0);
glEnd();
glBegin(GL_POLYGON);//code for the Polygon within the stars
glColor3f(1, 0, 0);//sets color of Polygon
glVertex3f(-0.68, 0.77, 0); //set the 5 vetices of polygon
glColor3f(1, 0, 0);
glVertex3f(-0.60, 0.77, 0);
glColor3f(1, 0,0 );
glVertex3f(-0.7, 0.68, 0);
glColor3f(1, 0, 0);
glVertex3f(-0.64, 0.63, 0);
glColor3f(1, 0, 0);
glVertex3f(-0.58, 0.68, 0);


glEnd();
//code for pentagaon
glBegin(GL_POLYGON);
glColor3f(1, 0, 0);//sets color of Polygon
glVertex3f(0.45, 0.82, 0); //set the 5 vetices of polygon
glColor3f(0, 1, 0);
glVertex3f(0.8, 0.6, 0);
glColor3f(0, 1, 0);
glVertex3f(0.2, 0.6, 0);
glColor3f(1, 0, 0);
glVertex3f(0.2, 0.3, 0);
glColor3f(1, 0, 0);
glVertex3f(0.7, 0.3, 0);

glEnd();
}

首先要注意的是,用glBegin/glEnd序列和原始类型GL_POLYGON绘制已经有十多年的历史了。阅读有关固定功能管道的信息,并参阅顶点规范以了解最先进的渲染方式。


您交换了多边形前两个顶点坐标的x坐标。像这样更改代码,以解决问题:

glColor3f(1, 0, 0);
glBegin(GL_POLYGON);
glVertex3f(-0.60, 0.77, 0); // <--- -0.60 instead of -0.68
glVertex3f(-0.68, 0.77, 0); // <--- -0.68 instead of -0.60
glVertex3f(-0.7, 0.68, 0);
glVertex3f(-0.64, 0.63, 0);
glVertex3f(-0.58, 0.68, 0);
glEnd();

请注意,可以使用GL_TRIANGLE_FAN,而不是不推荐使用的基元类型GL_POLYGON

最新更新