本次实验项目
多边形位图填充图形
功能简单介绍
本实验填充特定图案的图形“大裤衩子”。程序中定义了一个位图数组fly,这个数组被用来通过glPolygonStipple函数创建多边形的点模式填充效果。图形由两个绿色的多边形组成,代表“大裤衩”的左右两部分,以及一些灰色的线条作为点缀。
代码
#include <windows.h>
#include <GL/glut.h>
#define GLUT_DISABLE_ATEXIT_HACK
//定义位图存放在共10行每行16位分成前后8位无符号整数块的数组
GLubyte fly[20] = {
0x1c, 0x00, 0x1c, 0x00,0x1c, 0x00,0x1c, 0x00, 0x1c, 0x00,
0xff, 0x80, 0x7f, 0x00,0x3e, 0x00,0x1c, 0x00, 0x08, 0x00 };
//(注)图元结构中应该使用凸多边形
void designs(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除屏幕和缓存区
glLoadIdentity(); //还原矩阵状态
//图案绘制
glEnable(GL_POLYGON_STIPPLE);//启用多边形点模式
glPolygonStipple(fly);//根据fly数组的点模式来决定哪些像素点被绘制出来,从而创建出特定的图案效果
//大裤衩子
//glPointSize(20);//点的尺寸 //glLineWidth(5);//线的尺寸
glColor3f(0.0,1.0,0.0);
//左半部分
glBegin(GL_POLYGON);
glVertex2i(300,300);
glVertex2i(200,100);
glVertex2i(100,100);
glVertex2i(100,500);
glVertex2i(300,500);
glEnd();
//右半部分
glBegin(GL_POLYGON);
glVertex2i(300,300);
glVertex2i(400,100);
glVertex2i(500,100);
glVertex2i(500,500);
glVertex2i(300,500);
glEnd();
glDisable(GL_POLYGON_STIPPLE);
//点缀图案
glColor3f(0.7,0.7,0.7);
glBegin(GL_LINE_LOOP);
glVertex2i(350,350);
glVertex2i(400,350);
glVertex2i(400,400);
glVertex2i(350,400);
glEnd();
glBegin(GL_LINE_LOOP);
glVertex2i(250,350);
glVertex2i(200,350);
glVertex2i(200,400);
glVertex2i(250,400);
glEnd();
glFlush();
}
void init(void)
{
glClearColor(0.0,0.0,0.0,0.0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0.0,600.0,0.0,600.0);
glMatrixMode(GL_MODELVIEW);//设置矩阵模式
}
int main(int argc, char** argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(100,100);
glutInitWindowSize(600,600);
glutCreateWindow("HelloOpenGL-多边形位图填充");
init();
glutDisplayFunc(designs);
glutMainLoop();
return 0;
}
运行结果
上手实践
各位学有余力的先生和女士,如有兴趣的话,不妨参考上面内容,动手改用自己喜欢的位图图案并用多边形填充吧!祝你成功!
标签:OpenGL,0.0,0x00,图形学,glVertex2i,C语言,400,100,GL From: https://blog.csdn.net/2303_77716250/article/details/143650716