openGL画不断变化位置|大小|角度|颜色的五角星


#include <windows.h>
#include <gl/gl.h>
#include <gl/glaux.h>
#include <math.h>
#include <time.h>

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

float starData[8];//存储目标五角星数据的全局变量
//按序为xc, yc, r1, r2, angle, R, G, B

void init()
{
    glClearColor(0.0, 0.0, 0.0, 1.0);//黑色背景
}

/**
版本号:2.0
功能:计算五角星的10个顶点坐标
参数:
    points      存放10个顶点坐标的数组
    xc, yc      中心坐标
    r1          五角星外面5个顶点所在圆的半径
    r2          里面5个顶点所在圆的半径,r2<r1
    angle       弧度表示的倾斜度,0为标准,数值增大表示向逆时针方向倾斜
**/
void getStarPoints(float points[10][2], float xc, float yc, float r1, float r2, float angle)
{
    const float PI = 3.14;

    int i, r;

    angle = angle + 0.1 * PI;

    for (i=0; i<=9; i++)
    {
        r = (i%2==0)?r1:r2;
        points[i][0] = xc + (float)r*cos(angle+i*0.2*PI);
        points[i][1] = yc + (float)r*sin(angle+i*0.2*PI);
    }

}

void render()
{
    int con;
    float points[10][2];

    getStarPoints(points, starData[0], starData[1], starData[2], starData[3], starData[4]);

    glColor3f(starData[5], starData[6], starData[7]);

    for (con=0; con<=9; con++)
    {
        glBegin(GL_LINES);
        glVertex2f(points[con][0], points[con][1]);
        glVertex2f(points[(con+1)%10][0], points[(con+1)%10][1]);
        glEnd();
    }
}

void CALLBACK draw()
{
    glClear(GL_COLOR_BUFFER_BIT);
    render();
    glFinish();
}

void CALLBACK change()
{
    int i;

    srand(time(NULL));

    i = rand()%300 + 100;   //xc从100到400
    starData[0] = (float)i;

    i = rand()%300 + 100;   //yc从100到400
    starData[1] = (float)i;

    i = rand()%40 + 60;     //r1从60到100
    starData[2] = (float)i;

    i = rand()%30 + 20;     //r2从20到50
    starData[3] = (float)i;

    i = rand()%6;           //偏转角度从0到6
    starData[4] = i/1.0f;

    i = rand()%200;         //RGB中红色的比例从0到1
    starData[5] = i/200.0f;

    i = rand()%200;         //RGB中绿色的比例从0到1
    starData[6] = i/200.0f;

    i = rand()%200;         //RGB中蓝色的比例从0到1
    starData[7] = i/200.0f;

    draw();
}

void main()
{
    auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);
    auxInitPosition(200, 100, 500, 500);
    auxInitWindow("CGOpenGL");

    init();

    auxIdleFunc(change);
    auxMainLoop(draw);

}

原文地址:https://www.cnblogs.com/RyanZhou/p/11509361.html

时间: 2024-08-29 00:39:34

openGL画不断变化位置|大小|角度|颜色的五角星的相关文章

opengl 对投影变化函数的理解

投影变化分两种: 1 . 平行投影       2 . 透视投影 投影变化的设置一般放在reshape函数当中调用 每次要对投影变化进行操作的时候我们需要修改矩阵的变化模式,指定它为投影变化 glMatrixMode(GL_PROJECTION); 用完了记得改回去让 视景体内的物体进行正常的视图变化 glMatrixMode(GL_MODELVIEW); 这里主要讲一下最近对透视投影的理解,以免以后自己又不记得了 透视投影主要的两个函数 void glFrustum(GLdouble left

通过transform属性改变图片的位置大小等信息

对UIImageView的位置大小方向的改变可以通过改变其transform属性值实现. 位置改变: var transform = CGAffineTransformMakeTranslation(50, 50) imgScenery.transform = transform 缩放: let transform = CGAffineTransformMakeScale(2, 2)  //高宽各缩放两倍 imgScenery.transform = transform 旋转: let tran

ios之如何让图片显示成圆形的样式/设置控件边框大小以及颜色

比如说QQ登陆头像显示出来的就是圆形的,但实际上它的图片并非就是圆形,而是通过对layer层进行绘制而成的.说到layer每个控件都会有layer层属性所以可以把任意的控件都可以设置成圆形,或是椭圆型看项目需要而定 UIImageView *imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"头像.png"]]; imageView.frame = CGRectMake(100, 100, 100, 1

计算机图形学(二)输出图元_2_ OpenGL画线函数

 OpenGL画线函数 图形软件包一般都提供一个描述一条或多条直线段的函数,其中每一直线段由两个端点坐标位置定义.在OpenGL中,和选择一个点位置一样,我们使用glVertex函数选择单个端点的坐标位置.我们使用一对glBegin/g1End来引入一串端点位置.有三个OpenGL符号常量可用于指定如何把这一串端点位置连接成一组直线段.默认情况下,每一符号常量显示白色实线. 使用图元线常量GL_LINES可连接每一对相邻端点而得到一组直线段.通常,这会导致一组未连接的线段,除非重复某些坐标位置.

【MFC系列】MFC快速设置控件文本字体、大小、颜色、背景

以静态文本为例,分享一下怎么修改文本字体.大小.颜色.背景等参数.其他文本.控件等可参照修改. 1.修改字体.大小 这个很简单,首先在Dlg类中声明一个CFont类型的成员变量: 然后在类的初始化函数OnInitDialog()中添加以下两行代码: 1 //设置静态文本字体大小 2 m_editFont.CreatePointFont(180, _T("宋体")); 3 m_Static.SetFont(&m_editFont); 2.改变编辑框文本颜色.背景颜色 右键点击该对

我给女朋友讲编程CSS系列(3) CSS如何设置字体的类型、大小、颜色,如何使用火狐浏览器的Firebug插件查看网页的字体

一.CSS如何设置字体的类型.大小.颜色 设计网页时,一般设置body的字体,让其他标签继承body的字体,这样设置特别方便,但是标题标签h1到h6和表单标签(input类型)是没有继承body的字体属性的,它们的字体需要单独设置. 1,  新建一个网页a.html,把下面的代码复制进去. <html> <head> <style type="text/css"> body { font-family : 微软雅黑,宋体; font-size : 1

修改 android ListView 字体大小及颜色

android中ListView的默认字体有时会满足不了设计的需求,需要设计自己的风格, 一般网上介绍的是新建一个自己的 ListView的适配器MyAdapter,现有另一种方法可避免新建MyAdapter的麻烦. 1.在res/layout/下新建 array_adapter.xml : 1 <?xml version="1.0" encoding="utf-8"?> 2 <TextView xmlns:android="http:/

TextView字体大小及颜色设置

TextView设置文字大小及颜色: 1.1)通过xml配置 <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="#FF0000" android:textSize="18sp"/> 1.2)通过代码设置(方式一) TextView textView = new T

ios8中的self sizing cell和ios7动态变化字体大小

1.ios7动态变化字体大小 self.titleLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleCaption2]; self.ssubLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody]; 2.ios8中的self sizing cell self.tableView.estimatedRowHeight = 44; self.tabl