本文转自:http://eyehere.net/2011/learn-opengl-3d-by-pyopengl-2/

每个人都有做3D的潜质

看看这张图片(选自“一秒钟看穿统计陷阱”),美国木匠的平均收入是罗坦提亚木匠的两倍,给出一张统计图片,美国人的钱袋长、高都是罗坦提亚木匠的两倍,看起来挺忠实于数据。

但是右边钱袋实际占用的面积就是左边的4倍。这幅图像导致的暗示效果其实还没完,因为在生活中钱袋都是立体的,所以每个读者看到这个钱袋的时候会不经意地给它加上一个厚度,这样一来,在有些人眼里这幅图表达的明明是美国木匠的收入是罗坦提亚的8倍。原文的意思是这样的印象完全脱离了原始数据所给出的信息,无疑是一次成功的误导(它说的很对!)。

只要你被误导了,无意识的加上了一个厚度,你就拥有了做3D的基本条件了。既然被广泛的使用,可见被大众的3D感是如何的强烈!你一定是其中之一么?

人有两只眼睛,就是为了看立体景象的,自然进化的结果都告诉我们要好好用3D啊。为什么两只眼睛是3D?难道单眼看世界就成平面了?!我闭上一只眼睛——骗子,还是立体的啊,你耍我么?

岂敢岂敢,现在闭上一只眼睛,拿根缝衣针来试着穿一下?失败了吧!没有缝衣针的话简单一点随便走走能很容易的用手从侧面一下子抓到眼前的东西么?失败了吧!不要气馁,这些只是说明你是个正常人。

- – - – 自然给了我们清澈的双眸,我们却用它来发现距离。- – - –

我们能感受到距离,是因为左右两眼看到的事物是不同的,这样的不同反馈到我们的大脑,大脑就把它合成立体的图像,不仅包含左右的距离,还有前后的距离,太神奇了!

计算机上的3D

有些计算机历史知识的,会知道最早的计算机是把结果打在纸带上的,富有艺术力的程序员就在纸带上靠编程打印一系列的*来形成图像,如果你从基础开始学习C语言,很可能就会在学习循环的章节的习题上看到类似的习题。当然纸张表现的艺术,总有些不够cool,而且,是对森林资源的浪费不是么……

于是显示器被发明出来了,与纸不同的是,可以无穷的复用,速度超快,不过新发明总是基于老的东西的,显示器与纸面一样,都是显示二维的图像的,从一开始就是如此,到现在都是,未来嘛……有变化的趋势。

希望你中学的时候有听过美术课,或者,立体几何课上有稍微努力过,如果这也没有,那就发挥一下自己的观察能力吧,看看眼前的任何东西吧,然后默念并感悟这句毁天灭地惊天地泣鬼神的无敌真言——“近大远小”,如何,得道了么?

看看那些艺术绘画作品,人类大概几千年前就明白了这个道理:

2D + 透视 = 3D

上图,顶天立地如假包换的平面图,但是你看到了什么?立体方块是吧。

错觉,一切都是错觉~ 但是我们的计算机3D靠的就是这种错觉诞生的(如果没有立体基础就用笔试着描画一下上图第一幅感受一下,3D就这样在你手中诞生了,快去买瓶啤酒庆祝一下吧)。但是这些终究是错觉,仔细盯着第一幅图,也许一开始会感觉第二幅的感觉,但再看一会儿就会觉得是第三幅。光靠线条的透视,大脑其实并不能得到唯一完美的结论,我们的3D艺术肯定还需要其他的东西来补足,就是后面两幅图中的重要演员——光照。事实上,一般最后的作品还需要纹理来帮忙;如果还能加上阴影等,会更真实。

看看什么是透视,我们知道铁轨是两根距离相等的铁条排放出来的,就像上图右半那样。但是实际观察一下(注意生命安全……),总感觉铁轨在遥远的地方相交了,像左半那样。

在透视(perspective)的观察方式下,物体会随着移远而越来越小,视线会在物体移离观察者时最终交汇。这是对真实视觉的模拟,也就是人们观察世界的方式。一般来说,我们以后用OpenGL编程,这种视图也比较多。

另一种观察的方式称为正交(orthogonal) 。这种情况下,视线永远不会交汇而且物体不会改变其大小,没有透视效果。现实生活中我们没有看到这种东西的福气,但对于CAD程序等非常方便,角度长度什么的测量会比较容易。

视野

如果您喜欢照相,相信不用多说就能明白视野这个概念;如果您没什么照相的经验,没关系跟我念:

- – - – 欲穷千里目,更上一层楼 – - – -

当然,李先生是想说“站得高,看得远”的,我想说的是“视野宽,看的多”,不过异曲同工。

广角和远角总是听过的吧?没有的话就按照字母意思猜一下,广角,意味着看的很广,人眼一般只能看到120°~130°,狗的话能看到180°,所以“狗眼看人低”是不对的,小狗们看到的东西可比我们多啊,应该是“狗眼看人小”,因为要在一眼看那么多东西,自然就得把事物都缩小一点才能放得下啊;远角嘛,差不多就是用望远镜咯,虽然看的很远,但基本只能看到一个小圆了。

玩过一些大型3D的话,很可能会有滚动滚轮更改视角的功能,那是感受视野的绝好方法。视野放远,第三人称视角,可能就能看到全局,怪啊东西啊都变的很小了;视野拉近,第一人称视角,怪物好大,恐怖啊……

3D坐标

这次只是系列的第二次,想来还有很多的热情,趁着机会多散布些概念,免得以后说了让人厌。

讨厌数学的人同样讨厌坐标,但是请喜欢上它——如果你对3D有兴趣的话。3D坐标是暂时的3D描述最主要甚至是唯一的手段。

想象你在是一个点,就在Origin上,啊,你就是那个Origin原点,眼睛向纸面的外面看。那么你的左手就是就是x轴的正方向,脑袋朝着y的正方向,往前看是z的正方向。那个孤单的点如何表示?{3, 5, 1}就是它的归宿,意思就是向x轴方向前进3,在向y轴方向前进5,z轴方向前进1距离,基本就是在你左上方了,抬头看看吧:)

顺便问问{8, 4, -5}在哪里?

这一篇写了好久才捏出来,3D的基础知识还是很多的,这次虽然讲了不少,而且用的是非常通俗的说法,可能深度比较不够。不过问题不大,随着我们学习的深入,有些新的东西会慢慢引入,有些已经讲述过的东西理解也会加深,慢慢来吧。

用PyOpenGL叩开3D的心扉——OpenGL全解析(2)相关推荐

  1. 用PyOpenGL叩开3D的心扉——OpenGL全解析(1)

    本文转自:http://eyehere.net/2011/learn-opengl-3d-by-pyopengl-1/ 承 从pygame的系列教程里3D部分,本想好好说一下OpenGL的,但是感觉这 ...

  2. 用PyOpenGL叩开3D的心扉——OpenGL全解析(4)

    本文转自:http://eyehere.net/2011/learn-opengl-3d-by-pyopengl-4/ 图元 上一次,我们有了一个足够3D的程序了,虽然很漂亮,但是那个茶壶并不是我们画 ...

  3. OpenGl入门基础知识-叩开3D的心扉

    OpenGL简介 是在SGI等多家世界闻名的计算机公司的倡导下,以SGI的GL三维图形库为基础制定的一个通用共享的开放式三维图形标准.是图形硬件的一个软件接口. OpenGL特点 OpenGL是一个开 ...

  4. nvidia 3d vision kit + opengl + 立体视觉程序开发

    近来一周一直在看opengl + 3d vision kit 的编程开发方法,国内基本没有,因为3d vision kit只支持d3d的全屏的程序.只有满足是D3D+FULLSCREEN,才会由红外发 ...

  5. PyOpenGL——走进3D的世界

    PyOpenGL--走进3D的世界 PyOpenGL介绍 功能解析 PyOpenGL实例 问题处理 一.缺少glut文件 参考文章 PyOpenGL介绍 功能解析 # 调用PyOpenGL库 impo ...

  6. 3D点云补全算法汇总及最新进展

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 Part 1  前言 在探讨3D 点云补全专题前,先介绍三个概念: 概念一:partial obser ...

  7. 3D河豚鱼—OpenGL着色器(Shader)和GLSL程序

    3D河豚鱼-OpenGL着色器(Shader)和GLSL程序 效果图 程序代码 #ifdef GL_FRAGMENT_PRECISION_HIGH precision highp float; #el ...

  8. 3D着色器(OpenGL)

    3D着色器(OpenGL) 本章将更详细地查看着色器,包括如何将数据直接传输到顶点和片段着色器中的CPU-以前部分中的示例将数据用作字面价值(以及使用vertex)将硬编码的数据作为文字值(以及使用V ...

  9. 平面、3D设计软件最全集子(Windows系32、64位)

    [@2015-2-5] 记录一下自己的脚印:我了个擦,这也有...平面.3D设计软件最全集子(Windows系32.64位),之前找了好久没有发现,电驴下了个把星期..终于下到,火速分享分享, 下载地 ...

最新文章

  1. 2022-2028年中国电压力锅市场投资分析及前景预测报告
  2. 关于导出excel 把一个dataset的多个datatable导入到一个excel的多个sheet中
  3. python 笔记:csv 读写
  4. 你知道怎么使用DebugView查看调试信息吗?
  5. 【Envi风暴】Envi5.4经典安装图文教程
  6. 牛客题霸 [在转动过的有序数组中寻找目标值] C++题解/答案
  7. u-boot,linux,文件系统移植笔记1
  8. bat脚本监控tomcat并启动_windows使用批处理发布web到tomcat并启动tomcat脚本分享
  9. 台达plc自由口通讯_自由口通讯问题无法接收数据
  10. matlab数字图像处理实验
  11. 网络协议-dhcp报文分析
  12. win10上成功运行faster-rcnn.pytorch-1.0
  13. 智能汽车-AR/VR应用浅析
  14. 玫瑰线 matlab,如何用MATLAB画玫瑰线
  15. 【T-SQL】T-SQL语句整理(基于SQL Server)
  16. Python必学基础
  17. PostgreSQL 儒略历学习资料
  18. team viewer的安装使用
  19. 从贝叶斯滤波理论到容积卡尔曼滤波算法(CKF)详细推导及编程实现常转弯率模型估计。(matlab)
  20. 关于用pads 做 锅仔片 封装

热门文章

  1. 三菱MR-JE-C伺服电机FB功能块(适用Q系列PLC) 流水线项目,16个MR-JE-C电机,为了加快编程速度,特意做的一个FB功能块
  2. 三菱PLC第一篇:GXWORK3与三菱FX5UPLC同通过交换机连接
  3. Rocksdb Compaction 源码详解(一):SST文件详细格式源码解析
  4. 直播:Phoenix 全局索引原理与实践
  5. python的tell和seek_4.2Python文件基本操作2:tell、seek
  6. 学习Ansible自动化
  7. qml的focus问题
  8. 恢复计算机什么意思,Win10重置此电脑是什么意思数据会全部丢失吗
  9. win10taskkill强行结束进程_win10强制关闭应用程序的方法
  10. PDF转图片乱码问题解决