这篇文章是根据这个教程http://bullteacher.com/4-hello-window.html实现的代码,在我的vs2012和windows10上运行成功


#define GLEW_STATIC
#include<GL/glew.h>
#include<iostream>#define GLFW_INCLUDE_GLU
#include<GLFW/glfw3.h>
using namespace std;
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode);
int main(void)
{ //------实例化窗口-------glfwInit();//初始化
<span style="white-space:pre"> </span>glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);//配置选项设置主版本为opengl3glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);//设置次版本为3glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);//告诉GLFW使用core-profileglfwWindowHint(GLFW_RESIZABLE, GL_FALSE);//用户不能调窗口的大小
<span style="white-space:pre"> </span>//----创建一个窗口的对象----
<span style="white-space:pre"> </span>GLFWwindow * window = glfwCreateWindow(800, 600, "LearnOpenGL",nullptr, nullptr);
<span style="white-space:pre"> </span>//第一个参数是宽度,第二个事长度,第三个是窗口的名称,后面两个参数可以忽略,函数返回一个GLFWWindow对象if (window == NULL)
{std::cout << "Failed to create GLFW window" << std::endl;glfwTerminate();return -1;
}
glfwMakeContextCurrent(window);//告诉GLFW创建窗口环境,这个环境是当前线程的主环境
//注册回调函数glfwSetKeyCallback(window, key_callback);//希望在调用任何OpenGL函数前初始化GLEW。glewExperimental = GL_TRUE;/*注意,在初始化GLEW前我们把glewExperimental变量设置为GL_TRUE。设置glewExperimental为true可以保证GLEW使用更多的现代技术来管理OpenGL机能。如果不这么设置,它就会使用默认的GL_FALSE,这样当使用core profile的时有可能发生问题。*/
if(glewInit() != GLEW_OK)
{std::cout << "Failed to initialize GLEW" << std::endl;return -1;
}
//在我们在开始渲染前,我们必须做最后一件事。我们必须告诉opengl渲染窗口大小
//前两个参数是左下角起始位置,后面两个是渲染窗口的大小,它和GLFW窗口是一样大的。
//我们可以把这个值设置得比GLFW窗口尺寸小;这样OpenGL的渲染都会在一个更小的窗口(区域)进行显示,我们可以在OpenGL的viewport之外显示其他的元素。
glViewport(0, 0, 800, 600);
/*
OpenGL幕后是使用特定的数据的,通过glViewport把这种2D坐标加工为屏幕上的坐标。比如,一个被加工的点的位置是(-0.5, 0.5)会
(作为它最后的变换)被映射到屏幕坐标(200, 450)上。注意,OpenGL中处理的坐标是在-1和1之间,所以我们事实上是把(-1到1)
*/
/*
我们不希望应用绘制了一个图像之后立即退出,然后关闭窗口。我们想让应用持续绘制
图像,监听用户输入直到软件被明确告知停止,为了达到目的我们必须建立一个while循环
,现在我们调用游戏循环(game loop),这样,我们告诉GLFW停止之前应用就会一直保持运行状态*/
while(!glfwWindowShouldClose(window))
{//glfwWindowShouldClose函数从开始便检验每一次循环迭代中gLFW是否已经得到关闭指示,如果得到这样的指示,函数就会返回true,
<span style="white-space:pre"> </span>//并且游戏循环停止运行,之后我们就可以关闭应用了。glClearColor(0.2f, 0.3f, 0.3f, 1.0f);glClear(GL_COLOR_BUFFER_BIT);glfwPollEvents();//检验是否有任务被触发了,(比如鼠标移动和键盘的输入事件),接着
<span style="white-space:pre"> </span>//调用相应的函数(我们可以通过回调方法设置他们)。我们经常在循环迭代事件中处理函数glfwSwapBuffers(window);//函数会交换颜色缓冲(颜色缓冲是一个GLFW窗口为每一个像素存储的颜色数值的最大缓冲)
<span style="white-space:pre"> </span>//它是这迭代中绘制的,也作为输出到显示在屏幕上
}glfwTerminate();//释放所有的资源return 0;}
//key_calllback回调函数,它在用户使用键盘的时候被调用。
/*按键输入函数的接收一个GLFWwindow参数,一个代表按下按键的整型数字,
一个特定动作,按钮是被按下、还是释放,一个代表某个标识的整数告诉你shift、control、alt或super是否被同时按下。每当一个用户按下一个按钮,
GLFW都会调用这个函数,为你的这个函数填充合适的参数。*/void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode)
{std::cout << key << std::endl;
<span style="white-space:pre"> </span>//当用户按下esc,我们就把windowShouldClose设置为ture,关闭应用if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)glfwSetWindowShouldClose(window, GL_TRUE);
}

运行结果

用glew,glfw实现opengl绘制3D学习笔记1-实现一个窗口相关推荐

  1. openGl新手入门学习笔记(二)下载glew,配置glew的环境与glew的初始化

    这里是一个想要入行游戏行业的平平无奇大学生,希望能够通过写博客来巩固自己学的知识. 一.现代OpenGl 在"openGl新手入门学习笔记(一)"里提到了古典openGl(旧版op ...

  2. C++ Opengl绘制3D源码

    C++ Opengl绘制3D源码 项目开发环境 项目功能 项目演示 项目源码传送门 项目开发环境 开发语言:C++和IDE:VS2017,操作系统Windows版本windows SDK8.1,三方库 ...

  3. C++ Opengl 绘制3D字体源码

    C++ Opengl 绘制3D字体源码 项目开发环境 项目功能 项目演示 项目源码传送门 项目开发环境 开发语言:C++和IDE:VS2017,操作系统Windows版本windows SDK8.1, ...

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

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

  5. DirectX 3D学习笔记(一)

    DirectX 3D学习笔记(一) Ⅰ.渲染状态 设备的渲染状态控制Direct3D设备的光栅化组件的行为.通过改变光栅渲染状态属性,可以设置使用何种方式来进行渲染着色,以及如何进行雾化等. 在Dir ...

  6. Direct 3D学习笔记(三)——光照与材质

    Direct 3D学习笔记(三)--光照与材质 现实世界中物体的颜色是一个复杂的系统,物体在不同的光照下,可能呈现在我们面前的就是不同的颜色.根据物理中的光学知识,物体在各种环境光照下,根据物体自身特 ...

  7. tensorflow学习笔记二——建立一个简单的神经网络拟合二次函数

    tensorflow学习笔记二--建立一个简单的神经网络 2016-09-23 16:04 2973人阅读 评论(2) 收藏 举报  分类: tensorflow(4)  目录(?)[+] 本笔记目的 ...

  8. Windows消息机制学习笔记(二)—— 窗口与线程

    Windows消息机制学习笔记(二)-- 窗口与线程 要点回顾 消息从哪里来? 实验一:Spy++捕获消息 实验二:消息捕获 消息到哪里去? 窗口在哪? 实验:分析CreateWindowExW 窗口 ...

  9. Spring学习笔记:第一个Spring Boot程序HelloWorld

    Spring学习笔记:第一个Spring Boot程序HelloWorld 一.跟着 Spring 了解技术趋势 1.看看 Spring 5.x 的改变暗示了什么 2.Spring Boot 和 Sp ...

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

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

最新文章

  1. 【转】Cvmat与IplImage的相互转换
  2. 如何通过一个类名找到它属于哪个jar包?
  3. 软考-信息系统项目管理师-项目组合管理
  4. python建立pip.ini
  5. hdfs java读写hdfs demo
  6. Qt文档阅读笔记-C++与QML混合编程(QML画饼状图)【通过信号与槽交互】
  7. 二级展开式斜齿圆柱齿轮减速器
  8. 京东云擎 php,为什么我登陆京东云擎控制台会错误?
  9. Java中如何实现数组输入和输出
  10. java web 开发——第一章jsp简介
  11. BZOJ4811: [Ynoi2017]由乃的OJ 重链剖分
  12. djangoday18
  13. 腾讯云短信服务实现 Java 发送手机验证码(SpringBoot+Redis 实现)
  14. win10 系统恢复后右键一直转圈卡死
  15. vb毕业设计——基于vb+VB.NET的媒体播放器设计与实现(毕业论文+程序源码)——媒体播放器
  16. 基因表达分析(上)- 差异表达分析
  17. gcc与linux内核,linux内核版本及其编译的gcc版本
  18. Docker 常用命令 - 镜像与容器
  19. 6010dn 华为 组网 胖ap_华为无线ap3010dn-agn刷成胖ap
  20. 链脉王亮:如何用电子名片玩转微信营销

热门文章

  1. 两个时间相减(vb.net)
  2. ASP.NET对IIS中的虚拟目录进行操作
  3. java多线程生产消费者_JAVA多线程实现生产者消费者的实例详解
  4. 条件注释判断浏览器版本
  5. HDU2044 一只小蜜蜂...
  6. Practical JAVA(三)关于final
  7. 如何将PDF转换成Word
  8. 安全狗云备份爆笑段子~~~如果上天再给我一次机会
  9. Nagios客户端的安装步骤(要监控的服务器)
  10. GridView“GridView1”激发了未处理的事件“PageIndexChanging”