最近正好在看吧。就谈一下数据结构。

八叉树特别适合进行空间划分。在需要邻近点信息做参考时,利用八叉树做搜索会非常高效。

八叉树必备的元素:尺寸:一般就是自己限定的空间(有的地方也叫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)中存放的就是很多点了。

在获取的时候,可以通过反序列化的方式。获取点的位置和索引。

在获取临近点的信息以后,对于图形三维中的很多计算来说就很有价值了。比如滤波,法线计算等等。进而影响到数据量的压缩,渲染等等。

线性八叉树_游戏场景管理的八叉树算法是怎样的?相关推荐

  1. 游戏场景管理(五)空间划分

    一 前言 空间划分算法有很多,比如均匀网格,四/八叉树,k-d树,Bsp树,每一种算法都有自己的优缺点,我们需要从理论上理解这些算法,然后在实际项目中进行灵活的运用. 游戏中经常使用空间划分算法来优化 ...

  2. 3D游戏场景管理概述

    参考文章 http://www.cnblogs.com/kex1n/archive/2012/08/26/2657054.html 关于场景管理概述 http://www.cnblogs.com/wa ...

  3. 游戏场景管理—四叉树

    内容会持续更新,有错误的地方欢迎指正,谢谢! 场景管理:把不同的物体归属到不同类别里,而相似性的判断是根据物体的空间相干性. 把物体分类的目的:希望下次能快速找到所需的物体,所以更偏向于用四叉树来管理 ...

  4. 游戏场景管理(二)视锥体剔除

    在学习场景管理之前,我们要先学习一下视锥体剔除(VFC),因为无论你使用什么空间划分算法,划分的空间都要进行视锥体剔除,被剔除的空间内部的所有物件都会被抛弃以此来加速渲染或碰撞.这也是场景管理的核心目 ...

  5. 游戏场景管理(四)遮挡剔除

    1.画家算法 早期的gpu是没有z-buffer的,为了得到正确的图像,必须使用画家算法,也就是从后往前绘制几何体.几何体每帧都需要根据摄像机的位置进行排序,进而实现从后往前的绘制.画家算法不仅低效, ...

  6. findwindowex子窗口类型有哪几种_游戏场景该怎么画?来参考一下不同的类型吧

    hello大家晚桑猴 我是绘伴小腿子,又来给大家分享新的知识点啦 画场景的同学有没有?评论区举个爪吧 是不是觉得场景要比角色难得多? 那我们今晚就分享一下<游戏中常见场景类型和风格> 首先 ...

  7. Unity_实验二_游戏场景搭建

    实验二 游戏场景搭建 实验目的: 掌握游戏场景搭建. 实验要求: 能够使用Unity的地形引擎创建地形,熟悉场景中的光照与阴影,掌握天空盒和雾化效果等. 实验内容: 地形的绘制:使用高度图绘制:使用笔 ...

  8. 关于八叉树及三维场景管理算法

    Octree (by J. Eder 9225396) What is an Octree?  Using an Octree  Types of Octrees     What does it r ...

  9. 算法:线性时间选择_机器学习必修课!scikit-learn 支持向量机算法库使用小结

    本文从实践的角度对scikit-learn SVM算法库的使用做一个小结.scikit-learn SVM算法库封装了libsvm 和 liblinear 的实现,仅仅重写了算法了接口部分. 1. s ...

最新文章

  1. python box2d_win10+Anaconda3成功使用pip安装Box2d
  2. 【攻防世界014】tt3441810
  3. ext js ajax表单校验,Extjs之grid单元格编辑校验(示例代码)
  4. 【工作经验分享】这些新技术你们都知道吗
  5. kpi权重设置原则_东阳用友ERP评价体系的建立原则及过程
  6. python 代码行数统计工具_Python实现代码行数统计工具
  7. iOS开发系列--Objective-C之类和对象
  8. 让Windows 7变成WIFI热点
  9. PostgreSQL bloat 检查与处理
  10. 工业数据存储数据库选型比较
  11. MySQL数据库建立数据库和表(命令行方式)
  12. ftp服务器vsftpd配置文件,vsftpd配置文件详解及ftp服务器搭建
  13. linux查看weblogic的安装目录,linux下weblogic安装并部署项目,图文详细.
  14. 《Windows 8 权威指南》——2.7 降低功耗,延长续航时间才是王道
  15. UDP 分片 与 丢包,UDP 真的比 TCP 高效吗?
  16. phpstudy下载安装简明教程+软件下载(图文)
  17. onedrive电脑手机不同步_Win10系统OneDrive不同步咋办?如何同步OneDrive文件?
  18. hdu1459_非常可乐
  19. 嵌入式linux的ext4文件系统更新
  20. PTA 7-17 直角坐标->极坐标

热门文章

  1. A. Tower(暴力 + 看数据范围)
  2. 工业互联网平台大盘点
  3. Selenium4+Python3系列 - Selenium的三种等待,强制等待、隐式等待、显式等待
  4. setInterval中的函数先执行一次再等待
  5. VB6 错误383 text属性只读
  6. php鼠标移动脚本,按键精灵鼠标移动脚本–eq
  7. 高通audio offload学习
  8. 奔步前端面试(实习)
  9. Webpack的HMR原理解析
  10. 猜数游戏c语言程序流程图,C语言猜数游戏代码