如何为rgl rayshader 3D图启用滚轮缩放功能?
Rayshader 3D图滚轮缩放功能丢失的解决方法
旧版(2019年)rayshader生成的HTML交互图默认支持滚轮缩放,但2022年版本输出的同类图却没有这个功能,核心原因是rgl包的rglwidget()默认鼠标交互设置在版本迭代中发生了变化。
原示例代码(中文注释版)
library(rayshader) # 用raster包加载地形数据 loadzip = tempfile() download.file("https://tylermw.com/data/dem_01.tif.zip", loadzip) localtif = raster::raster(unzip(loadzip, "dem_01.tif")) unlink(loadzip) # 将栅格数据转换为矩阵格式 elmat = raster_to_matrix(localtif) # 生成3D地形可视化 elmat %>% sphere_shade(texture = "desert") %>% # 添加沙漠纹理的球面阴影效果 add_water(detect_water(elmat), color = "desert") %>% # 识别水域并匹配沙漠色调 plot_3d(elmat, zscale = 10, fov = 0, theta = 135, zoom = 0.75, phi = 45, windowsize = c(1000, 800)) # 绘制3D场景 # 保存为HTML交互文件 htmlwidgets::saveWidget(rgl::rglwidget(), "rayshader ex1.html")
修复方案
在调用rglwidget()时,通过mouseMode参数手动指定滚轮行为为缩放,即可恢复旧版的交互逻辑:
library(rayshader) # 用raster包加载地形数据 loadzip = tempfile() download.file("https://tylermw.com/data/dem_01.tif.zip", loadzip) localtif = raster::raster(unzip(loadzip, "dem_01.tif")) unlink(loadzip) # 将栅格数据转换为矩阵格式 elmat = raster_to_matrix(localtif) # 生成3D地形可视化 elmat %>% sphere_shade(texture = "desert") %>% add_water(detect_water(elmat), color = "desert") %>% plot_3d(elmat, zscale = 10, fov = 0, theta = 135, zoom = 0.75, phi = 45, windowsize = c(1000, 800)) # 配置鼠标交互,指定滚轮为缩放功能 htmlwidgets::saveWidget(rgl::rglwidget(mouseMode = list(scroll = "zoom")), "rayshader ex1.html")
自定义交互逻辑(可选)
如果需要同时保留其他鼠标操作的默认行为,可以完整配置所有鼠标模式:
rgl::rglwidget(mouseMode = list( left = "rotate", # 左键旋转视角 right = "pan", # 右键平移场景 scroll = "zoom" # 滚轮缩放视图 ))
内容的提问来源于stack exchange,提问作者D Bolta
相关产品推荐
相关产品推荐

