近期需要做一个涌潮的预报与仿真模拟,为了使模型更具有真实感,且逼真,使用起来更灵活。感觉还是得从基础的OpenGL学习。鉴于Direct3D技术存在的众多不确定性,且评论不太好的原因,决定用OpenGL来做。但是,之前接触的都是一些十分简单的OpenGL的管线变成,预计得舍弃并用现代版的OpenGL的着色语言进行实现。

下面给出一些自己在网上总结的学习OpenGL的一些建议,特别是初学者,可以拿来参考以下。

1.入门与学习资源

入门如果用NEHE,该经典教程确实众所周知,但也意味着老旧,全是固定管线内容,且不成体系。如果需要和一些固定管线的老代码打交道,那NEHE还是值得一看的。

至于OpenGL的版本,至少从GL 2.0看起(目前已经4.3了)。一定得熟悉VAO/VBO/FBO等等。我曾耗费很多时间学固定管线,但学了shader后才感觉走上了正道,才是真正地零距离接触到了pipeline。当你去自己生成MVP、自己实现Phong Shading时,和简单的用一下glTranslatef, glLightfv这些API的感觉是不一样的。关于用什么书,我以前回答过这个问题初学者学习opengl是用红宝书好还是蓝宝书好?。另外网上教程也有蛮多,我所知比较好的有(欢迎补充)
  1. opengl-tutorial.org OpenGL 3.3+ Tutorial [我正在翻译这个教程(Github翻译的教程LINK),断断续续做了一年多。你可以通过切换语言看到我最初的翻译。后来我们还在做修订。]
  2. OpenGL Step by Step
  3. Lighthouse3d.com
  4. Home – Swiftless Tutorials
  5. OpenGL 3.3 - Tutorials
  6. http://tomdalling.com/blog/category/modern-opengl/
  7. http://open.gl/
modern opengl 的学习资源:
(备注:即 opengl 3.0 以上 和 可编程渲染流水线)。

(1)OpenGL 3.3+ Tutorials
gamedev 上 Michal Bubnar
写的引导教程,非常不错。
和它所在的:gamedev 的 opengl 专栏:
OpenGL - Articles

(2)前面有人推荐和翻译的:
opengl-tutorial.org
不过课程较少。但是对一些科普性内容写的不错。

(3)另一个问题下有人推荐的:
Learning Modern 3D Graphics Programming
Jason L. McKesson
 

个人觉得,必须需要学习的一些基础知识包括:

(1)model,view,projection 变换;

(2)和几何变换对应的矩阵和向量的运算。cross,dot 等。

(3)渲染 pipeline 的流程,各个阶段的职责工作。

(4)depth 缓冲。

 

如果想在Mac上学OpenGL,这个Apple官方网站真心很不错OpenGL for OS X,这个页面上有个视频讲解怎样从固定管线迁移到Shader,讲的很好。

OpenGL蓝宝书已有第六版,红宝书有第八版,均完全剔除固定管线内容,全面介绍shading language。

补充一个目前看来最好的教程网站 http://www.learnopengl.com/(2016-2-3)

2、学习路线

建议学习的路线

什么版本都不用管 先实现一遍底层的光栅化的3D渲染算法,只用一个画像素的功能,把插值,zbuffer,alpha,阴影,三角形的光栅化,全自己底层实现一遍,之后进阶挑nvidia 的sdk里的例子逐句看,siggraph早期的gpgpu的论文挑自己觉得有趣的去实现,shaderX,gpu gems里头拿感兴趣的实现,有些高手就是这么过来的 。

 
如果不懂图形学的话,无论决定买哪本书,裂墙建议先把图形学的一些基本原理给搞明白。其中个人,以及所有我认识的搞图形学的人一致认为十分重要、强调一万分都不为过的两个知识点是:
1、OpenGL渲染管线!!!!!!
2、物体-世界-相机-裁剪-视口 坐标变换!!!!!!
毕竟OpenGL只是个API,是工具,把原理搞明白了,理解了,工具上手会快很多。即便你将来想转DirectX也就是换个API,换汤不换药,大致思想是一致的。

另外要看书的话,红宝和蓝宝书早期版本以固定管线为例讲解的就可以不要看了,直接从shader搞起吧。

另类的学习经验

大学的时候我用了四年的OpenGL,毕业后我用DirectX10,然后回过头来看看OpenGL新版本的架构,觉得是在跟DirectX差了一代,OpenGL只能跟D3D8或者9的时候进行类比。
看一下题主用的显然是Windows,那应该义不容辞的使用DirectX10。D9也不要用了,架构跟OpenGL一样落后,是不能学到靠谱的东西的。

OpenGL这倒霉玩意……反人类的设计,反人类的手册,反正我是被恶心了个不行……(架构上我没有深入了解……反正某些设计把我恶心个不行之后我就放弃这玩意了)如果一定要,我觉得弄个红包书 + opengl的函数手册应该就能看懂了。

3、补充资源

3.1 WhyGL

一套学习OpenGL的框架,及翻写Nehe的OpenGL教程

有关详细的介绍,请参考文章[2].

源码与演示程序下载地址:Dolnload LINK

参考文章

[1] 邹帆,张心欣, 王浩宇,hoodlum1980. 学习 OpenGL 用哪个版本好,知乎.

[2] 叶飞影, 翻写Nehe的OpenGL教程,2013.

OpenGL 开始学习指南的更多相关文章

  1. OpenGL开发学习指南二(glfw+glad)

    版权声明:本文为博主原创文章,未经博主允许不得转载.blog.liujunliang.com.cn https://blog.csdn.net/qq_33747722/article/details/ ...

  2. opengl入门学习

    OpenGL入门学习 说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640 ...

  3. OpenGL ES学习笔记(三)——纹理

    首先申明下,本文为笔者学习<OpenGL ES应用开发实践指南(Android卷)>的笔记,涉及的代码均出自原书,如有需要,请到原书指定源码地址下载. <OpenGL ES学习笔记( ...

  4. OpenGL入门学习(转)

    OpenGL入门学习 http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html 说起编程作图,大概还有很多人想起TC的#includ ...

  5. 《Android学习指南》目录

    源:<Android学习指南>目录 Android学习指南的内容分类: 分类 描述 0.学习Android必备的Java基础知识 没有Java基础的朋友,请不要先看Android的课程,这 ...

  6. 《Android学习指南》文件夹

    转自:http://android.yaohuiji.com/about Android学习指南的内容分类: 分类 描写叙述 0.学习Android必备的Java基础知识 没有Java基础的朋友,请不 ...

  7. OpenGL入门学习(转载)

    说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率.16色 ...

  8. opengl基础学习专题 (一 )编程环境搭建

    题外话: 第一次在博客园上同大家分享博文.水的的地方,错别字的地方.环境交流.批评.知道了马上改. 以前在百度空间中写技术分享博文,后来百度啥也没说就把整个空间封了.当时感觉 还是有点寒心.只想黑一下 ...

  9. SCARA——OpenGL入门学习五六(三维变换、动画)

    OpenGL入门学习(五) 此课为三维变换的内容,比较枯燥.主要是因为很多函数在单独使用时都不好描述其效果, 在前面绘制几何图形的时候,大家是否觉得我们绘图的范围太狭隘了呢?坐标只能从-1到1,还只能 ...

随机推荐

  1. POJ3308 Paratroopers(网络流)(最小割)

                                                     Paratroopers Time Limit: 1000MS   Memory Limit: 655 ...

  2. Activity——思维导图

  3. php会话(session)生命周期概念介绍及设置更改和回收

    http://www.169it.com/article/8429580816135935852.html https://my.oschina.net/jiec/blog/227252  sessi ...

  4. Jquery暴力解数独

      var arry= new Array(); var nums= new Array(); var snum; function numchain() { snum=0; for(var i=0; ...

  5. Unity脚本系统

    什么是脚本?脚本是一个 MonoBehavior, 继承关系是 MonoBehavior -> Behavior -> Component -> Object GameObject ...

  6. eclipse中新建maven项目-转

    http://huxiaoheihei.iteye.com/blog/1766986 博客分类: maven maven  maven是个项目管理工具,集各种功能于一身,下面介绍maven web项目 ...

  7. mysql+mybatis 插入可递增字段库表操作

    mysql本身类型介绍: BIGINT 8 字节 (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 70 ...

  8. IT运维管理市场

    背景 http://www.cnitom.com/portal.php 中国it运维网 http://www.365master.com it运维网 http://www.51ou.com/ 51运维 ...

  9. 关于sphinx+PHP在高并发时响应性能低下的解决办法

    经过多次压力测试,发现sphinx在高并发时出现负载突然提升,并且响应速度明显下降.经过多方面的排查,发现是由于PHP与sphinx自带的 searchd进行socket的连接之后,系统内存有大量的T ...

  10. Android中使用speex将PCM录音格式转Wav格式

    Android中使用speex将PCM录音格式转Wav格式 2013-09-17 17:24:00|  分类: android |  标签:android  speex  wav  |举报|字号 订阅 ...