You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 05:55:43