如何从零基础学习VR

时间:2021-11-21 08:40:58

转载请声明转载地址: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的更多相关文章

  1. salesforce 零基础学习(五十二)Trigger使用篇(二)

    第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...

  2. HTML5零基础学习Web前端需要知道哪些?

    HTML零基础学习Web前端网页制作,首先是要掌握一些常用标签的使用和他们的各个属性,常用的标签我总结了一下有以下这些: html:页面的根元素. head:页面的头部标签,是所有头部元素的容器. b ...

  3. CSS零基础学习笔记.

    酸菜记 之 CSS的零基础. 这篇是我自己从零基础学习CSS的笔记加理解总结归纳的,如有不对的地方,请留言指教, 学前了解: CSS中字母是不分大小写的; CSS文件可以使用在各种程序文件中(如:PH ...

  4. Yaf零基础学习总结5-Yaf类的自动加载

    Yaf零基础学习总结5-Yaf类的自动加载 框架的一个重要功能就是类的自动加载了,在第一个demo的时候我们就约定自己的项目的目录结构,框架就基于这个目录结构来自动加载需要的类文件. Yaf在自启动的 ...

  5. Yaf零基础学习总结4-Yaf的配置文件

    在上一节的hello yaf当中我们已经接触过了yaf的配置文件了, Yaf和用户共用一个配置空间, 也就是在Yaf_Application初始化时刻给出的配置文件中的配置. 作为区别, Yaf的配置 ...

  6. 【零基础学习iOS开发】【转载】

    原文地址:http://www.cnblogs.com/mjios/archive/2013/04/24/3039357.html 本文目录 一.什么是iOS 二.主流手机操作系统 三.什么是iOS开 ...

  7. Yaf零基础学习总结3-Hello Yaf

    Yaf零基础学习总结3-Hello Yaf 上一次我们已经学习了如何安装yaf了,准备工作做好了之后我们来开始实际的编码了,码农都知道一个经典的语句就是“Hello World”了,今天我们开始入手Y ...

  8. Yaf零基础学习总结2-Yaf框架的安装

    接着上一篇文章<Yaf零基础学习总结1-Yaf框架简介>我们对Yaf框架有那么一个大概的了解了,但是对于程序员来说,那些文字都是表面的,他们最想的就是开始敲代码了.当然这也是学习Yaf框架 ...

  9. &lbrack;原&rsqb;零基础学习视频解码之android篇系列文章

    截止今天,<零基础学习视频解码系列文章>.<零基础学习在Android进行SDL开发系列文章>以及<零基础学习视频解码之android篇>系列文章基本算是告一段落了 ...

随机推荐

  1. HashMap实现原理分析

    1. HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端. 数组 数组存储区间是连续的,占用内存严重,故空间复杂的很大.但数组的二分查找时间复杂度小,为O(1 ...

  2. final简介

    final简介 final用来修饰方法和属性表示特殊的意义.修饰方法时表示方法不能被重写:修饰属性时表示属性不能被改变,这里属性又分为对象和基本类型,修饰基本类型表示基本类型赋值以后不能再被赋值,修饰 ...

  3. HTML5 Canvas核心技术—图形、动画与游戏开发&period;pdf6

    操作图像的像素:getImageData() putImageData() ImageData对象 调用getImageData()方法实际是获取了一个指向ImageData对象的引用,返回的对象包含 ...

  4. python获取实时股票信息

    Python3获取股票行情数据(中国个股/中国指数/全球指数) #!/usr/local/bin/python3 #coding=utf-8 #source http://www.cnblogs.co ...

  5. 01-artDialog4&period;1&period;7常用整理

    关闭弹出框的几种常见方法: 1,artDialog可以通过鼠标双击关闭对话框,esc关闭对话框等.为了在关闭对话框要执行某一方法,不能仅仅在弹框中的关闭按钮中写.这时提供了一个函数:close.无论在 ...

  6. NSMutable属性声明时为什么不能使用copy

    在iOS开发里面我们经常会进行NSMutable(可变类型的类,常用的如NSMutableString,NSMutableArray,NSMutableDictionary,NSMutableData ...

  7. &lbrack;Spark&rsqb;&lbrack;Flume&rsqb;Flume 启动例子

    Flume 启动例子: flume-ng agent --conf /etc/flume-ng/conf --conf-file /etc/flume-ng/conf/flume.conf --nam ...

  8. day28 反射 属性操作 getattr hasattr setattr delattr

    反射 用字符串来对应其同名的属性或者方法,通过某种方法调用这个字符串来执行方法或者获取属性 网络编程的时候非常好用,是很重要的内容 先看个示例吧: class Teather: dic = { &qu ...

  9. Depth of field --Circle of confusion 推导

    https://en.wikipedia.org/wiki/Circle_of_confusion https://developer.download.nvidia.com/books/HTML/g ...

  10. Window 端口占用

    Windows平台 在windows命令行窗口下执行: 1.查看所有的端口占用情况 C:\>netstat -ano 协议    本地地址                     外部地址    ...