opengl编程-课程实验

这篇博客详细介绍了OpenGL编程的课程实验,包括画五角星、线段和圆弧的扫描转换、填充图元以及图形几何变换。在画五角星的实验中,通过srand和rand()产生不同的伪随机数序列实现五角星的动态变换。实验二讲解了线段中点算法和内接正多边形逼近算法,并强调了避免错误的关键点。此外,还涉及了OpenGL中的glMatrixMode函数在指定当前矩阵模式中的应用。
摘要由CSDN通过智能技术生成

课程实验

试验一 画五角星

五角星(1) 只有一个五角星在屏幕上变换

#include<GL/glut.h>
#include<math.h>
#include <time.h>
const GLfloat PI = 3.1415926536f;
float x = 0.0f, y = 0.0f;
float r = 0.8f, p = 0.0;

void grawstar(float x, float y, float r, float p) {
    /* x,y圆心坐标,r 大圆半径,rr小圆半径*/
    glClear(GL_COLOR_BUFFER_BIT);
    glLineWidth(3);
    glBegin(GL_LINE_LOOP);  //以闭合折线方式
    glColor3f(1.0f, 0.0f, 0.0f);
    int i;
    float rr;
    float j;
    j = p * 2 * PI + PI / 10;
    rr = r * sin(PI / 10) / sin(7 * PI / 10);
    for (i = 0; i < 5; i++) {
        glVertex2f(x + r * cos(j), y + r * sin(j));
        glVertex2f(x + rr * cos(j + PI / 5), y + rr * sin(j + PI / 5));
        j = j + 2.0 * PI / 5.0;
    }
    glEnd();
    glFlush();
}
void change() {
    int i;
    srand(time(NULL)); //srand(int)来设种子,和 rand()连用,null 以系统时间

    i = rand() % 200;
    x = i / 100.0f + -1;

    i = rand() % 200;
    y = i / 100.0f + -1;

    i = rand() % 100;
    r = i / 100.0f;

    i = rand() % 100;
    p = i / 100.0f;
    grawstar(x, y, r, p);
}

void basicshape2(void)
{
    glClearColor(0.0, 1.0, 0.0, 1);
    glClear(GL_COLOR_BUFFER_BIT);  //清除帧缓存, 并将每个像素对应单元赋为设置背景颜色值,若没初始化这个,则透明
    grawstar(x, y, r, p);
}

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    glutInitWindowPosition(0, 0);
    glutInitWindowSize(1000, 1000);

    glutCreateWindow("Baisc Shape2");
    glutDisplayFunc(basicshape2);
    glutIdleFunc(change);  //不断调用,直到有窗口事件发生

    glutMainLoop();
    return 0;
}

五角星(2)  多个不同的五角星出现在屏幕上

#include<GL/glut.h>
#include<math.h>
#include <time.h>
//#include <windows.h>

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

// #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) //ÕâŸäÊDz»ÈÿØÖÆÌšŽ°Ìå³öÏÖ£¬Èç¹ûÏëÒª³öÏÖ£¬È¥µôŒŽ¿É¡£


const GLfloat PI = 3.1415926536f;
float x = 0.0f, y = 0.0f;
float r = 0.8f, p = 0.0;
float r1, g1, b1;

void grawstar(float x, float y, float r, float p, float r1, float g1, float b1) {
    glLineWidth(3);

    glColor3f(r1, g1, b1);
    glBegin(GL_LINE_LOOP);
    int i;
    float rr;
    float j;
    j = p * 2 * PI + PI / 10;
    rr = r * sin(PI / 10) / sin(7 * PI / 10);
    for (i = 0; i < 5; i++) {
        glVertex2f(x + r * cos(j), y + r * sin(j));
        glVertex2f(x + rr * cos(j + PI / 5), y + rr * sin(j + PI / 5));
        j = j + 2.0 * PI / 5.0;
    }
    glEnd();
    glFinish();

}
void change() {
    glClearColor(0.0, 1.0, 0.0, 1);
    glClear(GL_COLOR_BUFFER_BIT);
    int i;
    srand(time(NULL));
    for (int j = 0; j < 10; j++) {
//    srand(time(NULL));  //不可放在里面
        i = rand() % 200;
        x = i / 100.0f + -1;

        i = rand() % 200;
        y = i / 100.0f + -1;

        i = rand() % 100;
        r = i / 100.0f;

        i = rand() % 100;
        p = i / 100.0f;

        i = rand() % 100;
        r1 = i / 100.0f;

        i = rand() % 100;
        g1 = i / 100.0f;

        i = rand() % 100;
        b1 = i / 100.0f;

        grawstar(x, y, r, p, r1, g1, b1);
    }
    //   glFinish();
}

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    glutInitWindowPosition(0, 0);
    glutInitWindowSize(1000, 1000);

    glutCreateWindow("wujiaoxing");
    glutDisplayFunc(change);

    glutMainLoop();
    return 0;
}
  • srand(time(NULL)); 如果系统提供的种子没有变化,每次调用rand函数生成的伪随机数序列都是一样的。
    srand和rand()配合使
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
计算机图形学实验OPENGL可视化 计算机图形学实验 opengl 三个实验 附有具体代码 跟VC6一样的 一、下载并安装glut库 opengl的glut库 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。 Windows环境下的GLUT下载地址:(大小约为150k) http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip Windows环境下安装GLUT的步骤: 1、将下载的压缩包解开,将得到5个文件 2、在“我的电脑”中搜索“gl.h”,并找到其所在文件夹(Program Files\Microsoft Visual Studio\VC98\Include\GL文件夹”)。把解压得到的glut.h放到这个文件夹。 3、把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹(Program Files\Microsoft Visual Studio\VC98\lib”文件夹)。 4、把解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。(典型的位置为:C:\Windows\System32) 二、vc工程配置: 1)创建一个工程。glut 是一个console project ,你创建的时候必须创建console 以对应 . 2)链接OpenGL libraries。在Visual C++中先单击Project,再单击Settings,再找到Link单击, 在“分类”(Category)组合框里选择“输出”(output) ,再在“入口点”(Entry-point symbol)文本框里键入“mainCRTStartup” ,对一个现有的控制台应用程序,有一个简单的办法把它转换成Win32应用程序,这样可以摆脱那个命令行窗口。 3)单击Project Settings中的C/C++标签,将Preprocessor definitions 中的_CONSOLE改为__WINDOWS。最后单击OK。 增加下面的文件到“对象/库模块" (Object/library/modules):OpenGL32.lib glut32.lib glu32.lib (有时候不需要glut32.lib) 4)然后在stdafx.h文件中加入 #include #include #include #include #include 注意:#include 是需要的,不引入的话有时会报错。 完成后,就可以编写你自己的程序了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值