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

如何在rgl窗口中按原始尺寸比例显示两个不同大小的3D对象?

解决rgl分窗口中对象显示大小一致的问题

问题出在mfrow3d的默认行为——每个子窗口会自动调整视图范围,让当前窗口内的图形填满整个可视区域,导致缩小后的对象被自动放大,看起来和原对象一样大。

方法一:固定所有子窗口的坐标范围

通过rgl.bbox()为每个窗口设置相同的xlim、ylim、zlim,强制统一视角范围,这样小对象就能显示出真实比例:

library(rgl)
vertices <- c( 
     -1.0, -1.0, 0,
      1.0, -1.0, 0,
      1.0,  1.0, 0,
     -1.0,  1.0, 0
  )
indices <- c( 1, 2, 3, 4 )
vertices2 <- vertices * 0.5

mfrow3d(1,2, sharedMouse = T)
# 绘制原对象并固定坐标范围
wire3d( mesh3d(vertices = vertices, quads = indices) )
rgl.bbox(xlim = c(-1, 1), ylim = c(-1, 1), zlim = c(0, 0))
next3d()
# 绘制缩小对象,使用相同的坐标范围
wire3d( mesh3d(vertices = vertices2, quads = indices) )
rgl.bbox(xlim = c(-1, 1), ylim = c(-1, 1), zlim = c(0, 0))

方法二:在同一窗口中平移显示两个对象

如果不需要分窗口,直接在同一个视图里将两个对象分开(比如沿x轴平移),能更直观地对比大小:

library(rgl)
vertices <- c( 
     -1.0, -1.0, 0,
      1.0, -1.0, 0,
      1.0,  1.0, 0,
     -1.0,  1.0, 0
  )
indices <- c( 1, 2, 3, 4 )
vertices2 <- vertices * 0.5

# 原对象在左侧
wire3d( mesh3d(vertices = vertices, quads = indices) )
# 缩小对象平移到右侧(x方向偏移2个单位)
wire3d( mesh3d(vertices = vertices2 + c(2, 0, 0), quads = indices), col = "red" )

内容的提问来源于stack exchange,提问作者Patrick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 13:05:40