计算机图形学 -- 基本图形 [之二] [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:
原先还在纠结怎么画出来一个五角星。。后来不知道怎么会想起来了,,真菜啊
来学习一下最简单的应用~
用到一些三角函数什么的
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; }
相关文章推荐
- 扫描转换直线段--DDA算法
- 初涉openGL遇显卡问题【解决方案】
- 计算机图形学——OpenGL开发库开发库
- 计算机图形学方向投稿国外期刊
- 梁友栋-Barsky裁剪算法
- 为VC++ 6.0 配置OpenGL 环境 [图形学]
- 计算机图形学 -- 像素点的生成 [非常详细的解释~]
- 计算机图形学 -- 基本图形 [之一] [矩形,三角形等]
- 光线追踪技术的理论和实践(面向对象)
- 算法系列之十二:多边形区域填充算法--扫描线填充算法(有序边表法) .
- 橡皮筋算法
- 2次B样条曲线
- 3次B样条曲线
- 拉格朗日插值曲线
- N阶贝塞尔曲线
- Flat Shading (平面着色)
- RGB和HSB转换
- DDS格式
- OpenGL学习笔记:三维数学基础(一)坐标系、向量、矩阵
- 【图形学与游戏编程】开发笔记-基础篇7:纹理映射