您的位置:首页 > 理论基础

计算机图形学 -- 基本图形 [之二] [glBegin参数Mode的应用] [圆,五角星,菱形等]

2013-10-24 10:41 633 查看
使用glBegin的参数画出各种各种的多边形~

原先还在纠结怎么画出来一个五角星。。后来不知道怎么会想起来了,,真菜啊

来学习一下最简单的应用~

用到一些三角函数什么的

GL_POINTS把每一个顶点作为一个点进行处理,顶点n即定义了点n,共绘制N个点
GL_LINES把每一个顶点作为一个独立的线段,顶点2n-1和2n之间共定义了n条线段,总共绘制N/2条线段
GL_LINE_STRIP:绘制从第一个顶点到最后一个顶点依次相连的一组线段,第n和n+1个顶点定义了线段n,总共绘制n-1条线段
GL_LINE_LOOP:绘制从第一个顶点到最后一个顶点依次相连的一组线段,然后最后一个顶点和第一个顶点相连,第n和n+1个顶点定义了线段n,总共绘制n条线段
GL_TRIANGLES把每个顶点作为一个独立的三角形,顶点3n-2、3n-1和3n定义了第n个三角形,总共绘制N/3个三角形
GL_TRIANGLE_STRIP绘制一组相连的三角形,对于奇数n,顶点n、n+1和n+2定义了第n个三角形;对于偶数n,顶点n+1、n和n+2定义了第n个三角形,总共绘制N-2个三角形
GL_TRIANGLE_FAN绘制一组相连的三角形,三角形是由第一个顶点及其后给定的顶点确定,顶点1、n+1和n+2定义了第n个三角形,总共绘制N-2个三角形
GL_QUADS绘制由四个顶点组成的一组单独的四边形。顶点4n-3、4n-2、4n-1和4n定义了第n个四边形。总共绘制N/4个四边形
GL_QUAD_STRIP绘制一组相连的四边形。每个四边形是由一对顶点及其后给定的一对顶点共同确定的。顶点2n-1、2n、2n+2和2n+1定义了第n个四边形,总共绘制N/2-1个四边形
GL_POLYGON绘制一个凸多边形。顶点1到n定义了这个多边形。

Code:

#include<GL/glut.h>
#include<math.h>
#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
const GLfloat R = 0.8f;
const GLfloat PI = 3.1415926536f;
const int n = 600;

void basicshape2(void)
{
int i;
glClearColor(1.0,1.0,0.0,0.8);
glClear(GL_COLOR_BUFFER_BIT);

/* ---------------------- ----------------------*/
glLineWidth(3);
glBegin(GL_LINE_LOOP);	//以闭合折线方式画圆
glColor3f(1.0f,0.0f,0.0f);
for(i=0; i<n; ++i)
glVertex2f(R*cos(2*PI/n*i), R*sin(2*PI/n*i));
glEnd();

/* ---------------------- ----------------------*/
glBegin(GL_LINE_LOOP);	//以闭合折线方式画五角星
glColor3f(0.0f,1.0f,0.0f);

GLfloat bx=R*cos(18*PI/180);
GLfloat by=R*sin(18*PI/180);
GLfloat cx=R*sin(36*PI/180);
GLfloat cy=R*cos(36*PI/180);

glVertex2f(-bx,by);
glVertex2f(bx,by);
glVertex2f(-cx,-cy);
glVertex2f(0.0f,R);
glVertex2f(cx,-cy);

glEnd();

/* ---------------------- ----------------------*/
glBegin(GL_POLYGON);	//以填充方式画菱形,多边形,五角星也是可以的啦~
glVertex2f(-0.8f,0.95f);
glVertex2f(-0.7f,0.85f);
glVertex2f(-0.8f,0.75f);
glVertex2f(-0.9f,0.85f);
glEnd();

glBegin(GL_POLYGON);	//对称一下
glVertex2f(0.8f,0.95f);
glVertex2f(0.7f,0.85f);
glVertex2f(0.8f,0.75f);
glVertex2f(0.9f,0.85f);
glEnd();
//这里有两个菱形,可以用GL_QUADS一次搞定,独立的~

/* ---------------------- ----------------------*/
glColor3f(0.0f,0.0f,1.0f);
glBegin(GL_TRIANGLES);	//两个三角形
glVertex2f(-1.0f,-1.0f);
glVertex2f(-0.95f,-0.7f);
glVertex2f(-0.8f,-0.7f);
glVertex2f(-1.0f,-1.0f);
glVertex2f(-0.8f,-0.75f);
glVertex2f(-0.8f,-0.95f);
glEnd();

glFlush();
}

int main(int argc,char *argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(150,150);
glutInitWindowSize(500,500);

glutCreateWindow("Baisc Shape2");
glutDisplayFunc(basicshape2);

glutMainLoop();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息