【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 ...
随机推荐
- webpack 配置文件说明
var path = require("path"); var webpack = require("webpack"); var HtmlwebpackPlu ...
- 2019CCPC秦皇岛(重现赛)-D
链接: http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1004&cid=872 题意: 给定一个正整数 n,要求判断 1 ...
- vs2015显示代码行数
打开visual studio 2015,在菜单中点击“工具” --> "选项" -->“文本编辑器” --> "所有语言" -->勾选 ...
- yii框架学习(安装)
安装yii: 在本地安装前, 要确保PHP配置了环境变量, 通过cmd输入PHP -v 即可检测. 能看到PHP版本号, 则OK. PHP不是内部命令,则需要添加PHP环境变量. 使用compos ...
- 富文本编辑器粘贴复制Word
tinymce是很优秀的一款富文本编辑器,可以去官网下载.https://www.tiny.cloud 这里分享的是它官网的一个收费插件powerpaste的旧版本源码,但也不影响功能使用. http ...
- MessagePack Java Jackson Dataformat - Map 的序列化和反序列化
本测试方法,可以在 https://github.com/cwiki-us-demo/serialize-deserialize-demo-java/blob/master/src/test/java ...
- 卸载brew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninst ...
- 美团小程序框架mpvue入门教程
mpvue是一个使用 Vue.js 开发小程序的前端框架.框架基于 Vue.js 核心,mpvue 修改了 Vue.js 的 runtime 和 compiler 实现,使其可以运行在小程序环境中,从 ...
- python:将numpy数组写入csv文件
import numpy as np np.savetxt('E:\\forpython\\featvector.csv',data_to_save,delimiter=',')
- HearthBuddy卡组
偶数萨 手打两天已上传说,各位加油 欧洲牧羊人 ### 火元素换艾雅# 职业:萨满祭司# 模式:狂野模式## 2x (2) 图腾魔像 # 2x (2) 大漩涡传送门 # 2x (2 ...
