OpenGL绘制五角星

设五角星5个顶点分别为ABCDE,顶点到坐标轴原点距离为r,ABCDE各点用r表示,分别为

A(0,r);

B(-r*sin(2/5*Pi),r*cos(2/5*Pi));

C(-r*sin(Pi/5),-r*cos(Pi/5));

DE和CB关于Y轴对称。

确定5个顶点的坐标后,使用GL_LINE_LOOP函数,将5个点连接起来,顺序依次为ACEBD。

主要代码为:

 1 void Star(void)
 2 {
 3
 4     GLfloat r = 0.8f;
 5     GLfloat PointA[2] = { 0, r };
 6     GLfloat PointB[2] = { -r*sin(0.4*Pi), r*cos(0.4*Pi) };
 7     GLfloat PointC[2] = { -r*sin(Pi / 5), -r*cos(Pi / 5) };
 8     GLfloat PointD[2] = { r*sin(Pi / 5), -r*cos(Pi / 5) };
 9     GLfloat PointE[2] = { r*sin(0.4*Pi), r*cos(0.4*Pi) };
10
11     glClear(GL_COLOR_BUFFER_BIT);
12
13     glBegin(GL_LINE_LOOP);
14     glVertex2fv(PointA);
15     glVertex2fv(PointC);
16     glVertex2fv(PointE);
17     glVertex2fv(PointB);
18     glVertex2fv(PointD);
19
20     glEnd();
21
22     glFinish();
23 }

绘制成果如下:

时间: 2024-10-06 07:03:40

OpenGL绘制五角星的相关文章

OpenGl 绘制一个立方体

OpenGl 绘制一个立方体 为了绘制六个正方形,我们为每个正方形指定四个顶点,最终我们需要指定6*4=24个顶点.但是我们知道,一个立方体其实总共只有八个顶点,要指定24次,就意味着每个顶点其实重复使用了三次,这样可不是好的现象.最起码,像上面这样重复烦琐的代码,是很容易出错的.稍有不慎,即使相同的顶点也可能被指定成不同的顶点了. 如果我们定义一个数组,把八个顶点都放到数组里,然后每次指定顶点都使用指针,而不是使用直接的数据,这样就避免了在指定顶点时考虑大量的数据,于是减少了代码出错的可能性.

iOS之Quartz2D绘图随机绘制五角星

1.   单个五角星绘制 上次讲了在IOS中使用quartz2d绘制基本的图形,今天来绘制一个比较复杂的图形—五角星,五角星大家都很熟悉. 先来分析下五角星的画法,一个五角星如图所示. 1.   先把一个圆周平均五等分,那么每个角度是360/5,然后隔点进行连线就可以绘制五角星 2.   每个连线的夹角就是360/5*2,但是在IOS的正弦余弦计算采用的是弧度制.这里有必要复习下弧度的知识,弧度就是弧的长度,把等于半径的弧度定义为一弧度.那么360度就是2pi. 如图所示 3.   复习完弧度知

opengl绘制图片

#include <GL/glew.h>#include <glut.h>#include "FreeImage.h"#include <stdio.h> #include <malloc.h> #pragma comment(lib, "FreeImage.lib") GLuint texture; // Storage For One Texture ( NEW ) /*void loadTexture(){ FI

OpenGL绘制简单场景,实现旋转缩放平移和灯光效果

本项目实现了用OpenGL绘制一个简单场景,包含正方体.球体和网格,实现了物体的旋转.缩放.平移和灯光效果.附有项目完整代码,有详细注释.适合初学者熟悉opengl使用. 开发情况 开发环境VS2012+OpenGL 开发平台 Intel core i5,Intel HD Graphics Family 本项目实现了绘制一个场景(包括立方体.球体.网格),对各物体实现平移.旋转.缩放功能,添加了光源并简单设置了物体材质. 本项目示例代码下载(里面有详细注释) 感谢nehe的框架! 场景介绍 初始

OpenGL绘制棱锥,剔除

/** * 缓冲区工具类 */public class BufferUtil { /**  * 将浮点数组转换成字节缓冲区  */ public static ByteBuffer arr2ByteBuffer(float[] arr){  ByteBuffer ibb = ByteBuffer.allocateDirect(arr.length * 4);  ibb.order(ByteOrder.nativeOrder());  FloatBuffer fbb = ibb.asFloatBu

openGL绘制正方形

/** * 缓冲区工具类 */public class BufferUtil { /**  * 将浮点数组转换成字节缓冲区  */ public static ByteBuffer arr2ByteBuffer(float[] arr){  ByteBuffer ibb = ByteBuffer.allocateDirect(arr.length * 4);  ibb.order(ByteOrder.nativeOrder());  FloatBuffer fbb = ibb.asFloatBu

OpenGl绘制螺旋线

/** * 缓冲区工具类 */public class BufferUtil { /**  * 将浮点数组转换成字节缓冲区  */ public static ByteBuffer arr2ByteBuffer(float[] arr){  ByteBuffer ibb = ByteBuffer.allocateDirect(arr.length * 4);  ibb.order(ByteOrder.nativeOrder());  FloatBuffer fbb = ibb.asFloatBu

Opengl绘制计算几何库CGAL三角剖分结果的Demo

Ubuntu下改编了一个用CGAL计算输入点的三角剖分,并用OpenGL显示结果的C++程序. 该Demo可作为一个计算几何及绘图的框架. 代码如下: //编译命令:g++ spatial_sort.cpp -lglut -lGL -lGLU -lCGAL -lCGAL_Core -lgmp #include <CGAL/Exact_predicates_inexact_constructions_kernel.h>   #include <CGAL/Triangulation_eucl

使用OpenGL绘制 shapefile文件 完成最基本的gis操作

主要内容概述 1.解析shapefile(.shp)文件.‘ 2.将经纬度数据按照墨卡托投进行投影(调用proj.4库)完成. 3.将数据用OpenGL的方式进行绘制. 上述3方面只是完成初步的绘制,对于要完成一个复杂的地理信息系统还有很大的差距, 下面介绍我设计的简单的地理信息框架(用于交流,进步).先上个图,根据图来说更加易懂. 其中地图框架中包含多个物理地理图层,是真实存在的图层,所有在该图层下的数据都会被绘制到图层上(即一张图片). 物理图层中包含了多个逻辑图层(Layer),是为了方便