【OpenGL】初识OpenGL4.0
这篇文章主要是根据《OpenGL Shading Language Cookbook》一书翻译整理而得,介绍了环境的安装和一些基础知识。下面涉及到的库也可以到这里下载(Windows版)。
2014年9月26日更新:
擦!每次弄OpenGL光配置都弄得很头大。。。由于换了Mac电脑,下面补充了Mac下的注意事项(这时候突然觉得Windows这么方便。。。)
-----------------------------------------------------------------分割线-------------------------------------------------------------------
什么是GLSL
- QGLFormat format;
- format.setVersion(4,0);
- format.setProfile(QGLFormat::CoreProfile);
- QGLWidget *myWidget = new QGLWidget(format);
GLEW
安装GLEW
- 下载 GLEW源码。
- 解压 GLEW。
- 打开命令行窗口,使用"cd"命令进入解压后的 GLEW 目录。
- 执行"make"命令,编译 GLEW。(注:要执行 make 命令,必须先确保 XCode 安装了 Command Line Tools)。
- 执行"sudo -s",进入管理员权限。
- 执行"make install",将 GLEW 的头文件和库文件分别复制到 /usr/include 和 /usr/include/GL 目录中。
- 在 Qt 工程中,右击项目图标,在弹出的快捷菜单中选择"Add Library..."命令。在弹出的向导对话框中选择"External Library",指定 GLEW 库文件和头文件的目录位置,在"Platform"中只勾选"Mac"一项。完成 GLEW 库的导入。
- 在 Qt 工程中,右击项目图标,在弹出的快捷菜单中选择"Add Library..."命令。在弹出的向导对话框中选择"System Library",指定 OpenGL.framework 的目录位置(在 /System/Library/Frameworks 目录下),在"Platform"中只勾选"Mac"一项。完成 OpenGL.framework 库的导入。
- 在 Qt 工程中,右击项目图标,在弹出的快捷菜单中选择"Add Library..."命令。在弹出的向导对话框中选择"System Library",指定 QtOpenGL.framework 的目录位置(在 Qt 安装目录的 lib 目录下),在"Platform"中只勾选"Mac"一项。完成 QtOpenGL.framework 库的导入。因为即使不使用
QtOpenGL 库中的 API,在使用 Qt 窗口框架时,还是会用到 QGLWidget 类的。
使用GLEW
- #include <GL/glew.h>
- #include <GL/gl.h>
- #include <GL/glu.h>
在初始化GL后、调用任何OpenGL代码前,加入以下代码:
- GLenum err = glewInit();
- if( GLEW_OK != err )
- {
- fprintf(stderr, "Error initializing GLEW: %s\n",
- glewGetErrorString(err) );
- }
其他库
使用GLM库进行数学运算
安装GLM
使用GLM
- #include <glm/glm.hpp>
- #include <glm/gtc/matrix_transform.hpp>
- #include <glm/gtx/transform2.hpp>
然后你就可以使用glm命名空间进行编码了。下面是一个例子:
- glm::vec4 position = glm::vec4( 1.0f, 0.0f, 0.0f, 1.0f );
- glm::mat4 view = glm::lookAt( glm::vec3(0.0,0.0,5.0),
- glm::vec3(0.0,0.0,0.0),
- glm::vec3(0.0,1.0,0.0) );
- glm::mat4 model = glm::mat4(1.0f);
- model = glm::rotate( model, 90.0f, glm::vec3(0.0f,1.0f,0.0) );
- glm::mat4 mv = view * model;
- glm::vec4 transformed = mv * position;
不要使用下面的代码来引入glm的命名空间:
- using namespace glm;
这通常会引起命名空间的冲突。相反,你应该使用下面的代码来包含某一个符号:
- #include <glm/glm.hpp>
- using glm::vec3;
- using glm::mat4;
使用GLM作为OpenGL的输入
- #include <glm/glm.hpp>
- #include <glm/gtc/matrix_transform.hpp>
- ...
- glm::mat4 proj = glm::perspective( viewAngle, aspect,
- nearDist, farDist );
- glUniformMatrix4fv(location, 1, GL_FALSE, &proj[0][0]);
更多文档可以详见http://glm.g-truc.net(需要翻墙)。
使用GLFW进行窗口管理
【OpenGL】初识OpenGL4.0的更多相关文章
- 【AR实验室】OpenGL ES绘制相机(OpenGL ES 1.0版本)
0x00 - 前言 之前做一些移动端的AR应用以及目前看到的一些AR应用,基本上都是这样一个套路:手机背景显示现实场景,然后在该背景上进行图形学绘制.至于图形学绘制时,相机外参的解算使用的是V-SLA ...
- 在 OpenGL ES 2.0 上实现视差贴图(Parallax Mapping)
在 OpenGL ES 2.0 上实现视差贴图(Parallax Mapping) 视差贴图 最近一直在研究如何在我的 iPad 2(只支持 OpenGL ES 2.0, 不支持 3.0) 上实现 视 ...
- Beginning OpenGL ES 2.0 with GLKit Part 1
Update 10/24/12: If you’d like a new version of this tutorial fully updated for iOS 6 and Xcode 4.5, ...
- OpenGL ES 3.0 基础知识
首先要了解OpenGL的图形管线有哪些内容,再分别去了解其中的相关的关系: 管线分别包括了顶点缓冲区/数组对象,定点着色器,纹理,片段着色器,变换反馈,图元装配,光栅化,逐片段操作,帧缓冲区.其中顶点 ...
- OpenGL ES 3.0 点,线,三角形绘制形式总结
OpenGL ES 3.0 顶点 -1, 1, 0, -0.5f, 0, 0, 0, -1, 0, -1, 0, 0, 0.5f, 0, 0, 1, -1, ...
- Android OpenGL ES 3.0 纹理应用
本文主要演示OpenGL ES 3.0 纹理演示.接口大部分和2.0没什么区别,脚本稍微有了点变化而已. 扩展GLSurfaceView package com.example.gles300; im ...
- OpenGL ES 2.0 混合
混合技术 混合技术就是将俩个片元调和,主要用于将通过各项测试准备进入帧缓冲的片元(源片元)与原有片元按照设定的比例加权计算出最终片元的颜色值. OpenGL ES 2.0中是通过设置混合因子来指定两个 ...
- OpenGL研究2.0 计算圆
OpenGL研究2.0 计算圆 DionysosLai2014-06-18 在游戏中.常常有些地方涉及到一些圆的轨迹计算,例如一些转轴类的游戏,人物一般在角色转轴上面运动.这时,我们就要时刻计算角色的 ...
- WebGL是一种3D绘图标准,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起
WebGL是一种3D绘图标准,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一个JavaScript绑定,WebGL可以为HTM ...
随机推荐
- 【环境配置】出现:Microsoft Visual C++ 14.0 is required 的解决方案
参考blog https://download.csdn.net/download/amoscn/10399046 https://blog.csdn.net/weixin_42057852/arti ...
- PIC - For Resources [ background ]
- ant-design-vue 报错 ReferenceError: h is not defined
使用表格,在配置 columns时用到了 customRender,然后就报错了 <script> import FileName from '@/views/admin/document ...
- RPM软件管理
1.源代码形式 绝大多数软件都是以源代码形式发布的: 因为开源的理念是不重复造轮子:让其它不以商业为目的人都能修改这个软件: 源代码一般会被打包成tar.gz的压缩归档文件: 程序源代码需 ...
- .Net面向对象(OOP)
序言 virtual虚方法 virtual 关键字用于在基类中修饰方法.virtual的使用会有两种情况: 情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法.那么在对派生类实例的 ...
- 『ZJOI2019 D2T2』语言
~~ 话说,本题考场想出三只\(log\)的暴力做法,被卡成暴力了.~~ 题目分析 首先考虑枚举每一个点,计算这个点可以和多少点进行交易. 将所有经过该点的路径\(s,t\)拿出,那么这些极远的\(s ...
- JAVA中java.lang.OutOfMemoryError常见的解决方式
在开发中我们很多人都遇到过内存溢出的情况,其实内存溢出分几种形式: 1.tomcat中java.lang.OutOfMemoryError: PermGen space异常处理(最常见的) 概念大家可 ...
- mock的那点事
前言: Mock在GitHub上有12.9K的star可以看出,它在技术团队中是挺受欢迎的.这项技术被应用在不同领域的项目中. 适用场景: 下面我结合我们技术团队,列举最适合引入我们Mock服务的场景 ...
- Centos 7.6 安装Mysql5.7(离线)
Centos 7.6 安装Mysql5.7(离线) 标签(空格分隔): mysql 安装包下载 https://dev.mysql.com/downloads/mysql/ [image.png-14 ...
- wps技巧
1.页面颜色设置页面布局->背景 2.图片等比例缩放按住shift 3.想任意挪动图片 设置为文字环绕型 4.word由分节符构成.可以看左下角节的显示.一个页可以划分多节.页总数<=节总 ...
