五角星的绘制

一个会动的五角星的绘制

五角星的绘制

OpenGL第一课,绘制一个会旋转的五角星

使用的编译器是Clion,如何配置这里不做介绍,直接出一个小例子

#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
using namespace std;

#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" );

#pragma comment (lib, "opengl32.lib")
#pragma comment (lib, "glu32.lib")
#pragma comment (lib, "glaux.lib")

void init(void)
{
    glClearColor(0.0,0.0,0.0,0.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0.0,200.0,0.0,200.0);//这个表示使用正投影将世界坐标系二维矩形区域映射到屏幕上  x 0 - 200 y 0 150  只要是在该矩形内定义的对象 都会显示窗口上
}
void display(void)//绘制函数
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0, 1.0, 1.0);
    glutSolidTetrahedron();
    glFlush();
    return;
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);//初始化
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);//指定使用了RGBA模式还是颜色索引模式,还可以指定使用单缓冲还是双缓冲
    glutInitWindowPosition(0,0);//窗口左上角的屏幕位置
    glutInitWindowSize(500, 500);//窗口大小
    glutCreateWindow("My OpenGL");//创建一个OpenGL窗口
    init();
    glutDisplayFunc(display);//事件回调显示函数
    glutMainLoop();
}

首先需要先画出一个五角星

这里的五角星参数是直接给定的,也可以自己书写函数进行输入,使用该函数替代上述的绘制函数

//五角星参数
float r=1,g=0,b=0,x=100.0f,y=100.0f;
float R[2]={100,50};
float angle=18.0;//角度初始化
// 五角星绘制函数
void draw(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(0,0,1.0);
    glBegin(GL_LINE_LOOP);
        for (int i = 0; i < 10; i++) {
            glVertex2f(x + R[i % 2] * cos((i * 36.0 + angle) / 180 * pi), y + R[i % 2] * sin((i * 36.0 + angle) / 180 * pi));
        }
    glEnd();
    glFlush();
}

最后我们要让它动起来

void change(void)
{
    ++angle;
    if(angle>=360)
        angle=0;
    draw();
    Sleep(40);//用于设置延时
}

现在我们就大功告成了

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenGL 画五角星需要用到三角形扇和旋转变换,具体原理如下: 1. 定义五角星的顶点坐标,可以先在一个正十边形上选取五个顶点,然后通过旋转变换得到五角星的顶点坐标。 2. 使用三角形扇来绘制五角星的外框,即以其中一个顶点为中心,将其余四个顶点和中心点组成一个三角形,循环绘制直到连接所有的顶点。 3. 通过旋转变换来得到五角星的不同角度,可以使用 glRotatef 函数来进行旋转变换。 下面是绘制五角星的代码示例: ``` void drawStar() { // 定义五角星的顶点坐标 GLfloat vertices[10][2] = { {0.0, 0.5}, {0.15, 0.15}, {0.5, 0.18}, {0.25, -0.05}, {0.38, -0.4}, {0.0, -0.2}, {-0.38, -0.4}, {-0.25, -0.05}, {-0.5, 0.18}, {-0.15, 0.15} }; glLineWidth(2.0); // 设置线条宽度 // 旋转变换,绘制五角星的不同角度 for (int i = 0; i < 5; i++) { glRotatef(72.0, 0.0, 0.0, 1.0); // 旋转 72 度 glBegin(GL_TRIANGLE_FAN); glColor3f(1.0, 1.0, 0.0); // 设置颜色 glVertex2fv(vertices[0]); // 设置中心点 for (int j = 0; j <= 4; j++) { glColor3f(0.0, 0.0, 1.0); // 设置颜色 glVertex2fv(vertices[j*2+1]); } glColor3f(0.0, 0.0, 1.0); // 设置颜色 glVertex2fv(vertices[1]); glEnd(); } } ``` 在 OpenGL 的绘制过程中,我们需要先使用 gluOrtho2D 函数来设置二维投影矩阵,然后在 display 函数中调用 drawStar 函数绘制五角星的外框。下面是完整的代码示例: ``` #include <GL/glut.h> void init() { glClearColor(0.0, 0.0, 0.0, 0.0); glMatrixMode(GL_PROJECTION); gluOrtho2D(-1.0, 1.0, -1.0, 1.0); } void display() { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 1.0, 1.0); drawStar(); // 绘制五角星的外框 glFlush(); } void drawStar() { // 定义五角星的顶点坐标 GLfloat vertices[10][2] = { {0.0, 0.5}, {0.15, 0.15}, {0.5, 0.18}, {0.25, -0.05}, {0.38, -0.4}, {0.0, -0.2}, {-0.38, -0.4}, {-0.25, -0.05}, {-0.5, 0.18}, {-0.15, 0.15} }; glLineWidth(2.0); // 设置线条宽度 // 旋转变换,绘制五角星的不同角度 for (int i = 0; i < 5; i++) { glRotatef(72.0, 0.0, 0.0, 1.0); // 旋转 72 度 glBegin(GL_TRIANGLE_FAN); glColor3f(1.0, 1.0, 0.0); // 设置颜色 glVertex2fv(vertices[0]); // 设置中心点 for (int j = 0; j <= 4; j++) { glColor3f(0.0, 0.0, 1.0); // 设置颜色 glVertex2fv(vertices[j*2+1]); } glColor3f(0.0, 0.0, 1.0); // 设置颜色 glVertex2fv(vertices[1]); glEnd(); } } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(500, 500); glutInitWindowPosition(100, 100); glutCreateWindow("OpenGL 画五角星"); init(); glutDisplayFunc(display); glutMainLoop(); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值