OpenGL环境搭建参考博客:VS2015下OpenGL库的配置

#include<GL\glew.h>
#include<GLTools.h>
#include<GLShaderManager.h>

#ifdef __APPLE__
#include<GL\glut.h>
#else
#define FREEGLUT_STATIC
#include<GL\glut.h>
#endif

GLShaderManager    shaderManager;    //    声明一个着色器管理器的实例
GLBatch triangleBatch;    //    声明一个GLBatch实例

    //    窗口大小改变函数
void ChangeSize(int w,int h) {
    //    修改视窗的大小
    glViewport(, , 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
    };

    //    下面代码建立一个三角形的批次,仅包含三个顶点
    triangleBatch.Begin(GL_TRIANGLES, );
    triangleBatch.CopyVertexData3f(vVerts);
    triangleBatch.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 };
    shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed);
    triangleBatch.Draw();    //    指示将集合图形提交到着色器

    glutSwapBuffers();

}

//    主函数
int main(int argc, char *argv[]) {
    gltSetWorkingDirectory(argv[]);

    // 调用glutInit函数传输命令行参数并初始化GLUT库
    glutInit(&argc, argv);

    //    告诉GLUT库,在创建窗口时要使用那种类型的显示模式
    //    GLUT_DOUBLE表示双缓冲窗口,GLUT_RGBA表示RGBA颜色模式
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);

    //设置GLUT窗口的大小,创建以"Triangle"为标题的窗口
    glutInitWindowSize(, );
    glutCreateWindow("Triangle");

    //为改变窗口大小而设置一个回调函数
    //注册一个函数以包含OpenGL渲染代码
    glutReshapeFunc(ChangeSize);
    glutDisplayFunc(RenderScene);

    //    调用glewInit初始化GLEW库
    //    检查取人驱动程序初始化过程无问题
    GLenum err = glewInit();
    if (GLEW_OK != err) {
        fprintf(stderr, "GLEW Error:%s\n", glewGetErrorString(err));
        ;
    }

    SetupRC();

    //    glutMainLoop函数负责处理所有操作系统特定的消息、按键动作等直到我们关闭程序
    glutMainLoop();
    ;

}

运行结果:

OpenGL学习笔记:第一个OpenGL程序的更多相关文章

  1. c++学习笔记---03---从一个小程序说起2

    从一个小程序说起2 要求:编写一个程序,要求用户输入一串整数和任意数目的空格,这些整数必须位于同一行中,但允许出现在该行中的任何位置.当用户按下键盘上的"Enter"键时,数据输入 ...

  2. c++学习笔记---02---从一个小程序说起

    从一个小程序说起 这一讲的主要目的是帮助大家在C语言的背景知识上与C++建立联系. 问题探索 问题:对一个整型数组求和. 要求:定义一个存储着 n 个元素的数组,要求用C语言完成这个任务. 赶紧的:大 ...

  3. python新手第一天学习笔记-第一个ptyhon程序和python变量

    一.python 的注释和第一个python 程序 : 1.单行注释 # Author Xiajq 2.多行注释 ''' ------------注释内容----------------------- ...

  4. Android学习笔记_70_一个应用程序启动另一个应用程序的Activity

    第一种(我自己写的) :之前在网上看来一些,很多不是我要的可以启动另外一个应用程序的主Activity. //这些代码是启动另外的一个应用程序的主Activity,当然也可以启动任意一个Activit ...

  5. OpenGL学习笔记1——第一个程序

    学习的参考书基本是按照GL编程指南,如果有消息机制概念,对于GLUT的理解是很自然的.下面就按照自己写的第一个程序详细解释一下GL,还是比较容易上手的. 程序实现的功能是,根据当前随即种子摇出来的结果 ...

  6. OpenGL学习笔记之了解OpenGL

    OpenGL(全写Open GraphicsLibrary)是个定义了一个跨编程语言.跨平台的编程接口规格的专业的图形程序接口.它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库. 说 ...

  7. OpenGL学习笔记之配置OpenGL

    OpenGL是计算机图形学领域的一门入门语言,OpenGL开发库的一些文件在官网上可以下载到.里面包含三个文件,如下: 1.把在OpenGL开发库中LIB(库文件)glut.lib和glut32.li ...

  8. android菜鸟学习笔记5----第一个android程序

    程序功能:点击一个按钮,然后弹出一个提示信息 Step 1:在eclipse中新建一个android application project,在创建过程中不勾选create activity,这样就创 ...

  9. OpenGL学习笔记3——缓冲区对象

    在GL中特别提出了缓冲区对象这一概念,是针对提高绘图效率的一个手段.由于GL的架构是基于客户——服务器模型建立的,因此默认所有的绘图数据均是存储在本地客户端,通过GL内核渲染处理以后再将数据发往GPU ...

  10. OpenGL学习笔记:拾取与选择

    转自:OpenGL学习笔记:拾取与选择 在开发OpenGL程序时,一个重要的问题就是互动,假设一个场景里面有很多元素,当用鼠标点击不同元素时,期待作出不同的反应,那么在OpenGL里面,是怎么知道我当 ...

随机推荐

  1. 设备模型(device-model)之平台总线(bus),驱动(driver),设备(device)

    关于关于驱动设备模型相关概念请参考<Linux Device Drivers>等相关书籍,和内核源码目录...\Documentation\driver-model 简单来说总线(bus) ...

  2. markdown编辑器

    经过一番探索终于找到两个可以实时预览的markdown编辑器 一,sublime text 3 + MarkDown Editing + OmniMarkupPreviwer 安装方法网上均有,这里要 ...

  3. HDOJ 1284 钱币兑换问题

    转自:wutianqi http://www.wutianqi.com/?p=981 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1284 tag:母 ...

  4. Ubuntu上安装jdk,Jboss

    Ubuntu上安装jdk 1.使用wget命令或sft方式从oracle官方下载tar.gz格式的jdk1.7,由于ubuntu不支持rpm安装,需要转换,所以不选择rpm格式的jdk 2.使用tar ...

  5. javascript:Array.slice.call 到Array.prototype.slice.call

    举个从对象到数组的例子: var obj={}; obj[1]=1; obj[2]=2; obj.length=2; var arr =Array.prototype.slice.call(obj); ...

  6. 1、Spark 通过api,hfile两种形式获取hbase数据,简单样例

    pom内容: <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-se ...

  7. Vijos1523贪吃的九头龙【树形DP】

    贪吃的九头龙 传说中的九头龙是一种特别贪吃的动物.虽然名字叫"九头龙",但这只是说它出生的时候有九个头,而在成长的过程中,它有时会长出很多的新头,头的总数会远大于九,当然也会有旧头 ...

  8. C++ 将汉字转换成拼音全拼

    #include <string> using std::string; //======================================================= ...

  9. ios 继承关系图

  10. Go笔记-map

    [概念]     1- map 是引用类型的     2- 声明方式         var map1 map[keytype]valuetype             例如:var map1 ma ...