c++ - 形状中的 OpenGL 着色

标签 c++ opengl

我正在为一个大学项目重新创建旧游戏“Chuckie egg”,我使用下面的代码很好地绘制了角色,但我不确定在 glBegin(?) 中使用什么类型来为对象着色中。

我已经尝试过 GL_QUADS、GL_TRIANGLE_FAN、GL_TRIANGLE_STRIP 和 GL_QUAD_STRIP,但唯一没有显示错误的是 GL_LINE_LOOP,但这当然不会为整个形状着色。

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

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();}

最佳答案

你不能随便画一个轮廓然后给它上色。你必须正确地三角化你的形状。

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

关于c++ - 形状中的 OpenGL 着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13919678/

相关文章:

opengl - 缓冲区 - 索引或直接、交错或分离

java - Open GL 转换

c++ - IP 属于 CIDR 范围

c++ - 为什么 shared_ptr 没有虚拟析构函数? (我该如何解决这个问题?)

c++ - C++中类的常量

c++ - 使用 OpenGL 比较两个图像

c++ - glReadPixels 不起作用

c++ - 如何使自定义小部件内的子小部件的信号可连接?

c++ - 使用流将对象转换为字符串

opengl - 如何从模型 View 矩阵中获取相机旋转矩阵