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

原创 2016年08月30日 21:11:59

这篇文章是根据这个教程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);//配置选项设置主版本为opengl3
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);//设置次版本为3
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);//告诉GLFW使用core-profile
    glfwWindowHint(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);
}
运行结果

版权声明:本文为博主原创文章,未经博主允许不得转载。

OpenGL程序中与glew相关的未处理异常的解决方案

转自:http://blog.csdn.net/niexiao2008/article/details/8898171 问题:程序中已经正确包含glew相关的头文件和库文件,glew...
  • xiaoxiaoyusheng2012
  • xiaoxiaoyusheng2012
  • 2015年02月28日 23:27
  • 1704

用glew,glfw实现opengl学习笔记5课纹理(2)

文章是照着教程点击打开链接  写的第二部分纹理,实现两个纹理的混合,纹理单元的使用。加载图片时候使用的FreeImage 这是个开源的加载照片的 源代码点击打开链接  选择里面shader2文件夹,按...
  • qq_28637193
  • qq_28637193
  • 2016年09月11日 13:06
  • 1067

mac下使用glew库,方法

主要参考http://www.cnblogs.com/openxxs/p/4055916.html 整理自之前使用的163博客原创文章。 GLSL项目中需要使用GLEW库,因此先要安装GLEW库...
  • huyisu
  • huyisu
  • 2015年01月15日 15:52
  • 6980

GLFW 简单入门学习

write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie讨论新闻组及文件概要    实际学习使用GLFW创建窗口,并绘制图形。作为比较,可以参考一篇关于SDL...
  • vagrxie
  • vagrxie
  • 2010年07月15日 23:01
  • 30390

glew,glfw实现最新的opengl-学习笔记4实现纹理

这篇文章是利用着色器给画的图形添加上纹理,参照着教程教程链接书写的,可能上面的源代码点击失效,到这个教程的英文版去找源码链接  文中的加载图片和纹理的路径使用的绝对路径,所以要根绝自己的情况更改代码中...
  • qq_28637193
  • qq_28637193
  • 2016年09月11日 10:59
  • 820

GLFW入门学习

一、提要         这次还是做图形学的研究,最底层的渲染当然是OpenGL,但在框架的选择上,排除了Qt和glut,前者太庞大,后者已经“死了”(虽然红包书还是以它为例)。         ...
  • qp120291570
  • qp120291570
  • 2012年10月21日 15:37
  • 7641

用glew,glfw,FreeImage实现opengl学习笔记6坐标变换

这个代码参考教程点击打开链接  这个教程很详细,代码是实现坐标的转换,教程带源码,我仿照源码在自己本地的实现,这里给大家参考使用加载图片是用的FreeImage是一个开源的加载图片的,网上的资料也挺多...
  • qq_28637193
  • qq_28637193
  • 2016年09月11日 16:39
  • 923

【OpenGL开发】关于GLEW扩展库

GLEW是一个跨平台的C++扩展库,基于OpenGL图形接口。使用OpenGL的朋友都知道,window目前只支持OpenGL1.1的涵数,但 OpenGL现在都发展到2.0以上了,要使用这些Open...
  • LG1259156776
  • LG1259156776
  • 2017年03月08日 20:43
  • 830

如何使用glew

使用glew glew也是一个扩展库,包含了OpenGL中许多核心及扩展函数,现在的版本是1.7,支持OpenGL4.2,可以到这里下载:http://glew.sourceforge.net/ ...
  • doctorsc
  • doctorsc
  • 2011年10月11日 10:31
  • 16813

opengl 渲染四边形的方式

opengl 渲染四边形的方式
  • cloud95
  • cloud95
  • 2014年10月13日 14:26
  • 1302
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用glew,glfw实现opengl绘制3D学习笔记1-实现一个窗口
举报原因:
原因补充:

(最多只允许输入30个字)