// GLTools库包含了一个用于操作矩阵和向量的3D数学库,并依靠GLEW获得OpenGL3.3中用来产生和渲染一些简单3D对象的函数,
// 以及对视觉平截头体、相机类和变换矩阵进行管理的函数的充分支持。
#include <GLTools.h>// GLShaderManager为GLTools的着色器管理器类。没有着色器,我们就不能再OpenGL(核心架构)中进行着色。着色器管理器类不仅允许我们创建并管理着色器,
// 还提供一组“存储着色器”(Stock Shader),它们能够进行一些初步和基本的渲染操作。
#include <GLShaderManager.h>// 判断程序是在Mac上还是在Windows上建立,并选择对应的函数库。
#ifdef _APPLE_
#include <glut/glut.h>
#else
#define FREEGLUT_STATIC
#include <GL/glut.h>
#endifGLBatch trangleBatch;
GLShaderManager shaderManager;void ChangeSize(int w, int h)
{// 设置视口大小。glViewport(0, 0, w, h);
}void SetupRc()
{// 用当前颜色清除窗口glClearColor(0.0f, 0.0f, 1.0f, 1.0f);// 初始化着色器
    shaderManager.InitializeStockShaders();// 在笛卡尔坐标系中指定三角形三个顶点的坐标。GLfloat vVerts[] = { -0.5f, 0.0f, 0.0f,0.5f, 0.0f, 0.0f,0.0f, 0.5f, 0.0f, };// 建立三角形的批次。trangleBatch.Begin(GL_TRIANGLES, 3);trangleBatch.CopyVertexData3f(vVerts);trangleBatch.End();
}void RenderScene(void)
{// 清除缓冲区(颜色缓冲区、深度缓冲区、模板缓冲区)。glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);// 指定三角形的颜色为红色。GLfloat vRed[] = { 1.0f, 0.0f, 0.0f, 1.0f };// 将颜色传递到存储着色器,即GLT_SHADER_IDENTITY着色器,这个着色器只是使用指定颜色以默认笛卡尔坐标系在屏幕上渲染几何图形。
    shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed);// 指示将几何图形提交到着色器。
    trangleBatch.Draw();// 启用双缓冲进行绘制。
    glutSwapBuffers();}int main(int argc, char* argv[])
{// 设置当前工作目录,在Windows中并不是必要的。gltSetWorkingDirectory(argv[0]);// 初始化GLUT库。glutInit(&argc, argv);// 在创建窗口时使用下列类型的显示模式:使用双缓冲窗口、RGBA颜色模式、启用深度测试以及模板测试。glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);// 设置窗口大小。glutInitWindowSize(800, 600);//  创建一个以“Triangle”为标题的窗口。glutCreateWindow("Triangle");// 窗口大小改变的回调函数。
    glutReshapeFunc(ChangeSize);// 窗口重绘的回调函数。
    glutDisplayFunc(RenderScene);// 重新调用GLEW库初始化OpenGL驱动程序中所有丢失的入口点,以确保OpenGL API对我们来说完全可用。GLenum err = glewInit();if (GLEW_OK != err){fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err));return -1;}// 创建并初始化渲染环境。
    SetupRc();// 启用主循环。
    glutMainLoop();return 0 ;}

View Code

程序运行结果:

转载于:https://www.cnblogs.com/ppffs/p/3230213.html

《OpenGL超级宝典第5版》学习笔记(一)—— 第一个OpenGL程序相关推荐

  1. C#.NET学习笔记2---C#.第一个C#程序

    C#.NET学习笔记2---C#.第一个C#程序 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:__________以前的网站现在不弄了,抱歉 6.第一个 ...

  2. MyBatis学习笔记2 ——第一个MyBatis程序

    MyBatis学习笔记2 --第一个MyBatis程序 参考教程B站狂神https://www.bilibili.com/video/BV1NE411Q7Nx 环境搭建 建立一个mybatis数据库用 ...

  3. Spark学习笔记1——第一个Spark程序:单词数统计

    Spark学习笔记1--第一个Spark程序:单词数统计 笔记摘抄自 [美] Holden Karau 等著的<Spark快速大数据分析> 添加依赖 通过 Maven 添加 Spark-c ...

  4. OpenGL学习笔记:第一个OpenGL程序完全注释

    运行环境: CentOS7 g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16) OpenGL实现厂商的名字:VMware, Inc. 渲染器标识符:Gallium ...

  5. OpenGL超级宝典第7版环境配置

    1.下载源码 地址:http://www.openglsuperbible.com/ 2.运行Cmake,编译glfw库 打开项目后,编译工程(Debug和Release下都编译). 把E:\open ...

  6. node学习笔记,第一个Node程序

    编辑 JavaScript代码将在Node环境中执行 first-node.js // 严格模式 'use strict';console.log('Hello, world.'); console. ...

  7. 学习笔记之04-第一个OC程序解析

    查看项目结构可以发现这个程序中只有一个源文件:main.m 打开main.m文件,代码如下 1 #import <Foundation/Foundation.h> 2 3 int main ...

  8. 廖雪峰官方网站python学习笔记:第一个Pyhon程序

    输入和输出 print() print()函数可以接受多个字符串,用逗号","隔开,就可以练成一串输出: >>>print('The quick brown fo ...

  9. OpenGL超级宝典学习笔记——操作矩阵

    为了更强大的功能和灵活性,我们有时需要直接操作矩阵.在OpenGL中4x4的矩阵用包含16个浮点数值的一维数组来表示,而不是用二维的4x4的数组来表示.OpenGL之所以这么做,因为使用一维数组更高效 ...

最新文章

  1. mhd格式三维图像显示_人体面骨三维有限元模型重构及碰撞分析
  2. sort(()={return Math.random()-0.5)}乱序数组不准确
  3. vue制作tab切换(vuex + 动画)
  4. TextView设置缩略显示
  5. ASP.NET 2.0中CSS失效的问题总结
  6. zip安装mysql没有软件,windows10系统安装mysql-8.0.13(zip安装) 的教程详解
  7. cesium 原生抛物线
  8. 错题集--大一C语言选择题
  9. RxJava学习 - 6. Disposing
  10. 【PP-15】定义成本构成结构
  11. 递归算法应用实例------八皇后算法
  12. Docker 存储卷
  13. php汉字转拼音百家姓版,Excel 将中文名改成拼音,并将姓氏放后面
  14. Linux哪个命令显示文件内容,显示文件内容的Linux命令有哪些?Linux培训
  15. 远峰科技“梦碎”科创板:资产负债率高企,主要产品价格下降
  16. 11个网站开发与设计中的社交媒体分享按钮的案例
  17. 圆通内鬼致40万条信息泄露?如何保障数据安全?它做了一个典范!
  18. 2018北邮网研机试-D
  19. 计算机专业毕业论文java毕业设计开题报告SSM项目源码幼儿园信息管理系统[包运行成功]
  20. 性能测试Loaderrunner

热门文章

  1. HDU2724 Tree【最小生成树】
  2. HASH 大量插入与查询
  3. 后台开发经典书籍--Redis深度历险:核心原理和应用实践
  4. STM32的IIC应用详解2
  5. 两个线程并发执行以下代码,假设a是全局变量,初始为1,那么以下输出______是可能的?
  6. 常考数据结构与算法:合并k个已排序的链表
  7. springboot:thymeleaf
  8. 拉格朗日乘数法学习笔记
  9. 基于可靠消息方案的分布式事务(四):接入Lottor服务
  10. Activiti学习——Activiti与Spring集成