线性八叉树_游戏场景管理的八叉树算法是怎样的?
最近正好在看吧。就谈一下数据结构。
八叉树特别适合进行空间划分。在需要邻近点信息做参考时,利用八叉树做搜索会非常高效。
八叉树必备的元素:尺寸:一般就是自己限定的空间(有的地方也叫bounding box 包围盒)大小。
深度:八叉树划分的层级
源点:一般就是(xmin,ymin,zmin)了
节点:就像下图划分的一个一个的小立方体(有的会叫voxel,或者cell)
这个带颜色的示意图很清楚的解释了八叉树的结构。每一个小立方体(voxel)都是一个子节点。只子节点可以被继续划分。
构建的方式最通用的莫过于线性八叉树了。具体做法是对每个节点进行二进制编码。
这样做的好处是:快速定位和搜索
。不同维度的编码具有独立性。先简单的以二叉树为例:
首先是树状:根节点编码为0000,左节点与根节点相同,所以是0000.
若右节点的高度为height,所以将该节点的第(height -1)位置为1. 下图的例子也就是把第三位置换1.之后就是1000
沿着左右子树采取上面的规则进行编码。
如果是一维:
对于待搜索的数据,比如7.1。二进制编码就是(7.1/10)(2^4)=(0.71*16) =binary(11) = 1011.
而对于三维空间的八叉树的建树。原理是一样的。对x,y, z 的每个维度都进行编码。
最后不同的结点都会有自己特定的一串二进制编码:
采取这样的方式以后定位和搜索就会变得非常高效。
定位会定位到叶子结点,空间想象一下的话就是一个大立方体中的小立方体(想象一下魔方)。
而每一个叶节点(小立方体voxel)中存放的就是很多点了。
在获取的时候,可以通过反序列化的方式。获取点的位置和索引。
在获取临近点的信息以后,对于图形三维中的很多计算来说就很有价值了。比如滤波,法线计算等等。进而影响到数据量的压缩,渲染等等。
线性八叉树_游戏场景管理的八叉树算法是怎样的?相关推荐
- 游戏场景管理(五)空间划分
一 前言 空间划分算法有很多,比如均匀网格,四/八叉树,k-d树,Bsp树,每一种算法都有自己的优缺点,我们需要从理论上理解这些算法,然后在实际项目中进行灵活的运用. 游戏中经常使用空间划分算法来优化 ...
- 3D游戏场景管理概述
参考文章 http://www.cnblogs.com/kex1n/archive/2012/08/26/2657054.html 关于场景管理概述 http://www.cnblogs.com/wa ...
- 游戏场景管理—四叉树
内容会持续更新,有错误的地方欢迎指正,谢谢! 场景管理:把不同的物体归属到不同类别里,而相似性的判断是根据物体的空间相干性. 把物体分类的目的:希望下次能快速找到所需的物体,所以更偏向于用四叉树来管理 ...
- 游戏场景管理(二)视锥体剔除
在学习场景管理之前,我们要先学习一下视锥体剔除(VFC),因为无论你使用什么空间划分算法,划分的空间都要进行视锥体剔除,被剔除的空间内部的所有物件都会被抛弃以此来加速渲染或碰撞.这也是场景管理的核心目 ...
- 游戏场景管理(四)遮挡剔除
1.画家算法 早期的gpu是没有z-buffer的,为了得到正确的图像,必须使用画家算法,也就是从后往前绘制几何体.几何体每帧都需要根据摄像机的位置进行排序,进而实现从后往前的绘制.画家算法不仅低效, ...
- findwindowex子窗口类型有哪几种_游戏场景该怎么画?来参考一下不同的类型吧
hello大家晚桑猴 我是绘伴小腿子,又来给大家分享新的知识点啦 画场景的同学有没有?评论区举个爪吧 是不是觉得场景要比角色难得多? 那我们今晚就分享一下<游戏中常见场景类型和风格> 首先 ...
- Unity_实验二_游戏场景搭建
实验二 游戏场景搭建 实验目的: 掌握游戏场景搭建. 实验要求: 能够使用Unity的地形引擎创建地形,熟悉场景中的光照与阴影,掌握天空盒和雾化效果等. 实验内容: 地形的绘制:使用高度图绘制:使用笔 ...
- 关于八叉树及三维场景管理算法
Octree (by J. Eder 9225396) What is an Octree? Using an Octree Types of Octrees What does it r ...
- 算法:线性时间选择_机器学习必修课!scikit-learn 支持向量机算法库使用小结
本文从实践的角度对scikit-learn SVM算法库的使用做一个小结.scikit-learn SVM算法库封装了libsvm 和 liblinear 的实现,仅仅重写了算法了接口部分. 1. s ...
最新文章
- python box2d_win10+Anaconda3成功使用pip安装Box2d
- 【攻防世界014】tt3441810
- ext js ajax表单校验,Extjs之grid单元格编辑校验(示例代码)
- 【工作经验分享】这些新技术你们都知道吗
- kpi权重设置原则_东阳用友ERP评价体系的建立原则及过程
- python 代码行数统计工具_Python实现代码行数统计工具
- iOS开发系列--Objective-C之类和对象
- 让Windows 7变成WIFI热点
- PostgreSQL bloat 检查与处理
- 工业数据存储数据库选型比较
- MySQL数据库建立数据库和表(命令行方式)
- ftp服务器vsftpd配置文件,vsftpd配置文件详解及ftp服务器搭建
- linux查看weblogic的安装目录,linux下weblogic安装并部署项目,图文详细.
- 《Windows 8 权威指南》——2.7 降低功耗,延长续航时间才是王道
- UDP 分片 与 丢包,UDP 真的比 TCP 高效吗?
- phpstudy下载安装简明教程+软件下载(图文)
- onedrive电脑手机不同步_Win10系统OneDrive不同步咋办?如何同步OneDrive文件?
- hdu1459_非常可乐
- 嵌入式linux的ext4文件系统更新
- PTA 7-17 直角坐标->极坐标