使用OpenGL和FreeGLUT分步绘制彩色房屋
使用OpenGL和FreeGLUT分步绘制彩色房屋
本教程将指导您使用OpenGL和FreeGLUT库分两步绘制房屋:
步骤 1:绘制多边形****步骤 2:用颜色填充多边形
您可以使用鼠标或键盘交互来显示这些步骤。
代码
以下是代码的修改版本,它分两步绘制房屋:绘制多边形和用颜色填充它们。您可以使用鼠标或键盘交互来切换步骤:cpp#define FREEGLUT_STATIC#include <math.h>#include <GL/freeglut.h>#include
int width = 400;int height = 300;bool fillPolygons = false; // 指示是否用颜色填充多边形的标志
void when_in_mainloop(){ glutPostRedisplay();}
void keyboard_input(unsigned char key, int x, int y){ if (key == 'q' || key == 'Q') exit(0); else if (key == 'f' || key == 'F') fillPolygons = !fillPolygons;}
void drawPolygons(){ // 绘制房屋多边形 glColor3f(1.0, 0.0, 0.0); // 红色 glBegin(GL_LINE_LOOP); // 房屋轮廓 glVertex2f(0.2, 0.2); glVertex2f(0.8, 0.2); glVertex2f(0.8, 0.8); glVertex2f(0.5, 1.0); glVertex2f(0.2, 0.8); glEnd();
glBegin(GL_LINE_LOOP); // 屋顶轮廓 glVertex2f(0.2, 0.8); glVertex2f(0.5, 1.0); glVertex2f(0.8, 0.8); glEnd();
glBegin(GL_LINE_STRIP); // 烟囱轮廓 glVertex2f(0.6, 0.4); glVertex2f(0.6, 0.6); glVertex2f(0.7, 0.6); glEnd();
glBegin(GL_LINE_STRIP); // 门的轮廓 glVertex2f(0.4, 0.2); glVertex2f(0.4, 0.4); glVertex2f(0.6, 0.4); glEnd();}
void fillPolygons(){ // 用颜色填充房屋多边形 glColor3f(1.0, 0.0, 0.0); // 红色 glBegin(GL_POLYGON); // 房屋 glVertex2f(0.2, 0.2); glVertex2f(0.8, 0.2); glVertex2f(0.8, 0.8); glVertex2f(0.5, 1.0); glVertex2f(0.2, 0.8); glEnd();
glColor3f(1.0, 0.5, 0.0); // 橙色 glBegin(GL_POLYGON); // 屋顶 glVertex2f(0.2, 0.8); glVertex2f(0.5, 1.0); glVertex2f(0.8, 0.8); glEnd();
glColor3f(1.0, 1.0, 1.0); // 白色 glBegin(GL_POLYGON); // 烟囱 glVertex2f(0.6, 0.4); glVertex2f(0.6, 0.6); glVertex2f(0.7, 0.6); glEnd();
glColor3f(0.0, 0.0, 1.0); // 蓝色 glBegin(GL_POLYGON); // 门 glVertex2f(0.4, 0.2); glVertex2f(0.4, 0.4); glVertex2f(0.6, 0.4); glEnd();}
void display(void){ glClearColor(0, 0, 0, 0); glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1, 1, 1); glBegin(GL_LINES); glVertex2f(-1, 0); glVertex2f(1, 0); glVertex2f(0, -1); glVertex2f(0, 1); glEnd();
if (!fillPolygons) drawPolygons(); else fillPolygons();
glFlush();}
int main(int argc, char** argv){ glutInit(&argc, argv); glutInitWindowPosition(100, 100); glutInitWindowSize(width, height); glutCreateWindow('House Drawing'); glutDisplayFunc(display); glutIdleFunc(when_in_mainloop); glutKeyboardFunc(keyboard_input); glutMainLoop();
return 0;}
在此修改后的代码中,按 'f' 或 'F' 键可在 true 和 false 之间切换 fillPolygons 标志。当该标志为 false 时,多边形仅绘制为轮廓。当该标志为 true 时,多边形将填充颜色。
您可以通过按 'f' 键在填充多边形和仅绘制轮廓之间切换来测试和观察绘制房屋的两个步骤。
原文地址: https://www.cveoy.top/t/topic/C3Y 著作权归作者所有。请勿转载和采集!