#include"Gl\glut.h"
#include<stdio.h>
#include<stdlib.h>
void myDisplay(void){
glClear(GL_COLOR_BUFFER_BIT);
//glRectf(-0.5f,-0.5f,0.5f,0.5f);
/*
*以下代码为画不正规的五角星
*
glBegin(GL_LINE_STRIP);
glVertex2f(-0.3f,0.0f);
glVertex2f(0.3f,0.0f);
glVertex2f(-0.2f,-0.2f);
glVertex2f(0.0f,0.3f);
glVertex2f(0.2f,-0.2f);
glVertex2f(-0.3f,0.0f);
glEnd();
*/
/*
*以下代码为画两个成镜像的正方形
*
*/
/*
glPolygonMode(GL_FRONT,GL_FILL);
glPolygonMode(GL_BACK,GL_LINE);
glFrontFace(GL_CW);
//glFrontFace(GL_CCW);
glBegin(GL_POLYGON);
glVertex2f(-0.5f,-0.5f);
glVertex2f(0.0f,-0.5f);
glVertex2f(0.0f,0.0f);
glVertex2f(-0.5f,0.0f);
glEnd();
glBegin(GL_POLYGON);
glVertex2f(0.0f,0.0f);
glVertex2f(0.0f,0.5f);
glVertex2f(0.5f,0.5f);
glVertex2f(0.5f,0.0f);
glEnd();
*/
static GLubyte Mask[128]=
{
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x03,0x80,0x01,0xC0,
0x06,0xC0,0x03,0x60,
0x04,0x60,0x06,0x20,
0x04,0x30,0x0C,0x20,
0x04,0x18,0x18,0x20,
0x04,0x0C,0x30,0x20,
0x04,0x06,0x60,0x20,
0x44,0x03,0xC0,0x22,
0x44,0x01,0x80,0x22,
0x44,0x01,0x80,0x22,
0x44,0x01,0x80,0x22,
0x44,0x01,0x80,0x22,
0x44,0x01,0x80,0x22,
0x44,0x01,0x80,0x22,
0x66,0x01,0x80,0x66,
0x33,0x01,0x80,0xCC,
0x19,0x81,0x81,0x98,
0x0C,0xC1,0x83,0x30,
0x07,0xE1,0x87,0xE0,
0x03,0x3F,0xFC,0xC0,
0x03,0x31,0x8C,0xC0,
0x03,0x3F,0xFC,0xC0,
0x06,0x64,0x26,0x60,
0x0C,0xCC,0x33,0x30,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00
};
FILE *fp;
fp=fopen("loukongtestpic.bmp","rb");
if(!fp)
{
printf("Can not find the bmp!");
while(1);
}
if(fseek(fp,-(int)sizeof(Mask),SEEK_END))
{
printf("Fseek erro!");
while(1);
};
if(!fread(Mask,sizeof(Mask),1,fp))
{
printf("Freed erro!");
while(1);
};
fclose(fp);
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_POLYGON_STIPPLE);
glPolygonStipple(Mask);
glRectf(-0.5f,-0.5f,0.0f,0.0f); // 在左下方绘制一个有镂空效果的正方形
glDisable(GL_POLYGON_STIPPLE);
glRectf(0.0f,0.0f,0.5f,0.5f); // 在右上方绘制一个无镂空效果的正方形
glFlush();
}
int main(int argc, char *argv[]){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100,100);
glutInitWindowSize(400,400);
glutCreateWindow("实验一 内容四 图形镂空实验");
glutDisplayFunc(&myDisplay);
glutMainLoop();
return 0;
}
评论0