Glew的配置与使用

openGL学习笔记六: glew库及使用   window默认支持到OpenGL1.3,后续也没有更新,opengl并不是以API更新或者新的开发包方式更新功能,它使用了扩展方式获取高版本新的功能。 如执行扩展功能函数glArrayElementEXT:代码如下 char* ext = (char*)glGetString(GL_EXTENSIONS); //获取该电脑显卡支持的扩展函数结合 PFNGLAR... 阅读详情

参考网址:https://learnopengl-cn.github.io/legacy/

编译和链接GLEW

  • OpenGL定义的这些GL基元类型的内存布局是与平台无关的,使用GL基元类型可以保证你的程序在不同的平台上工作一致。
  • GLEW是OpenGL Extension Wrangler Library的缩写,因为GLEW也是一个库,我们同样需要构建并将其链接进工程。
  • Glew的下载地址为:http://glew.sourceforge.net/index.html
  • 对于Glew的选择,如果不确定的话,选择32位的二进制版本。
  • 使用GLEW的静态版本glew32s.lib(注意这里的“s”),将库文件添加到你的库目录,将include内容添加到你的include目录。接下来,在VS的链接器选项里加上glew32s.lib

GLEW的初始化

  • GLEW是用来管理OpenGL的函数指针的,所以在调用任何OpenGL的函数之前我们需要初始化GLEW。
  • 我们在初始化GLEW之前设置glewExperimental变量的值为GL_TRUE,这样做能让GLEW在管理OpenGL的函数指针时更多地使用现代化的技术。

视口

  • 我们必须告诉OpenGL渲染窗口的尺寸大小,这样OpenGL才只能知道怎样相对于窗口大小显示数据和坐标。
  • 我们可以通过调用glViewport函数来设置窗口的维度。
  • glViewport函数前两个参数控制窗口左下角的位置。第三个和第四个参数控制渲染窗口的宽度和高度(像素)。
  • 实际上也可以将视口的维度设置为比GLFW的维度小,这样子之后所有的OpenGL渲染将会在一个更小的窗口中显示。
  • OpenGL幕后使用glViewport中定义的位置和宽高进行2D坐标的转换,将OpenGL中的位置坐标转换为你的屏幕坐标。处理过的OpenGL坐标范围只为-1到1。
  • 具体的应用示例:

输入

  • 按键回调是众多回调函数中的一种。当我们设置了按键回调之后,GLFW会在用户有键盘交互时调用它。
  • 按键回调函数接受一个GLFWwindow指针作为它的第一个参数;第二个整形参数用来表示按下的按键;action参数表示这个按键是被按下还是释放;最后一个整形参数表示是否有Ctrl、Shift、Alt、Super等按钮的操作。
  • 具体的示例:
  • 上述实例说明:在我们(新创建的)key_callback函数中,我们检测了键盘是否按下了Escape键。如果键的确按下了(不释放),我们使用glfwSetwindowShouldClose函数设定WindowShouldClose属性为true从而关闭GLFW。main函数的while循环下一次的检测将为失败,程序就关闭了。
  • 最后就是通过GLFW注册我们的函数至合适的回调:

SOIL

  • SOIL是简易OpenGL图像库(Simple OpenGL Image Library)的缩写,它支持大多数流行的图像格式。
  • SOIL的下载网址:http://www.lonesock.net/soil.html
  • 要想使用SOIL必须自己生成.lib。可以使用/projects文件夹内的任意一个解决方案(Solution)文件。还要添加src文件夹里面的文件到includes文件夹;将SOIL.lib添加到链接器选项,并在代码文件的开头加上#include <SOIL.h>
  • 使用SOIL加载图片的示例:
  • 函数首先需要输入图片文件的路径。然后需要两个int指针作为第二个和第三个参数,SOIL会分别返回图片的宽度高度到其中。后面我们在生成纹理的时候会用图像的宽度和高度。第四个参数指定图片的通道(Channel)数量,但是这里我们只需留为0。最后一个参数告诉SOIL如何来加载图片:我们只关注图片的RGB值。结果会储存为一个很大的char/byte数组。

生成纹理

  • 纹理是使用ID引用的。glGenTextures函数首先需要输入生成纹理的数量,然后把它们储存在第二个参数的GLuint数组中。
  • 我们需要绑定它,让之后任何的纹理指令都可以配置当前绑定的纹理。
  • 我们可以使用前面载入的图片数据生成一个纹理了。纹理可以通过glTexImage2D来生成:
  • 当调用glTexImage2D时,当前绑定的纹理对象就会被附加上纹理图像。然而,目前只有基本级别(Base-level)的纹理图像被加载了,如果要使用多级渐远纹理,我们必须手动设置所有不同的图像(不断递增第二个参数)。或者,直接在生成纹理之后调用glGenerateMipmap。这会为当前绑定的纹理自动生成所有需要的多级渐远纹理。
  • 释放图像的内存并解绑纹理对象操作。
  • 生成一个纹理的完整过程

纹理单元

  • 一个纹理的位置值通常称为一个纹理单元,一个纹理的默认纹理单元是0,它是默认的激活纹理单元。
  • 使用glUniform1i,我们可以给纹理采样器分配一个位置值,这样的话我们能够在一个片段着色器中设置多个纹理。
  • 纹理单元的主要目的是让我们在着色器中可以使用多于一个的纹理。通过把纹理单元赋值给采样器,我们可以一次绑定多个纹理。
  • 我们可以使用glActiveTexture激活纹理单元,传入我们需要使用的纹理单元:
  • 激活纹理单元之后,接下来的glBindTexture函数调用会绑定这个纹理到当前激活的纹理单元。纹理单元GL_TEXTURE0默认总是被激。
  • 我们需要编辑片段着色器来接收另一个采样器,具体的演示示例如下:
  • 最终输出颜色现在是两个纹理的结合。GLSL内建的mix函数需要接受两个值作为参数,并对它们根据第三个参数进行线性插值。如果第三个值是0.0,它会返回第一个输入;如果是1.0,会返回第二个输入值。0.2会返回80%的第一个输入颜色和20%的第二个输入颜色,即返回两个纹理的混合色。
  • 先绑定两个纹理到对应的纹理单元,然后定义哪个uniform采样器对应哪个纹理单元:
  • 我们使用glUniform1i设置uniform采样器的位置值,或者说纹理单元。通过glUniform1i的设置,我们保证每个uniform采样器对应着正确的纹理单元。
  • 根据上图可以发现:纹理上下颠倒了。这是因为OpenGL要求y轴0.0坐标是在图片的底部的,但是图片的y轴0.0坐标通常在顶部。一些图片加载器比如Devil在加载的时候有选项重置y原点,但是SOIL没有。
  • SOIL却有一个叫做SOIL_load_OGL_texture函数可以使用一个叫做SOIL_FLAG_INVERT_Y的标记加载生成纹理,这可以解决我们的问题。不过这个函数用了一些在现代OpenGL中失效的特性。
  • 修复我们的小问题,有两个选择:

  • (1)我们可以改变顶点数据的纹理坐标,翻转y值(用1减去y坐标)。
  • (2)我们可以编辑顶点着色器来自动翻转y坐标,替换TexCoord的值为TexCoord = vec2(texCoord.x, 1.0f - texCoord.y);

摄像机-自由移动

  • 首先我们必须设置一个摄像机系统,所以在我们的程序前面定义一些摄像机变量很有用:
  • 我们首先将摄像机位置设置为之前定义的cameraPos。方向是当前的位置加上我们刚刚定义的方向向量。
  • 当我们按下WASD键的任意一个,摄像机的位置都会相应更新。如果我们希望向前或向后移动,我们就把位置向量加上或减去方向向量。如果我们希望向左右移动,我们使用叉乘来创建一个右向量(Right Vector),并沿着它相应移动就可以了。这样就创建了使用摄像机时熟悉的扫射(Strafe)效果。
  • 因为大多数事件输入系统一次只能处理一个键盘输入,它们的函数只有当我们激活了一个按键时才被调用。
OpenGL入门-glew 1 glew简介 OpenGL Extension Wrangler Library (GLEW) 是一个跨平台的开源 C/C++ 扩展加载库。GLEW 提供了高效的运行时机制,用于确定目标平台上支持哪些 OpenGL 扩展。OpenGL 核心和扩展功能在单个头文件中公开。GLEW已经在各种操作系统上进行了测试,包括Windows,Linux,Mac OS X,FreeBSD,Irix和Solaris。 官网链接:GLEW:OpenGL Extension Wrangler Library (sourc 阅读详情

相关推荐

GLEW配置

下载地址:GLEW binaries是已经编译好的版本 zip的是可以自己编译的 将其下载后解压,文件结构为: build文件夹下有VS的解决方案: 图中vc2012为VS2013的解决方案 我们可以通过打开这个解决方案,然后生成,则会生成相应的静态库,动态库 glew_shared生成的是动态库,glew_static

孤独de守候的专栏 5402

glew-2.1.0.zip

glew-2.1.0.zip,openGL 学习必须品,解压即可使用(凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数)

glutglew配置

1. glut配置: Windows环境下的GLUT下载地址:(大小约为150k) http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip 解压得到五个文件, 将glut.h放置在VC目录include下,即 【Microsoft Visual Studio安装路径\VC\includ

Yi_M的博客 4249

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

这里是一个想要入行游戏行业的平平无奇大学生,希望能够通过写博客来巩固自己学的知识。在“openGl新手入门学习笔记(一)”里提到了古典openGl(旧版openGl)的概念,值得一提的是旧版openGl早已经不被使用了。 旧版OpenGL 新版OpenGL:https://blog.csdn.net/watersevenmmfx/article/details/106344145现在所使用的现代openGl是一个个早就在你的显卡驱动里写好的二进制文件,它们早就存在在你的电脑里了,我们需要特殊的工具来调用

qq_42741249的博客 1万+

glew工作原理

glew工作原理 OpenGL版本演进 在介绍glew工作原理之前需要了解一下OpenGL版本相关的信息。 自OpenGL 3.0就开始酝酿deprecation model(废止模型),标记了未来版本会从Core去掉的特性(此前每次OpenGL协议更新基本都在增加特性,但这次开始决定去掉包袱,从核心特性中删减一些内容)。但3.0并没有实际去删减函数,而是利用设置glXCreateContextAttribsARB函数GLX_CONTEXT_FLAGS_ARB属性的GLX_CONTEXT_FORWARD_C

weixin_42286815的博客 1630

配置freeglut和glew

配置freeglut GLUT 代表OpenGL Utility Tookit。Mark J.Kilgard 为了使OpenGL应用程序结构能够真正独立于窗口系统构思了GLUT库。 Freeglut是一个GLUT的开源实现。具体配置步骤如下:   下载freeglut http://nchc.dl.sourceforge.net/project/freeglut/freeglut/2

—— 然 之 5万+

配置OpenGL glew

配置好freeglut之后,我们开始给OpenGL环境配置glew库。 下载glew  http://glew.sourceforge.net/ 这次我们下载Binar文件,下载后解压。 这一步没什么难点,在bin,lib,include里找到我们需要的文件后,参考freeglut拷贝到对应目录就好。 注意32位和64位的问题,我VS用的32位Release,所以我选用32位的

linian71的专栏 2738

从零开始的OpenGL之路(1)——配置GLEW

虽然我们在上一节已经配置好了glfw库,但是还需要一些操作才能使用现代OpenGL。按照惯例,先说说为什么要配置glew库。我们已经知道OpenGL只是一个规范,其本身并没有实现这些方法,具体的实现是由驱动开发商针对特定显卡实现的。所以如果我们要使用这些函数就需要手动获取这些函数。这个过程繁杂且无法实现跨平台,幸运的是有一些现成的库可以帮我们访问显卡驱动,取得对应函数的函数指针并链接起来,比如我们要使用的——GLEW。下面我们来看看怎么配置GLEW库。 之后的操作和之前配置GLFW库是一样的。 OK,感谢你

weixin_53082945的博客 2093

Mac平台配置OpenGL(glut,glew

//oepngl库 opengl原生库gl* 随opengl一起发布 opengl实用库glu* 随opengl一起发布 opengl实用工具库glutglut* 需要下载配置安装(太老了!) opengl实用工具库开源版本freeglutglut* 需要下载配置安装(完全兼容glut,算是glut的代替品,但是bug较多!) opengl GLFW库glfw* 需要下载配置安装(轻量级的,开源的,跨平台的library,新技术) opengl GLEW库...

weixin_45574610的博客 4585

OpenGL配置glew库的配置全过程

网上下载glew库  http://glew.sourceforge.net/  打不开则刷新几次 以GLEW1.9.0为例,点击进去, 因为我准备用32位的环境用这个库,所以点击下面这个选项,稍等一会,自动开始下载 解压后,将glew-1.9.0文件夹下的include和lib这两个文件中的东西分别放进我以前的OpenGL文件夹中的对应位置 将bin文件夹下的两个dll文件复...

qq_41843732的博客 3475

GLEW + GLFW 配置 OpenGL 开发环境

SourceLink 配置步骤 附注 SourceLink 1、GLEW 2、GLFW 3、GLFW初体验 4、GLEW+VS2010配置 5、GLEW | GLFW | OPENGL | MESA 3D 配置步骤 1、下载GLEW1.13.0和GLFW3.1.1 2、解压,在其build的目录下有v12等工程文件,打开,编译,Debug版本可以得到g...

TwinkleStar0121 2012

vscode 通过GLFW,GLEW 配置使用 OpenGL 的方法

新建项目 首先建立一个文件夹作为工作区 在vscode中打开该文件夹,新建一个main.cpp文件 按下F5,然后选择C++ (GDB/LLDB),然后选择g++.exe 运行成功 我们发现目录下多了一个.vscode/tasks.json文件,这个我们待会要配置配置GLFW 百度一下GLFW,进入官网,然后点击Download,根据需要选择对应版本(这里下载的是二进制文件,无需自己编译) 进入解压后的文件夹,将我们用到的文件夹复制一下 新建一个文件夹d

Amdone的博客 7697

OpenGL库 资源下载

下载GLEW库 有了GLEW扩展库,你就再也不用为找不到函数的接口而烦恼,因为GLEW能自动识别你的平台所支持的全部OpenGL高级扩展函数。也就是说,只要包含一个glew.h头文件,你就能使用gl,glu,glext,wgl,glx的全部函数。 进入官网 www.opengl.org 然后找到 openglsdk 按钮点击进入 继续点击Libraries 然后可以看到所有opengl相关的库 ...

weixin_43737238的博客 9445

【小沐学OpenGL】Ubuntu环境下glew的安装和使用

Linux 系统中的 OpenGL 是一个跨语言、跨平台的应用程序编程接口(API),用于渲染2D和3D矢量图形。glxinfo:这是一个用于查询关于 OpenGL 图形系统的信息的命令行工具。它提供了关于图形硬件、驱动程序以及支持的 OpenGL 扩展的详细信息。grep:这是一个文本搜索工具,用于搜索文本文件或输出中匹配特定模式的行。在这里,它用于搜索包含“version”这个词的行。

爱看书的小沐 4382

【openGL学习笔记】----GLFW、GLAD环境配置

GLFW已经提供为Visual Studio(2012到2022都有)预编译好的二进制版本和相应的头文件。通常来说glad和glfw配合使用来提供更高效的渲染和更好的跨平台支持‌。定义OpenGL的版本,并且根据这个版本加载所有相关的OpenGL函数。GLAD是一个开源的库,使用了一个。编译没有报错说明已经配置成功。

qq_45031489的博客 1953

GLFW和GLEW

GLFW 主要负责窗口管理和 OpenGL 上下文的创建管理。它让你能够在窗口中渲染图形,处理输入,设置显示模式等。GLEW 的主要作用是提供 OpenGL 扩展的支持,尤其是加载和管理 OpenGL 的函数指针。它帮助开发者轻松使用现代 OpenGL 特性,而不需要直接处理扩展的加载和兼容性问题。GLFW 是一个用于创建窗口、管理 OpenGL 上下文、处理输入的库。GLEW 是一个用于加载 OpenGL 扩展、管理 OpenGL 函数指针的库。

qq_43287763的博客 1785

OpenGL学习----程序库编译-glew

2.2 glew 2.2.1 简介 OpenGL扩展Wrangler库(GLEW)是一个跨平台的开源C/C++扩展加载库。GLEW提供了高效的运行时机制来确定目标平台上支持哪些OpenGL扩展。OpenGL核心和扩展功能在单个头文件中公开。 特征: 支持核心OpenGL 4.6和超过399个扩展 在Windows,Linux,Mac OS X,FreeBSD,Irix和Solaris上进行了...

charce_you的专栏 2130

Windows11环境下visual studio2022配置OpenGL的glfw、glew、glad库

OpenGL入门,配置visual studio的常用库

weixin_45636742的博客 4822
上一篇: 一步步学OpenGL-《着色器》代码问题
下一篇: 稀疏矩阵操作
铿锵的玫瑰
博客等级 码龄10年 236粉丝 461原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值