OpenGL入门练习——点、直线和多边形简单操纵
绘制几何图形的一些细节:
点可以设置大小
直线可以设置宽度;可以将直线画成虚线。
多边形的两个面的绘制方法可以分别设置;在三维空间中,不可见的多边形可以被剔除;可以将填充多边形绘制成镂空的样式。
另外,把一些数据写到程序之外的文件中,并用专门的工具编辑之,有时可以显得更方便。
#include<GL/glut.h>
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
void myDisplay1(void) //点&像素点验证
{
//GLfloat x;
glClear(GL_COLOR_BUFFER_BIT);
glPointSize(5.0f);
glBegin(GL_POINTS);
glVertex2f(0.0f, 0.0f);
glVertex2f(0.5f, 0.5f);
glEnd();
glFlush();
}
void myDisplay2(void)
{
//线段 虚线 直线 样式
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_LINE_STIPPLE);
glLineStipple(2, 0x0F0F);
glLineWidth(10.0f);
glBegin(GL_LINES);
glVertex2f(0.0f, 0.0f);
glVertex2f(0.8f, 0.8f);
glEnd();
glFlush();
}
void myDisplay3(void)
{
//多边形练习1 两面 变换 反转
glClear(GL_COLOR_BUFFER_BIT);
glPolygonMode(GL_FRONT, GL_FILL);//正面 填充
glPolygonMode(GL_BACK, GL_LINE);//反面 线型
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();
glFlush();
}
void myDisplay4()
{
//图像镂空
static GLubyte Mask[128];
FILE *fp;
fp = fopen("mask.bmp", "rb");
if (!fp)
exit(0);
if (fseek(fp, -(int)sizeof(Mask), SEEK_END))
exit(0);
if (!fread(Mask, sizeof(Mask), 1, fp))
exit(0);
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("OpenGL 2");
glutDisplayFunc(&myDisplay3);
glutMainLoop();
return 0;
}
参考资料:OpenGL入门教程