IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 1. 使用glut库画一个矩形(详细注释) -> 正文阅读

[C++知识库]1. 使用glut库画一个矩形(详细注释)

《计算机图形学》学习笔记


直接贴代码

/*  *  *  *  *  *  *  *  *  *  *  *  *  *  *
 * @Author       : Elan L
 * @LastEditTime : 2022-05-03 22:06:31
 *  *  *  *  *  *  *  *  *  *  *  *  *  *  */
#include "glut.h"

//设置渲染状态
void SetupRC(void)
{
    //将清除颜色设置为蓝色,最后一个参数是alpha,理解为透明度
    glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
}

//当窗口改变大小时有glut函数库调用
// w和h是当前应用程序窗口的宽和高
void ChangeSize(int w, int h)

{
    GLfloat aspectratio;

    if (h == 0)
        h = 1; //防止divide by zero

    //把视口设置为窗口的大小
    /*
     *接收4个参数,
    前2个参数指定了窗口内部视口的左下角,通常都是0,
    width和height参数指定了视口的大小(以像素为单位,视口=等于窗口内的渲染区域
    */
    glViewport(0, 0, w, h);

    /*
     *重置坐标系统
    glOrtho()函数并不建立裁剪区域,只是修改裁剪区域,如果没有该重置
    在glOrtho()函数被调用之后,将会导致目标裁剪区域被破坏,甚至导致矩形无法显示
    */
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    //使正方形时刻保持正方
    //建立裁剪区域(左右下上近远)
    aspectratio = (GLfloat)w / (GLfloat)h;
    if (w <= h)
        /*
         *创建正投影
        void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far);
        left和right值指定了沿x轴的最小坐标值和最大坐标值
        bottom和top指定了沿y轴的最小坐标值和最大坐标值,
        near和far指定了沿z轴的最小坐标值和最大坐标值,负数表示沿着观察者的负方向远去
        */
        glOrtho(-100.0, 100.0, -100.0 / aspectratio, 100.0 / aspectratio, -100, 100);

    else

        glOrtho(-100.0 * aspectratio, 100.0 * aspectratio, -100.0, 100.0, -100, 100);

    //这两行代码高速opengl,以后所有的变换都将影响这个模型
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

void RenderScene(void)
{
    //用当前颜色清除窗口
    glClear(GL_COLOR_BUFFER_BIT);

    //把绘图颜色设置为红色,不需要要指定alpha参数,默认1.0表示完全不透明
    glColor3f(1.0f, 0.0f, 0.0f);

    //用当前颜色绘制一个填充矩形
    /*
     *该函数接受4个浮点类型的参数,表示了两个坐标对(x1, y1) (x2, y2);
    void glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2);
    第一对坐标表示矩形的左上角,第二对坐标表示矩形的右下角
    openGL通用回调函数 ChangeSize()把这些坐标映射到实际的窗口坐标,
    该回调函数每当窗口大小改变(拉伸、最大化)时,就会被调用
    */
    glRectf(-25.0f, 25.0f, 25.0f, -25.0f);

    //刷新绘图命令
    glFlush();
}

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); // RGB模式,单缓冲,另一种是双缓冲

    glutInitWindowPosition(400, 200);
    glutInitWindowSize(800, 800);
    glutCreateWindow("第一次OpenGL作业"); //参数是窗口标题

    glutDisplayFunc(RenderScene);
    glutReshapeFunc(ChangeSize);
    SetupRC();

    //这个函数在程序中只能调用一次,直到程序终止才返回
    //处理所有操作系统特听的消息,击键等事件
    glutMainLoop();

    return 0;
}

运行结果
在这里插入图片描述
改变窗口大小
在这里插入图片描述

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 10:59:30  更:2022-05-05 11:00:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 21:42:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码