`
hereson3
  • 浏览: 162913 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

LOD地形设计(二)

阅读更多
自从LOD地形第一节推出以来,受到不少朋友的关注,本人真是受宠若惊,无奈自己水平有限,怕写不好让大家对自己失望,我只能勉为其难,努力去写,同时欢迎高人能手给于指正,大家共同学习,共同提高! LOD地形的四叉树算法原理就是对地形进行四叉树分割,同时检查该节点是否位于视截体内部,如果在视截体内部且满足视距,周围点高程误差等条件时,则对该节点继续分割,否则不予分割。其中重点是视截体的计算,以及地形的分割及渲染。下面介绍几个系统中用到的类。 首先介绍标志节点是否分割的类Bit 类定义: //该类根据节点的位置,为每个节点在标志段里相应位设一个标识。 /*********************************************************************** * Copyrights Reserved by QinGeSoftware * Author : Qinge * Filename : Bit.h 1.0 * Date: 2008-1-10 ************************************************************************/ #pragma once class Bit { public: void SetScale(int nScale); //伸缩系数 void Set(int x, int y, BOOL bFlog=TRUE); //设置标志位 void Reset(); //标志清零 BOOL CreateBits(int nXBites, int nRows); //创建标志数组 BOOL IsTrue(int x, int y); //查询该位标志 public: Bit(); virtual ~Bit(void); private: unsigned char *m_pBits; //存储位标志的指针 int m_nXBytes; //X方向的字节数 int m_nZRows; //Z方向的行数 int m_nScale; //伸缩系数 }; //类实现文件 /*********************************************************************** * Copyrights Reserved by QinGeSoftware * Author : Qinge * Filename : Bit.cpp 1.0 * Date: 2008-1-10 ************************************************************************/ #include "StdAfx.h" #include "Bit.h" Bit::Bit(void) { m_pBits = NULL; //指针初始化为NULL m_nXBytes = 0; m_nZRows = 0; m_nScale = 1; //不能初始化为0,因为是除数 } Bit::~Bit(void) { if(m_pBits != NULL) { delete [] m_pBits; //释放指针 m_pBits = NULL; //置为空,否则会成为野指针 } } BOOL Bit::CreateBits(int nXBites, int nRows) { //nXBits 必须是8的倍数 m_nXBytes = nXBites/8+1; //想想为什么加1 m_nZRows = nRows; m_pBits = new unsigned char[m_nXBytes * m_nZRows]; //分配空间 memset(m_pBits, 0, m_nZRows * m_nXBytes); //标志段全部初始化0 return 0; } void Bit::SetScale(int nScale) { m_nScale = nScale; //提供操作私有变量的接口 } void Bit::Set(int x, int y, BOOL bFlog ) { x = x / m_nScale; //每隔m_nScale采样 y = y / m_nScale; unsigned char &c = m_pBits[y * m_nXBytes + x/8]; //获得某字符的引用,注意赋值方式,否则 unsigned char d = 0x80; //后面改了白该。 d = d >>(x%8); //根据X值得不同,首位右移相应位数。移位 // 使得每个节点对应一位。 if(bFlog) { c|=d; //把字符C与X相应的位置为1 } else { d = ~d; //和某节点对应的位为0,其余位为1 c &= d; //把字符C与X相应的位置为0 } } void Bit::Reset() { memset(m_pBits, 0, m_nXBytes * m_nZRows); } BOOL Bit::IsTrue(int x, int y) { x = x/m_nScale; y = y/m_nScale; unsigned char c = m_pBits[y*m_nXBytes+x/8]; //这次不是引用,想想为什么 unsigned char d = 0x80; c = c
分享到:
评论

相关推荐

    静态LOD地形网格索引计算 V1 0 修复了前一版的Bug

    "GenLODGridIndex"工具正是为了实现这种静态LOD地形而设计的,它负责计算地形网格的索引,生成不同LOD级别的Chunk。索引计算是关键步骤,因为它决定了哪些多边形在特定LOD级别下应该被显示或忽略。GenLODGridIndex v...

    基于四叉树算法的LOD地形漫游程序

    "基于四叉树算法的LOD地形漫游程序"是一个利用四叉树数据结构实现的Level of Detail (LOD)技术,用于优化大规模地形的显示效果。这个程序是用C++编译器VC(Visual C++)实现的。 四叉树是一种扩展自二叉树的数据...

    地形场景漫游说明文档(LOD地形 )

    场景漫游说明文档 包括场景切割地形LOD无限地形等等

    地形渲染的动态LOD四叉树算法

    地形渲染的动态LOD四叉树算法,读者应该熟悉递归程序设计,以及基本的VC OpenGL编程.

    地形lod模型与飞行模拟

    地形LOD(Level of Detail)模型与飞行模拟是构建大规模三维环境中的关键技术,尤其是在游戏开发、虚拟现实和航空航天领域。LOD技术旨在优化图形渲染性能,通过动态调整模型的细节程度,确保在远距离和近距离观察时...

    基于四叉树的动态多分辨率 L O D地形快速简化

    ### 基于四叉树的动态多分辨率 LOD 地形快速简化 #### 摘要与背景 本文探讨了一种改进的基于四叉树的动态多分辨率 LOD(Level Of Detail)地形简化方法。该方法旨在提高地形模型的简化效率,并优化实时渲染速度。...

    23.湖州市火车站地区城市设计—TOD,LOD.zip

    湖州市火车站地区的城市设计是一个结合了现代交通导向发展(TOD)理念和地形景观级别(LOD)的综合规划项目。本设计旨在优化区域内的交通布局,提升城市功能,并充分考虑环境可持续性,以实现高效、宜居的城市空间。...

    Automatic LOD 1.07

    在Unity3D中,LOD系统可以通过手动设置或使用插件自动实现,而"Automatic LOD 1.07"就是专为此设计的自动化工具。 该资产的1.07版本代表了经过多次迭代和优化后的成熟产品,开发者可以期待它带来的稳定性和性能提升...

    lod-terrain:平滑体素地形细节水平的原型

    "lod-terrain"项目就是将LOD技术应用到体素地形的一个原型实现,旨在提高游戏或虚拟环境中的地形渲染效率。 这个项目基于Rust编程语言进行开发,Rust是一门系统级语言,以其内存安全和高性能而著名,特别适合于开发...

    面向GPU的多LOD因子的大规模场景策略及其原型系统

    - **LOD动态调整**: 根据观察者的位置和视角,动态调整地形的LOD等级,使得远处的地形使用较低的细节级别,而近处的地形则使用较高的细节级别,从而在不影响用户体验的前提下节省计算资源。 - **GPU与CPU通信**: ...

    OpenGL实践二:基于分形的山地地形绘制(毕业设计)

    在OpenGL中,我们首先创建一个二维网格,每个网格点代表地形的高度。然后,我们可以应用分形噪声函数来计算每个网格点的高度值。这通常涉及到多个频率和振幅的噪声层叠加,每层噪声对应不同的地形细节级别,从大范围...

    TerrainLOD

    总的来说,地形LOD是一个综合了算法优化、数据结构设计和渲染技术的复杂领域,它在现代3D图形应用中扮演着至关重要的角色。通过持续的研究和改进,开发者们能够更有效地呈现广阔而细致的虚拟世界,提供更加沉浸式的...

    creator地形制作文件

    计划阶段需深入理解模拟需求,包括飞行高度、视野范围等,这些因素直接影响地形的LOD设计。硬件要求亦不可忽视,必须确保多边形、纹理与光源的数量在硬件承载范围内。多边形预算是平衡真实感与效率的关键,通常建议...

    3D 地形 生成 DirectX 游戏编程

    5. **地形LOD(细节层次)**: 根据观察距离动态调整地形细节,优化性能。 6. **渲染**: 设置管线状态,调用DrawIndexedPrimitive绘制地形。 在"Chapter 13"中,可能详细讲解了如何使用Direct3D实现这些步骤,以及...

    精通Direct3D图形与动画程序设计 28_第二十八章 三维地形模拟.rar

    在本章“精通Direct3D图形与动画程序设计 28_第二十八章 三维地形模拟”中,我们将深入探讨如何使用Direct3D技术来创建和渲染逼真的三维地形。Direct3D是Microsoft开发的一个图形应用程序接口(API),广泛应用于...

    Unity地形转换Mesh

    这种设计使得大型地形的渲染变得高效,但同时也限制了对地形的某些高级操作。 转换地形为Mesh,我们可以利用Unity的内置API,如`Terrain.activeTerrain.mesh`,来获取地形的Mesh数据。然而,这个过程需要注意的是,...

    vc地形显示源码

    地形渲染是GIS中的一个重要组成部分,它涉及到将地形数据转化为可视化的二维或三维图像。这种技术广泛应用于地图制作、环境分析、城市规划、军事等领域。在VC++中,通常通过OpenGL或Direct3D这样的图形库来实现3D...

    opengl地形源代码

    4. **地形细分**:为了获得更平滑的地形表面,通常会使用LOD(Level of Detail)技术,根据观察者与地形的距离动态调整细节级别。这可能涉及到多分辨率的网格生成和切换。 5. **纹理贴图**:地形往往需要用纹理来...

    根据高度图自动生成地形.zip

    这些特性允许开发者在运行时生成或修改地形,极大地扩展了地形设计的可能性。 为了优化性能,Unity地形系统支持LOD,这意味着离玩家较远的地形会显示较低的细节水平,而近处的地形则会显示更丰富的细节。这使得大...

Global site tag (gtag.js) - Google Analytics