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入门教程

全部评论

相关推荐

10-17 10:05
已编辑
北华大学 全栈开发
牛客872465272号:掉头发了哥
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务