当 Cesium 单个模型过长时,会遇到某些视角模型显示不完整的问题,如下图所示: 经过在官方论坛上询问,该问题由 viewer.scene.logarithmicDepthBuffer 开启造成,关闭即可修复,代码如下: viewer.scene.logarithmicDepthBuffer = false; 修复后的模型如图所示: Logarithmic Depth Buffer 相关说明可参见 Hybrid Multi-Frustum Logarithmic Depth Buffer…
观察透视投影矩阵: 对于x和y,矩阵变换只是一个缩放系数,那么逆变换就是缩放系数的倒数,所以 设Xndc Yndc为NDC空间中的XY坐标,Xview Yview Zview为view space中的坐标,则 所以 所以已知XY的NDC坐标和view space z,就能求出view space position,写成代码就是: float M = tan(fov*0.5f)*aspect; float N = tan(fov*0.5f); float3 GetViewSpacePos(floa…
声明:本文完全翻译自DX SDK Documentation depth buffer,通常被称为z-buffer或者w-buffer,是设备的一个属性,用来存储深度信息,被D3D使用.当D3D渲染一个场景到target surface的时候,它会使用depth-buffer surface上的数据,来决定被rasterized三角面片的pixel间的遮挡关系. 当depth buffer被开启,rendering surface上的每一个点都会被检测.depth buffer上的值可以是点的z…
在使用D3D开发游戏的过程中,很多情况下都会用到depth buffer来完成特定的效果,比如DOF,Shadows,SSAO等等.在这些情况下我们就可能需要预览depth buffer来确定它是正确的,以免导致后续运算渲染出错.此时有一个问题就出现了,因为原始的depth buffer中保存的depth不是线性的.我们知道,世界坐标系下的顶点在经过视图变换后会被转换到视图空间,此时摄像机在原点,并且我们为摄像机定义了一个近平面和一个远平面: 在经过视图变换后,接着执行的就是投影变换,D3D的透…
这篇文章主要是参考MJP的“Attack of The Depth Buffer”,测试不同格式下depth buffer的精度. 测试的depth buffer包含两类: 一是非线性的depth buffer,存储着perspective z(也就是最常用的,透视投影后归一化的z/w的buffer),二是线性的depth buffer,存储着view space z(这里的线性指的是在view space 中是否线性).测试的格式包括16位浮点数,32位浮点数,16位定点数,还有最常用的24位…
怎么在go语言中实用google protocol Buffer呢? 现在的潮流趋势就是一键搞定,跟ubuntu安装软件一样 go get code.google.com/p/goprotobuf/{proto,protoc-gen-go} go install  code.google.com/p/goprotobuf/proto 搞定,可以在 $GO_PATH/bin下找到 protoc-gen-go 这个程序,那么就可以实用protoc-gen-go 进行go语言的proto文件的自动生成…
前言 前面已经写了两篇博客介绍Cesium,一篇整体上简单介绍了Cesium如何上手,还有一篇介绍了如何将Cesium与分布式地理信息处理框架Geotrellis相结合.Cesium的强大之处也在于其可以将时间运用到3维地球上,可以根据此时间进行动画.轨迹记录.地球的光照等等所有与时间相关的可视化效果.本文介绍Cesium中的Clock控件以及如何动态加载时间序列瓦片. 一. Clock控件 1.1 控件显示和隐藏 这里说的Clock控件包含两部分,Animation控件和Timeline控件,…
Cesium是一个基于JavaScript的开源框架,可用于在浏览器中绘制3D的地球,并在其上绘制地图(支持多种格式的瓦片服务),该框架不需要任何插件支持,但是浏览器必须支持WebGL. Cesium中常用的坐标系主要有两种:WGS84坐标系和笛卡尔空间直角坐标系.平时我们常见的某个点的经纬度就是在WGS84坐标系下某个点的坐标,它的坐标原点在椭球的质心:而笛卡尔坐标系主要是用来做空间位置的变化如平移.旋转和缩放等等,它的坐标原点在椭球的中心. 除此之外,还有不常用的坐标系:1.平面坐标系(Ca…
概述 Cesium 中包含两种添加 model 的方法,分别为: 通过 viewer.entities.add() 函数添加 通过 viewer.scene.primitives.add() 函数添加 两种方法本质上是相通的,方法 1对方法 2在某种程度上进行了封装. 两种方法的区别 表面区别 方法 1通过指定 model 的 position 和 orientation 来控制模型的位置,对模型进行精确变换的难度较大:方法 2通过 modelMatrix 控制模型的位置和方向,可进行较为精确的…
前端后台以及游戏中使用Google Protocol Buffer详解 0.什么是protoBuf protoBuf是一种灵活高效的独立于语言平台的结构化数据表示方法,与XML相比,protoBuf更小更快更简单.你可以用定义自己protoBuf的数据结构,用ProtoBuf编译器生成特定语言的源代码,如C++,Java,Python等,目前protoBuf对主流的编程语言都提供了支持,非常方便的进行序列化和反序列化. 特点: 平台无关.语言无关. 二进制.数据自描述. 提供了完整详细的操作AP…