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

R语言rgl窗口创建非规则布局子场景的问题咨询

在rgl单个窗口中创建非对齐子场景的解决方案

原代码问题分析

你用par3d(windowRect)的方式是错误的——这个参数是用来设置整个rgl窗口在屏幕上的位置和尺寸,并非子场景在窗口内的显示区域。而且每次调用plot3d会默认创建新的子场景并设为当前,导致之前的红色球体子场景被隐藏,最终只显示最后创建的蓝色球体。

修正:左右分栏的两个子场景

要创建独立的非对齐子场景,应该用subscene3d()创建子场景并指定内部视口,再切换到对应子场景绘图:

library(rgl)

# 打开主3D窗口,获取主场景ID
main_scene <- open3d()

# 创建左侧红色子场景,视口占窗口左半部分(x:0-0.5,y:0-1)
sub_red <- subscene3d(main_scene, viewport = c(0, 0, 0.5, 1))
currentSubscene3d(sub_red)  # 切换到该子场景
plot3d(rnorm(100), rnorm(100), rnorm(100), col = "red", type = "s")

# 创建右侧蓝色子场景,视口占窗口右半部分(x:0.5-1,y:0-1)
sub_blue <- subscene3d(main_scene, viewport = c(0.5, 0, 1, 1))
currentSubscene3d(sub_blue)  # 切换到该子场景
plot3d(rnorm(100), rnorm(100), rnorm(100), col = "blue", type = "s")

进阶:蓝色子场景放在红色子场景右上角(尺寸为1/4)

如果要让蓝色子场景位于红色子场景的右上角,且面积为红色的1/4,只需要调整两个子场景的视口参数即可:

library(rgl)

main_scene <- open3d()

# 创建红色大子场景,占满整个窗口
sub_red <- subscene3d(main_scene, viewport = c(0, 0, 1, 1))
currentSubscene3d(sub_red)
plot3d(rnorm(100), rnorm(100), rnorm(100), col = "red", type = "s")

# 创建蓝色小子场景,位于窗口右上角(x:0.5-1,y:0.5-1),面积为红色的1/4
sub_blue <- subscene3d(main_scene, viewport = c(0.5, 0.5, 1, 1))
currentSubscene3d(sub_blue)
plot3d(rnorm(100), rnorm(100), rnorm(100), col = "blue", type = "s")

关键说明

  • subscene3d():基于主场景创建新子场景,viewport参数接受0-1的比例值,对应子场景在窗口中的x起始、y起始、x结束、y结束位置。
  • currentSubscene3d():切换到指定子场景绘图,确保不同子场景的内容不会互相覆盖。
  • 无需依赖mfrow3d(),可以完全自定义子场景的位置和尺寸,满足非行列对齐的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 22:12:42