自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

xiaokunzhang的博客

学习交流,共同进步

原创 VRTK中的物体和手柄高亮以及手柄振动设置

VRTK设计到的相关类控制器高亮:VRTK_ControllerHighlighter物体/控制器(边缘)高亮:VRTK_OutlineObjectCopyHighLighter控制器振动:VRTK_ControllerHaptics脚本控制实现细节控制器整体高亮:highLighter.HighlightController(Color.red);控制器透明:...

2018-07-23 16:11:38 2564 2

原创 VRTK中的UI交互方式

交互方式    使用指针交互:类似于激光笔,通过指针(Pointer)对于UI进行选择,适合远距离交互。    使用手柄交互:直接通过手柄触控交互,适合于近距离交互;    使用手柄与头部配合交互:头部发射指针(通常是光标)对UI进行选择,手柄负责确认选中。具体实现方式     指针交互Hierarchy面板的VRTK_SDK配置 控制器Controller的In...

2018-07-23 14:25:10 3719

原创 HTC Vive 交互开发——手部模型替换和抓取实现

手部模型替换和抓取实现    可以在BasicVRHand.unitypackage包中中获取手部模型。 Hierarchy面板的VRTK_SDK配置 左右控制器Inspector面板设置 using System.Collections;using System.Collections.Generic;using UnityEngine;using VRT...

2018-07-22 17:06:01 3028 3

原创 VR中的UI

VR中UI的出现场景菜单游戏元素UI,如血条、生命值、剩余时间对话框提示信息十字光标VR中的UI一般构建步骤新建CanvasRender Model改为World Space修改缩放修改Dynamic Pixel Per Unit添加相关元素Interaction System 中的UI交互按钮点击基于Collider,一般放置为BoxCollider...

2018-07-22 14:25:40 1199

原创 HTC Vive交互开发——凝视效果实现

凝视效果相关:通过跟踪头部移动,设置一个代表光标的准星,当停留在某处足够长的时间之后,激发选中逻辑。类似Kinect自然语言交互。多用于移动VR,如Cardboard、GearVR等。VIVE平台使用凝视效果可以增强用户体验。凝视效果实现原理 1. 基于射线原理,通过Raycast判断击中的物体,在Update里面进行逻辑判断; 2. 准星或者十字线基于UGUI,设置为相机...

2018-07-22 11:31:45 1108

原创 使用SteamVR实现与物体的交互

使用SteamVR实现与物体的交互需要考虑如下问题:    如何获得按钮事件?如何获得按钮传递的数据?抓取的基本原理(Collider,Rigibody)以及手柄震动的实现使用SteamVR实现与物体的交互实现步骤获取手柄引用手柄与Box的碰撞检测获取按钮事件抓取:Box作为手柄的transform的子物体,失去rigibody相关属性松开:Box的parent为空,重新获取...

2018-07-21 18:26:59 2568

原创 C++函数模板与类模板

模板定义:       模板就是实现代码重用机制的一种工具, 它可以实现类型参数化, 即把类型定义为参数, 从而实现了真正的代码可重用性。分类:       函数模板、 类模板。作用:       模板用于表达逻辑结构相同, 但具体数据元素类型不同的数据对象的通用行为。理解(对比函数重载):       重载函数: 如果同一作用域内的几个函数名字相同但形...

2018-07-12 16:16:42 932

原创 C++类——纯虚函数与抽象类

纯虚函数定义:       纯虚函数是一种特殊的虚函数。 在许多情况下, 在基类中不能对虚函数给出有意义的实现, 这时可以把它声明为纯虚函数, 它的实现留给该基类的派生类去做。作用:       作为派生类中的成员函数的基础, 并实现多态性。形式:virtual 返回类型 函数名(形式参数列表) = 0;抽象类定义:       包含纯虚函数的基类称...

2018-07-12 14:19:42 139 1

原创 C++中区分概念重载、重写和重定义

重载:     在同一作用域下, 函数名相同, 但是参数列表不同。重写:    分别在基类和派生类中(在不同作用域下), 函数名相同,参数相同, 返回类型相同, 并且基类函数必须为虚函数。重定义:    分别在基类和派生类中(在不同作用域下), 函数名相同,不构成重写的话则为重定义(参数列表可相同可不同)。#include<iostream>using na...

2018-07-12 13:56:24 172

原创 C++类——多态(概念、实现、理论基础、实现原理、条件与作用)

多态的概念    多态: 同样的调用语句有多种不同的表现形态, 即根据实际的对象类型决定函数调用语句的具体调用目标。如果父类指针(引用)指向的是父类对象则调用父类中定义的函数。如果父类指针(引用)指向的是子类对象则调用子类中定义的重写函数。 多态的实现    通过virtual关键字, 来修饰成员函数, 则该成员函数为虚函数。    虚函数允许派生类重新定义成员函数...

2018-07-12 13:50:51 288

原创 C++类——虚继承

    如果一个派生类从多个基类派生, 而这些基类又有一个共同的基类, 则在对该基类中声明的名字进行访问时, 可能产生二义性。![这里写图片描述](https://img-blog.csdn.net/20180711194459451?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9rdW56aGFuZw==/font/5a6L5L2T...

2018-07-11 19:47:40 290

原创 C++类——多继承

多继承的概念:  如果一个派生类从多个基类继承, 则称为多继承。多继承的声明:class 派生类名:访问控制 基类名1, 访问控制 基类名2, ...{成员列表}注意:多个基类的派生类的构造函数执行的顺序与单继承的情况类似,执行顺序取决于定义派生类时指定的继承基类的顺序。一个派生类对象拥有多个基类的成员。 不同名成员访问不会出现二义性; 如果不同的基类拥有...

2018-07-11 19:29:28 1449

原创 C++类——派生类中的static关键字用法

  静态数据成员的初始化格式为:数据类型 类名::静态数据成员名 = 值;   注意:基类定义的静态成员, 将被所有的派生类共享。静态数据成员在程序中只有一份拷贝, 由该类型的所有对象共享访问。静态数据成员和普通数据成员一样遵从访问控制原则。  静态成员函数:static 返回类型 函数名(参数列表){函数体}  注意:出现在类体外的函数定义不能指定...

2018-07-11 17:29:18 393

原创 C++类——派生类的构造函数与析构函数

类的构造函数    每个类都分别定义了它的对象被初始化的方式, 类通过一个或几个特殊的成员函数来控制器对象的初始化过程, 这些函数叫做构造函数。    构造函数的任务是初始化对象的数据成员, 无论何时只要类的对象被创建, 就会执行构造函数。默认构造函数    默认构造函数是在未提供显式初始值时, 用来创建对象的构造函数。     注意: 当且仅当没有定义任何构造函数时, 编译器...

2018-07-11 17:10:32 603 1

原创 C++类——赋值兼容原则

    赋值兼容规则: 是指在需要基类对象的任何地方, 都可以使用公有派生类对象来替代。    通过公有继承, 派生类得到了基类中除构造函数、析构函数外的所有成员。 这样,公有派生类实际就具备了基类的所有功能, 凡是基类能解决的问题, 公有派生类都可以解决。    赋值兼容原则中的替代主要包括以下情况:派生类的对象可以赋值给基类对象。派生类的对象可以初始化基类的引用。派生类对象的...

2018-07-11 15:52:56 260

原创 C++类——派生类的定义、构成及访问控制

面向对象程序设计  面向对象程序设计(OOP)的核心思想是数据抽象、 继承和动态绑定。使用数据抽象, 我们可以将类的接口与实现分离(封装)。使用继承, 我们可以定义相似的类型并对其相似关系建模。使用动态绑定, 可以在一定程度上忽略相似类型的区别, 而以统 一的方式使用它们的对象(多态)类之间的关系  类之间的三种关系:包含关系(has-A)class B{...

2018-07-11 11:11:24 13997 3

原创 C++中的分离式编译

    随着程序越来越复杂, 我们希望把程序的各个部分分别存储在不同的文件中。     我们可以将原来的程序分成三个部分:头文件: 包含结构声明和使用这些结构的函数的原型。#pragma once#ifndef GAME_H_#define GAME_H_#include<string>using namespace std;struct Game...

2018-07-10 17:38:19 380

原创 C++函数——函数指针

    与数据项类似, 函数也有地址。 函数的地址是存储其机器语言代码内存的开始地址。 可以将地址作为函数的参数,从而使第一个函数能够找到第二个函数, 并运行它。    函数指针指向的是函数而非对象。    想要声明一个可以指向函数的指针, 只需要用指针替换函数名即可。bool lengthCompare(const string &, const string &...

2018-07-10 16:26:54 90

原创 C++函数——函数和复杂类型(数组、结构体、string对象)

函数与数组    数组作为参数: int sum_arr(int arr[], int n);    arr是数组名, 但arr实际上并不是数组, 而是一个指针, 指向数组的第一个元素。 但是在编写函数的其余部分时,可以将arr看作是数组。    当且仅当用于函数头或函数原型中, int *arr和int arr[]的含义才是相同的。 它们都意味着arr是一个int指针。 然而, 数组...

2018-07-10 16:20:21 338

原创 C++函数——函数重载

    如果同一作用域内的几个函数名字相同但形参列表不同,我们称之为重载函数。void print(const char *cp);void print(const int *beg, const int *end);void print(const int ia[], size_t size);    这些函数接受的形参类型不一样, 但是执行的操作非常类似。 当调用这些函数时, 编译...

2018-07-09 22:42:57 112

原创 C++函数——递归函数、内联函数、constexpr函数

递归函数    直接或间接调用自己的函数称为递归函数。    递归函数的要求: 递归函数必须定义一个终止条件, 否则,函数将永远递归下去。#include<iostream>using namespace std;long fact(int i);int main(){ int num; cout << "请输入一个小于8的正整数...

2018-07-09 22:27:16 471

原创 C++函数——返回类型

    无返回值函数: 没有返回值的return语句只能用在返回类型是void的函数中。    有返回值函数: return语句的第二种形式提供了函数的结果。 只要函数的返回类型不是void, 则该函数内的每条return语句必须返回一个值。    返回一个值的方式和初始化一个变量或形参的方式完全一样: 返回的值用于初始化调用点的一个临时量, 该临时量就是函数调用的结果。    返回引...

2018-07-09 21:50:37 2123

原创 C++函数——默认实参

    默认实参: 某些函数有这样一种形参, 在函数的很多次调用中它们都被赋予一个相同的值, 我们把这个反复出现的值称为函数的默认实参。    调用含有默认实参的函数时, 可以包含该实参, 也可以省略该实参。     对于有多个形参的函数, 必须从右向左添加默认值。#include<iostream>#include<string>using name...

2018-07-09 21:25:17 416

原创 C++函数——const形参和实参

    顶层const: 表示任意的对象是常量。     底层const: 与指针和引用等复合类型有关。    对指针而言, 顶层const表示指针本身是个常量, 而底层const表示指针所指的对象是一个常量。int i = 22;const int ci = 20; //顶层const, 不能修改ci的值const int *p1= &ci; //底层const, 允...

2018-07-09 21:09:33 3277

原创 C++函数——参数传递

参数传递形参的类型决定了形参和实参的交互方式。如果形参是引用类型, 它将绑定到对应的实参上 (传引用参数); 否则, 将实参的值拷贝后赋给形参(传值参数)。传值参数    传值参数有2种方式:将实参的实际值复制给函数的形参。 在这种情况下,修改函数内的形参对实参没有影响。#include<iostream>#include<string&amp

2018-07-09 20:48:42 80

原创 2D游戏中如何载入主要元素

    载入游戏背景图片之后,可以使用坐标值的变换来移动背景图片。接下来需要载入主角元素。导入随机函数    选择Python作为开发语言,用到一个随机函数。import randomrandom.randrange(10,100)载入主角飞机    假设主角的飞机是从下往上飞,那它的飞机头应该是朝着电脑屏幕上方,而敌人的飞机是从上往下出现,所以它的飞机头应该朝着电脑...

2018-06-28 20:20:36 179

原创 运算符重载

    运算符重载: 当运算符作用于类类型的运算对象时, 可以通过运算符重载重新定义该运算符的含义。    重载的运算符是具有特殊名字的函数: 它们由关键字operator和其后要定义的运算符号共同组成。    和其他函数一样,重载的运算符也包含返回类型、参数列表以及函数体。    运算符重载的定义:返回类型 operator运算符号(形参列表){ 函数体} ...

2018-06-27 16:10:52 449

原创 人工智能数学基础——最优化方法

    人工智能的目标就是最优化:在复杂环境与多体交互中做出最优决策。几乎所有的人工智能问题最后都会归结为一个优化问题的求解,因而最优化理论是人工智能必备的基础知识。    最优化理论(optimization)研究的问题是判定给定目标函数的最大值(最小值)是否存在,并找到令目标函数取到最大值(最小值)的数值。    要实现最小化或最大化的函数被称为目标函数(objective funct...

2018-06-18 13:05:46 5331

原创 Unity API——Camera类中的射线检测

相机属性Clear Flags 包含一下4种方式:       Skybox:天空盒(默认项)。在屏幕空白处显示当前摄像机的天空盒,如果没有指定天空盒,则会显示默认背景色。       Solid Color:空白处将显示默认此处设置的背景色。       Depth only:仅深度,该模式用于对象不被裁剪。       Don’t Clear:不清除,该模式不清除任何颜色...

2018-06-17 21:47:59 2232

原创 人工智能数学基础——数理统计

    基础的统计理论有助于对机器学习的算法和数据挖掘的结果做出解释,只有做出合理的解读,数据的价值才能够体现。数理统计(mathematical statistics)根据观察或实验得到的数据来研究随机现象,并对研究对象的客观规律做出合理的估计和判断。    数理统计以概率论为理论基础,但两者之间存在方法上的本质区别。概率论作用的前提是随机变量的分布已知,根据已知的分布来分析随机变量的特征与...

2018-06-17 20:43:28 2134

原创 人工智能数学基础——概率论

    除了线性代数之外,概率论(probability theory)也是人工智能研究中必备的数学基础。随着连接主义学派的兴起,概率统计已经取代了数理逻辑,成为人工智能研究的主流工具。    同线性代数一样,概率论也代表了一种看待世界的方式,其关注的焦点是无处不在的可能性。对随机事件发生的可能性进行规范的数学描述就是概率论的公理化过程。概率的公理化结构体现出的是对概率本质的一种认识。  ...

2018-06-17 14:25:11 3676

原创 人工智能数学基础——线性代数

    必备的数学知识是理解人工智能不可或缺的要素,所有的人工智能技术归根到底都建立在数学模型之上,而这些数学模型又都离不开线性代数(linear algebra)的理论框架。    线性代数不仅仅是人工智能的基础,更是现代数学和以现代数学作为主要分析方法的众多学科的基础。从量子力学到图像处理都离不开向量和矩阵的使用。而在向量和矩阵背后,线性代数的核心意义在于提供了⼀种看待世界的抽象视角:万事...

2018-06-17 11:59:25 4493 3

原创 新时代的必修课——人工智能(人工智能很可能成为检验文盲的新标尺)

    2016 年,AlphaGo 的横空出世掀起了人工智能的新一轮热潮。其技术进展更是以令人瞠目结舌的速度狂飙突进,悄无声息地改造着普通人的生活。    人工智能是一把双刃剑,它既能推动经济社会的进步,也能潜移默化地改造人类。    人工智能复杂,但并不神秘。它建立在以线性代数和概率论为骨架的基础数学上,通过简单模型的组合实现复杂功能。在工程上,深度神经网络通常以其参数的复杂性让人望而...

2018-06-16 19:42:15 228

原创 取代Flash的HTML5技术( H5 编写游戏的优点)

什么是Flash    Flash 是由 Adobe 公司开发的一种富媒体技术,起初是一种放置在浏览器中的插件,填补了当时 HTML 页面平淡的空白,增强了网页交互的能力。你可以在 Flash 中做出任何东西,也可以访问本地电脑中的东西。后来,Adobe 公司退出了播放器,在电脑上不打开浏览器,也可以观看或者游戏 Flash 程序员编写出来的产品。乃至今日,依然有大量应用于 Flash 的富媒...

2018-06-16 16:42:08 8444

原创 3D数学——Unity中的向量运算

零向量    零向量是非常特殊的一个向量,它是唯一一个大小为0的向量,也是唯一一个没有方向的向量。     2D零向量表示为(0,0),3D零向量表示为(0,0,0)。     在Unity中,用Vector3.zero来表示3D零向量。负向量    每个向量都有一个负向量,满足条件:一个向量和它的负向量相加等于零向量。     向量变负,将得到一个和原向量大小相等,方向相反的向...

2018-06-14 12:04:38 5907

原创 Unity中的AI感知系统

  AI感知系统模拟视觉、听觉甚至是嗅觉系统。巡逻的士兵可以看到视野前方的敌方角色。巡逻的士兵可以听到四面八方的距离比较近的声音视觉基于圆(球体)的: 基于三角形(椎体)的: 听觉 using System.Collections;using System.Collections.Generic;using UnityEngine;pu...

2018-06-14 11:24:59 1616 1

原创 Unity中使用有限状态机FSM进行游戏开发

    总的来说,有限状态机系统,是指在不同阶段会呈现出不同的运行状态的系统,这些状态是有限的、不重叠的。这样的系统在某一时刻一定会处于其所有状态中的一个状态,此时它接收一部分允许的输入,产生一部分可能的响应,并且迁移到一部分可能的状态。      五个要素:状态,事件,条件,动作,迁移。CS 角色FSM图     使用switch (){case….}实现简单的有限状态机。...

2018-06-14 10:59:31 1736

原创 游戏背景的绘制

    创建了一个窗体,接下来就是朝这个窗体里添加东西。只有先绘制了游戏背景,才能进行后续的游戏图像遮挡、图形图像的显示等等操作。    类似于我们玩过的《超级玛丽》《魂斗罗》《雷电》之类的游戏,这种类型的 2D 游戏,其背景不是左右卷轴,就是上下卷轴。所谓左右卷轴,就是游戏画面是横向的、左右运动的,而上下卷轴就是游戏画面是竖直对的、上下运动的。     如《雷电》这样的经典飞机游戏...

2018-06-14 10:21:41 1211

原创 Unity3D数学——向量

向量的定义    在数学中,向量(也称为矢量),是指具有大小和方向的量。     向量的大小就是向量的长度,也叫做模。向量的方向描述了空间中向量的指向。![这里写图片描述](https://img-blog.csdn.net/20180613185425607?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9rdW56aGFuZw...

2018-06-13 19:51:41 585 1

原创 Unity中的几种坐标系

    在不同的情况下使用不同的坐标系更加方便,所以在Unity中有多种坐标系:全局坐标系 World Coordinate System局部坐标系 Local Coordinate System屏幕坐标系 Screen Space视口坐标系 ViewPort Space全局坐标系    全局坐标系是用于描述场景内所有物体位置的方向的基准,也称为世界坐标系。  ...

2018-06-13 18:52:04 856

提示
确定要删除当前文章?
取消 删除