如何在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
相关产品推荐
相关产品推荐

