登峰造极境

  • WIN
    • CSharp
    • JAVA
    • OAM
    • DirectX
    • Emgucv
  • UNIX
    • FFmpeg
    • QT
    • Python
    • Opencv
    • Openwrt
    • Twisted
    • Design Patterns
    • Mysql
    • Mycat
    • MariaDB
    • Make
    • OAM
    • Supervisor
    • Nginx
    • KVM
    • Docker
    • OpenStack
  • WEB
    • ASP
    • Node.js
    • PHP
    • Directadmin
    • Openssl
    • Regex
  • APP
    • Android
  • AI
    • Algorithm
    • Deep Learning
    • Machine Learning
  • IOT
    • Device
    • MSP430
  • DIY
    • Algorithm
    • Design Patterns
    • MATH
    • X98 AIR 3G
    • Tucao
    • fun
  • LIFE
    • 美食
    • 关于我
  • LINKS
  • ME
Claves
长风破浪会有时,直挂云帆济沧海
  1. 首页
  2. Programming
  3. babylon.js
  4. 正文

babylon.js超大场景浮动原点

2024-04-23
官方链接:
https://doc.babylonjs.com/features/featuresDeepDive/scene/floating_origin
https://forum.babylonjs.com/t/why-doesnt-babylonjs-use-rendering-relative-to-eye-to-solve-the-loss-of-precision/29532/7
https://playground.babylonjs.com/#SUMKNE#41

博主想在babylonjs中使用EPSG:3857坐标系,直接渲染。但是发现大坐标下会出现无法渲染的问题,随查找原因。

因为GPU内支持32位float数,所以例如星际旅行等超大场景的vector3渲染时,会出现精度损失造成的变形、无法渲染等问题。

常用解决方法:

  • 浮动原点;
  • 相对坐标;
  • 使用onBeforeActiveMeshesEvaluationObservable等动态修改坐标位置;参考:https://playground.babylonjs.com/#SUMKNE#41

博主测试结果

如果使用浮动原点这种方案,在mesh个数超过6W个时,渲染帧率仅为正常模式的50%左右,如果在大场景中会导致卡顿。

博主的场景中mesh格式都比较大,所以没有选择浮动原点方案。

博主实现了一个工具类,定义了一个偏移坐标,保证渲染时的流畅度。

希望babylonsjs在后续的版本升级中,能在框架中加入这个功能。

GisVectorUtils.ts{

static virtualZero = Vector3(1,2,3)

function toGisVector3(x:Vector3):Vector3{



}
function toVector3(x:Vector3):Vector3

function toGisVector2(x:Vector2):Vector2

function toVector2(x:Vector2):Vector2

}

标签: 暂无
最后更新:2024-04-23

代号山岳

知之为知之 不知为不知

点赞
< 上一篇
下一篇 >

COPYRIGHT © 2099 登峰造极境. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

蜀ICP备14031139号-5

川公网安备51012202000587号