如何从零基础学习VR
转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究。
近期很多搞技术的朋友问我,如何步入VR的圈子?如何从零基础系统性的学习VR技术?
本人将于2017年1月1日开始,在《博客园》平台进行《VR零基础学习开发》系列文章连载,敬请关注。
在此呢,我写下此文,希望能够帮助那些有相同疑惑的朋友。
VR到底是什么。
VR是Virtual Reality的缩写,中文的意思就是虚拟现实。
虚拟现实(VR)是近几年来国内外科技界关注的一个热点,其发展也是日新月异。简单地说,VR技术就是借助于计算机技术及硬件设备,实现一种人们可以通过视听触嗅等手段所感受到的虚拟幻境,故VR技术又称幻境或灵境技术。
虚拟现实是一门集成了人与信息的科学。其核心是由一些三维的交互式计算机生成的环境组成。这些环境可以是真实的,也可以是想象的世界模型,其目的是通过人工合成的经历来表示信息。有了虚拟现实技术,复杂或抽象系统的概念的形成可以通过将系统的各子部件以某种方式表示成具有确切含义的符号而成为可能。虚拟现实是融合了许多人的因素,且放大了它对个人感觉影响的工程。虚拟现实技术是建立在集成诸多学科如心理学、控制学、计算机图形学、数据库设计、实时分布系统、电子学、机器人及多媒体技术等之上的。
虚拟现实应具有以下三个方面的含义。首先VR是通过计算机生成一个非常逼真的足以“迷惑”我们人类视觉的虚幻的世界。这种“迷惑”是多方面的,我们不仅可以看到而且可以听到、触到及嗅到这个虚拟世界中所发生的一切。这种感觉是如此的真实,以至于我们能全方位地浸没在这个虚幻的世界中,这就是VR的首要功能,即浸没感(Immersion)或临场参与感。一般来说,虚拟系统的输出设备应尽可能面向使用者的感觉器官以保证良好的浸没感,如头盔式显示器(HMD),它将使用者的听觉视觉功能完全置于虚拟的环境之中并切断了所有外界信息。使用者在虚拟的环境漫游可以通过跟踪使用者的头及身体的运动来完成,与虚拟物体的接触通过戴在手上的传感装置检测来实现。
虚拟现实与通常CAD系统所产生的模型是不一样的,它不是一个静态的世界,而是一个开放的环境,它可以对使用者的输入(如手势,语言命令)作出响应。比如你可以拿起一虚拟的火炬并打开其开关,你一推操纵杆,仿佛可以在里面漫游,你甚至可以用虚拟的手感触到虚拟物体存在,虚拟现实环境可以通过控制与监视装置影响或被使用者影响,这是VR的第二个特征,即交互性(Interaction)。
虚拟现实不仅仅是一个媒体,一个高级用户界面,它是为解决工程、医学、军事等方面的问题而由开发者设计出来的应用软件,它以夸大的形式反映了设计者的思想,比如当在盖一座现代化的大厦之前,你首先要做的事是对这座大厦的结构做细致的构思,为了使之定量化,你还需设计许多图纸,当然这些图纸只能内行人读懂。正如这些图纸反映的是设计者的构思,虚拟现实同样反映的是某个设计者的思想,只不过它的功能远比那些呆板的图纸生动,强大的多。所以国外有些学者称VR为放大人们心灵的工具,或人工现实(artifical reality)。这是VR所具有的第三类特征,即思想性(Imagation)。
综上所述,虚拟现实是人们可以通过视听触等信息通道感受到设计者思想的高级用户界面。
《VR零基础学习开发》学习大纲
注意:算法、计算机图形学及GPU优化和编程 的系统性学习 及 长期的知识积累,请关注本人单独“算法”模块。
Unity引擎基础概述 行业知识汇总(引擎概念、游戏发展、VR AR的应用领域) 需求分析“概念”(对于提出的需求可以在逻辑上拆解成相应步骤); 开发工具介绍:VistualStudio IDE、MonoDevelop IDE C#脚本语言基础:数据类型、数学运算、逻辑运算三大模块基础。 |
C#脚本语言模块化开发 过程性模块化封装:方法定义,理解形参、实参和返回值的意义; 面向对象模块化封装:类对象申请与使用、类对象继承、虚拟化类使用、结构体、枚举、宏; |
C#脚本语言面向对象开发 C#语言OOP技术:类对象的创建和使用,理解构造和析构函数的申请与释放过程、了解C#内存申请释放的处理过程;成员变量属性化操作、纯虚类继承设计方案、类抽象性变化、使用泛型完成任意类型对象、深度复制和浅复制的操作、Object基类的使用、集合应用; |
高级数据结构(C#版本) 类对象的抽象接口开发。 数据结构:单双向链表的构建与实际应用,栈的构建与使用,队列的构建与使用; 排序算法:冒泡排序、快速排序、插入排序; 设计模型:单列、工厂模式、有限状态机; |
Unity3D C#脚本基础API Unity引擎的界面、组件等介绍; 3D坐标系、向量概念介绍; MonoBehaviour类了解Unity引擎的运作机制; 使用GameObject类构建基本的游戏对象; 学习Transform类使我们的3D世界动起来; 学习Vector2/3/4类使用; 学习Mathf数学类。 学习Input辅助类掌握Unity引擎对硬件控制的反馈处理。 学习Time类使用; |
基础3D数学 向量数学计算、向量数学计算与几何意义; 自定义设计向量计算类; 3X3矩阵线性计算、4X4齐次放射矩阵计算、矩阵求逆、四元数数学计算 ; 实现向量空间转换计算器; 补充三角函数(Sin, Cos, Tan, ArcCos, ArcSin, ArcTan); |
Unity3D组件编程与应用 简易多线程:协同。 基础物理系统:刚体,碰撞体,射线。 摄像机组件与应用坐标系以及各个坐标系的转化。 灯光与音效组件的使用; 渲染组合套件和网格过滤组件控制。 2D物理组件; 资源系统和组件系统:Resources,Component集合。 |
Unity3D动画与粒子系统 使用Animation旧动画系统实现简单的重复性运动; 使用脚本实习旧动画系统实现状态机控制; MecAnim新动画系统的学习和使用; 2D Animator动画系统综合应用; 利用新动画系统采用图示化的方式构建动作执行方案; 使用代码控制动画状态机产生运动变化; 动画系统结合粒子系统的综合应用; Unity导航系统、场景烘焙、遮挡剔除 烘培使用技巧; |
Unity3D 文件系统与UI界面 C#文件内存数据流开发; XML文件读写; Jsone文件读写; UGUI布局与适配; 使用NGUI插件实现游戏UI制作; |
计算机基础图形学 渲染基础概念理解(GPU工作流程简介); 学习Unity3D引擎的 ShaderLab语法; Cg语言基础学习; Cg语言与Unity3D引擎结合实现渲染; 基础光照着色算法(Diffuse、Phong、BinPhong); 切线空间学习实现凹凸贴图渲染; 引擎控制着色器代码工作; |
Unity3D高级开发 C++语言基础:指针,引用、函数和类定义 C++语言高级开发:重载函数与运算符、OOP技术、泛型、STL模板: C++文件数据流操作; C#调用C++动态库; |
Unity3D 高级网络应用开发 Linux、Windows、OSX多线程开发; 线程安全学习与应用; 网络套接字(Socket)套接字基础知识学习; 套接字基础通讯; 实现客户端/服务端通讯; 实现Unity引擎调用C++套接字实现引擎网络化; |
Unity项目实训 学习Editor自定义组件; 学习EditorWindow工具化开发,实现Unity引擎自定义工具制作; 实现地遍系统构建;AssetsBundle打包与读取。 |
Unity项目实训 程序构建战斗系统核心框架;策略类游戏分析。 实现战斗系统中的控制系统;策略类游戏实现(地图编辑系统,角色技能系统、寻路系统、游戏数据读写,网络通信); 实现战斗系统中的寻路技术; 实现战斗系统中的NPC的人工智能控制; |
Unity项目实训 优化战斗系统; 对于计算密度高的算法向C++方式移植; 构建MVVM视图架构,添加UI视图; 实现数据系统,让所有的角色拥有数指属性; |
Unity项目实训 优化数值系统; 优化美术资源的内存占用; 优化程序的冗余算法; 优化算法的精细度; 开始移植Android和IOS平台; |
本人对学习VR开发及长期知识积累的一些建议(仅供参考)。
(1)计算机图形学技术的学习及相关知识储备。
(2)虚拟现实系统的交互设备。eg:三维跟踪、人体运动、手部姿势、立体显示、声音输出、触觉力觉、三维扫描、三维打印等。
(3)虚拟现实系统的关键技术:立体显示、环境建模、三维虚拟声音、人体自然交互以及相关开发软件及辅助软件的学习。
(4)Vizard虚拟显示开发平台的使用。
该平台下模型浏览、流程控制、人物角色、窗口界面、媒体素材、物理引擎、交互设备、网络控制等技术。
(5)Python语言的学习及上述技术的语言辅助。
注:VR的学习,是长久技术的积累,是知识的沉淀,并非一日之功,道阻且长!
如何从零基础学习VR的更多相关文章
- salesforce 零基础学习(五十二)Trigger使用篇(二)
第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...
- HTML5零基础学习Web前端需要知道哪些?
HTML零基础学习Web前端网页制作,首先是要掌握一些常用标签的使用和他们的各个属性,常用的标签我总结了一下有以下这些: html:页面的根元素. head:页面的头部标签,是所有头部元素的容器. b ...
- CSS零基础学习笔记.
酸菜记 之 CSS的零基础. 这篇是我自己从零基础学习CSS的笔记加理解总结归纳的,如有不对的地方,请留言指教, 学前了解: CSS中字母是不分大小写的; CSS文件可以使用在各种程序文件中(如:PH ...
- Yaf零基础学习总结5-Yaf类的自动加载
Yaf零基础学习总结5-Yaf类的自动加载 框架的一个重要功能就是类的自动加载了,在第一个demo的时候我们就约定自己的项目的目录结构,框架就基于这个目录结构来自动加载需要的类文件. Yaf在自启动的 ...
- Yaf零基础学习总结4-Yaf的配置文件
在上一节的hello yaf当中我们已经接触过了yaf的配置文件了, Yaf和用户共用一个配置空间, 也就是在Yaf_Application初始化时刻给出的配置文件中的配置. 作为区别, Yaf的配置 ...
- 【零基础学习iOS开发】【转载】
原文地址:http://www.cnblogs.com/mjios/archive/2013/04/24/3039357.html 本文目录 一.什么是iOS 二.主流手机操作系统 三.什么是iOS开 ...
- Yaf零基础学习总结3-Hello Yaf
Yaf零基础学习总结3-Hello Yaf 上一次我们已经学习了如何安装yaf了,准备工作做好了之后我们来开始实际的编码了,码农都知道一个经典的语句就是“Hello World”了,今天我们开始入手Y ...
- Yaf零基础学习总结2-Yaf框架的安装
接着上一篇文章<Yaf零基础学习总结1-Yaf框架简介>我们对Yaf框架有那么一个大概的了解了,但是对于程序员来说,那些文字都是表面的,他们最想的就是开始敲代码了.当然这也是学习Yaf框架 ...
- [原]零基础学习视频解码之android篇系列文章
截止今天,<零基础学习视频解码系列文章>.<零基础学习在Android进行SDL开发系列文章>以及<零基础学习视频解码之android篇>系列文章基本算是告一段落了 ...
随机推荐
- 关于解决asp.net mvc网站页面Banner图片即时更换css里背景图片url相对路径问题的新方案
最近在网站首页上想将Banner壁纸给做到后台上传随时更改的效果.遇到问题便是:将上传的图片路径动态添加到首页css代码中,结果尝试了网上提供的思路,更改相对路径,换为url中“../../Conte ...
- vim2
一.光标控制命令 命令 移动 k 向上移一行 j 向下移一行 h ...
- IndentationError: unindent does not match any outer indentation level
[problem] 从别处copy过来的python代码经过自己改动后,运行出错 [解决过程] vim file :set list # cat -A file 也可以 可以看到9-12行的inde ...
- 前端模块化工具-webpack
详解前端模块化工具-webpack webpack是一个module bundler,抛开博大精深的汉字问题,我们暂且管他叫'模块管理工具'.随着js能做的事情越来越多,浏览器.服务器,js似乎无处不 ...
- Java内存与垃圾回收调优
Java(JVM)内存模型 正如你从上面的图片看到的,JVM内存被分成多个独立的部分.广泛地说,JVM堆内存被分为两部分——年轻代(Young Generation)和老年代(Old Generat ...
- hue install
http://ju.outofmemory.cn/entry/105162 Hue是一个开源的Apache Hadoop UI系统,最早是由Cloudera Desktop演化而来,由Cloudera ...
- ypzl药品质量不合格数据库-excel自动排版
原创: qq:231469242 import xlrdimport pandas,numpyimport matplotlib.pyplot as pltimport pandas as pd #参 ...
- CPU
多核处理器 http://baike.baidu.com/link?url=6LwImqyaZqI15gVqcGstOA5S73g-Gj2hakrCbFGc_Jh1NIPPZLkahpuI5OSLoi ...
- Npoi导入导出Excel操作
之前公司的一个物流商系统需要实现对订单的批量导入和导出,翻阅了一些资料,最后考虑使用NPOI实现这个需求. 在winform上面实现excel操作:http://www.cnblogs.com/Cal ...
- javascript数据结构与算法--高级排序算法
javascript数据结构与算法--高级排序算法 高级排序算法是处理大型数据集的最高效排序算法,它是处理的数据集可以达到上百万个元素,而不仅仅是几百个或者几千个.现在我们来学习下2种高级排序算法-- ...