C++ 图形中的OpenGL着色

C++ 图形中的OpenGL着色,c++,opengl,C++,Opengl,我正在为一个大学项目重新制作一个老游戏“Chuckie egg”,我用下面的代码很好地画出了这个角色,但我不确定在glBegin(?)中使用什么类型来给对象上色 我试过,GL_四边形、GL_三角形、GL_三角形和GL_四边形,但唯一可以正常显示的是GL_线条,当然,这并不能给整个形状着色 有人知道如何解决这个问题吗 void drawMan(void){ //main body outline glBegin(GL_LINE_LOOP); //set our colour glColor3u

我正在为一个大学项目重新制作一个老游戏“Chuckie egg”,我用下面的代码很好地画出了这个角色,但我不确定在glBegin(?)中使用什么类型来给对象上色

我试过,GL_四边形、GL_三角形、GL_三角形和GL_四边形,但唯一可以正常显示的是GL_线条,当然,这并不能给整个形状着色

有人知道如何解决这个问题吗

void drawMan(void){

//main body outline
glBegin(GL_LINE_LOOP);

//set our colour
glColor3ub(255, 255, 0); // yellow

glVertex2f(-0.25f, 1.0f);
glVertex2f(0.25f, 1.0f);
glVertex2f(0.25f, 0.875f);
glVertex2f(0.5f, 0.875f);
glVertex2f(0.5f, 0.75f);
glVertex2f(1.0f, 0.75f);
glVertex2f(1.0f, 0.625f);
glVertex2f(0.5f, 0.625f);
glVertex2f(0.5f, 0.375f);
glVertex2f(0.0f, 0.375f);
glVertex2f(0.0f, 0.25f);
glVertex2f(0.25f, 0.25f);
glVertex2f(0.25f, 0.125f);
glVertex2f(0.5f, 0.125f);
glVertex2f(0.5f, 0.0f);
glVertex2f(0.75f, 0.0f);
glVertex2f(0.75f, -0.5f);
glVertex2f(0.5f, -0.5f);
glVertex2f(0.5f, -0.625f);
glVertex2f(0.25f, -0.625f);
glVertex2f(0.25f, -0.75f);
glVertex2f(0.0f, -0.75f);
glVertex2f(0.0f, -0.875f);
glVertex2f(0.25f, -0.875f);
glVertex2f(0.25f, -1.0f);
glVertex2f(-0.25f, -1.0f);
glVertex2f(-0.25f, -0.625f);
glVertex2f(-0.5f, -0.625f);
glVertex2f(-0.5f, -0.5f);
glVertex2f(-0.75f, -0.5f);
glVertex2f(-0.75f, 0.0f);
glVertex2f(-0.5f, 0.0f);
glVertex2f(-0.5f, 0.125f);
glVertex2f(-0.25f, 0.125f);
glVertex2f(-0.25f, 0.375f);
glVertex2f(-0.5f, 0.375f);
glVertex2f(-0.5f, 0.625f);
glVertex2f(-1.0f, 0.625f);
glVertex2f(-1.0f, 0.75f);
glVertex2f(-0.5f, 0.75f);
glVertex2f(-0.5f, 0.85f);
glVertex2f(-0.25f, 0.85f);
//glVertex2f(-0.25f, 1.0f);

glEnd();

//eyes
glBegin(GL_LINE_LOOP);

glColor3ub(0, 0, 0); // black

glVertex2f(0.0f, 0.625f);
glVertex2f(0.25f, 0.625f);
glVertex2f(0.25f, 0.5f);
glVertex2f(0.0f, 0.5f);

glEnd();


//arm

glBegin(GL_LINE_LOOP);

glColor3ub(0, 0, 0); // black

glVertex2f(-0.25f, 0.0f);
glVertex2f(0.0f, 0.0f);
glVertex2f(0.0f, -0.5f);
glVertex2f(-0.25f, -0.5f);

glEnd();}

你不能只画一个随机的轮廓然后涂上颜色。您必须正确地对您的形状进行三角剖分


实际上,这是一个可以输出合理几何图形的绘图软件包的工作,或者使用纹理来代替。

你不能只画一个随机的轮廓并给它上色。您必须正确地对您的形状进行三角剖分


实际上,这是一个可以输出合理几何图形的绘图包的工作,或者使用纹理来代替。

请不要使用立即模式。这是个坏习惯。您基本上是将几何体硬编码为函数调用列表?为什么不做一件明智的事情,把你的几何数据放到一个缓冲区中,并向OpenGL传递一个指向该缓冲区的指针?@DatenWalf我不太清楚你的意思,但我想你的意思是制作一个顶点数组?如果是这样,我将使用其他几何体,但这是一个uni赋值,我必须演示到目前为止涵盖的所有方法(以不同的方式绘制每一位)。@Makka:从技术上讲,如果你要使用现代OpenGL,你根本无法使用即时模式。使用即时模式已经有15年多的时间了,当OpenGL-2在10年前被讨论时,第一次尝试反对即时模式。就我个人而言,我认为即时模式根本不可用。如果你的老师坚持这样做,问问他们,为什么你应该学习一种过时的技术,这种技术在一个严肃的软件产品中已经有15年没有人使用了。@datenwolf谢谢你提供的信息!请不要使用即时模式。这是个坏习惯。您基本上是将几何体硬编码为函数调用列表?为什么不做一件明智的事情,把你的几何数据放到一个缓冲区中,并向OpenGL传递一个指向该缓冲区的指针?@DatenWalf我不太清楚你的意思,但我想你的意思是制作一个顶点数组?如果是这样,我将使用其他几何体,但这是一个uni赋值,我必须演示到目前为止涵盖的所有方法(以不同的方式绘制每一位)。@Makka:从技术上讲,如果你要使用现代OpenGL,你根本无法使用即时模式。使用即时模式已经有15年多的时间了,当OpenGL-2在10年前被讨论时,第一次尝试反对即时模式。就我个人而言,我认为即时模式根本不可用。如果你的老师坚持这样做,问问他们,为什么你应该学习一种过时的技术,这种技术在一个严肃的软件产品中已经有15年没有人使用了。@datenwolf谢谢你提供的信息!我想我理解你,例如,如果使用四边形,你不能仅仅勾勒出形状,你必须有内部顶点将形状分解成四边形部分?e、 g.字母T(抱歉)的格式:()[[]正确。你必须自己制作四边形。我想我理解你的意思,例如,如果使用四边形,你不能只画出形状的轮廓,你必须有内部顶点,将形状分解为四边形部分?例如,字母T(抱歉)的格式:()[[]正确。你必须自己做四个。