在OpenGL中绘制圆
来源:互联网 发布:对流取暖器 知乎 编辑:程序博客网 时间:2024/04/28 02:29
#include<GL/glut.h>#include<math.h>const double PI = acos(-1.0);void myDisplay(){ glClear(GL_COLOR_BUFFER_BIT); //清除。GL_COLOR_BUFFER_BIT表示清除颜色 float R = 0.5f; int n = 80; //这里的n表示用多边形绘制圆的精度,可以考虑增大精度 glBegin(GL_POLYGON); /* 表示对以下画出的点进行的操作,这里是形成多边形 类似的还有GL_LINE_STRIP、GL_LINE_LOOP、GL_POINT等 */ for (int i = 0; i < n; i++) //通过数学计算来画多边形的点 { glVertex2f(R*cos(2 * PI*i / n), R*sin(2 * PI*i / n)); } glEnd(); glFlush();}int main(int argc, char *argv[]){ glutInit(&argc, argv); /* 对GLUT进行初始化,这个函数必须在其它的GLUT使用之前调用一次。 其格式比较死板,一般照抄这句glutInit(&argc, argv)就可以了。 */ glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); /* 设置显示方式。 其中GLUT_RGB表示使用RGB颜色,与之对应的还有GLUT_INDEX(表示使用索引颜色)。 GLUT_SINGLE表示使用单缓冲,与之对应的还有GLUT_DOUBLE(使用双缓冲)。 */ glutInitWindowPosition(100, 100); //指定窗口位置 glutInitWindowSize(400, 400); //指定窗口大小 glutCreateWindow("第一个OpenGL程序"); //新窗口标题 glutDisplayFunc(&myDisplay); glutMainLoop(); //显示窗口,窗口关闭时跳出循环 return 0;}
在对代码进行调整以后,调用GL_LINE_STRIP,可以画一个圆(上面的是用多边形的画法绘制一个圆面,但这里是圆的线)。
PS:另一个displayStar函数可以绘制一个五角星。
#include<GL/glut.h>#include<math.h>const double PI = acos(-1.0);void displayCircle(){ glClear(GL_COLOR_BUFFER_BIT); //清除。GL_COLOR_BUFFER_BIT表示清除颜色 float R = 0.5f; int n = 80; //这里的n表示用多边形绘制圆的精度,可以考虑增大精度 glBegin(GL_LINE_STRIP); /* 表示对以下画出的点进行的操作,这里是形成多边形 类似的还有GL_LINE_STRIP、GL_LINE_LOOP、GL_POINT等 */ for (int i = 0; i < n; i++) //通过数学计算来画多边形的点 { glVertex2f(R*cos(2 * PI*i / n), R*sin(2 * PI*i / n)); } int i = 0; glVertex2f(R*cos(2 * PI*i / n), R*sin(2 * PI*i / n)); glEnd(); glFlush();}void displayStar(){ GLfloat a = 1 / (2 - 2 * cos(72 * PI / 180)); GLfloat bx = a * cos(18 * PI / 180); GLfloat by = a * sin(18 * PI / 180); GLfloat cy = -a * cos(18 * PI / 180); GLfloat PointA[2] = { 0, a }, PointB[2] = { bx, by }, PointC[2] = { 0.5, cy }, PointD[2] = { -0.5, cy }, PointE[2] = { -bx, by }; glClear(GL_COLOR_BUFFER_BIT); // 按照A->C->E->B->D->A的顺序,可以一笔将五角星画出 glBegin(GL_LINE_LOOP); glVertex2fv(PointA); glVertex2fv(PointC); glVertex2fv(PointE); glVertex2fv(PointB); glVertex2fv(PointD); glEnd(); glFlush();}int main(int argc, char *argv[]){ glutInit(&argc, argv); /* 对GLUT进行初始化,这个函数必须在其它的GLUT使用之前调用一次。 其格式比较死板,一般照抄这句glutInit(&argc, argv)就可以了。 */ glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); /* 设置显示方式。 其中GLUT_RGB表示使用RGB颜色,与之对应的还有GLUT_INDEX(表示使用索引颜色)。 GLUT_SINGLE表示使用单缓冲,与之对应的还有GLUT_DOUBLE(使用双缓冲)。 */ glutInitWindowPosition(100, 100); //指定窗口位置 glutInitWindowSize(400, 400); //指定窗口大小 glutCreateWindow("第一个OpenGL程序"); //新窗口标题 glutDisplayFunc(&displayCircle); //glutDisplayFunc(&displayStar); glutMainLoop(); //显示窗口,窗口关闭时跳出循环 return 0;}
效果如下:
0 0
- 在OpenGL中绘制圆
- BaiduMap---百度地图官方Demo之OpenGL绘制功能(介绍如何使用OpenGL绘制在地图中进行绘制)
- 在VC++中使用OpenGL绘制典型曲面
- 在VC++中使用OpenGL绘制典型曲面
- 在VC++中使用OpenGL绘制典型曲面
- 在OpenGL中如何根据空间两点绘制圆柱?
- 在OpenGL中如何根据空间两点绘制圆柱
- VS2012下利用Opengl在Cview中绘制
- 在qt中使用opengl绘制图形动画
- 如何在Unity中使用OpenGL函数绘制动态曲线图
- OpenGL In C# 03 在OpenGL中使用WPF绘制的字体
- opengl绘制一个圆
- openGL绘制圆
- OpenGL中绘制的机场
- OpenGL中SolidCylinder的绘制
- OpenGL在VC6.0下 在线程中绘制场景的代码格式
- 在OpenGL中用参数方程绘制球体
- OpenGL在Android上绘制Bitmap
- Linux中的ln-创建链接
- ajaxfileupload -- 一款不错的AJAX文件上传插件
- 给BigDecimal设置小数点位数
- 各种查找、排序的时间复杂度
- jQuery.extend 函数详解
- 在OpenGL中绘制圆
- Python3导入CSV文件(跟Python2有些许的不同)
- python 装饰器
- linux问题-CentOS7和以往版本的变化
- javascript书籍
- 一键解决80端口被占用
- 功能点方法概述
- CodeForces 681A A Good Contest
- QT中的setGeometry (9, 9, 50, 25) 四个参数分别是指什么?