RGL中修改cube3d材质为线框模式失效的解决方案问询
rgl切换立方体线框模式失效问题的解决方法
问题原因
从rgl v0.106版本开始,shapelist3d()的材质处理逻辑发生调整:形状对象自带的front、back渲染模式属性默认会被调用时的全局材质参数覆盖,仅颜色、透明度等基础属性会保留,因此会出现修改颜色生效、切换线框模式不生效的情况。
解决方案
方案1:绘制时单独指定目标对象材质
如果是首次绘制,可将需要特殊材质的对象分组,调用shapelist3d()时单独传入material参数,直接覆盖默认设置:
library(rgl) open3d() # 生成基础立方体对象 cb <- cube3d() # 绘制实心绿色立方体 shapelist3d(list(cb), position = c(-2,0,0), material = list(color = "green")) # 绘制线框蓝色立方体 shapelist3d(list(cb), position = c(2,0,0), material = list(color = "blue", front = "line", back = "line"))
方案2:动态修改已绘制对象的材质
如果已经完成绘制,需要调整部分对象的材质,可通过rgl.ids()获取目标对象的ID,再调用rgl.material()直接修改指定ID的属性,无需修改原形状对象:
library(rgl) open3d() cb <- cube3d(col = "green") shapelist3d(list(cb)) # 获取已绘制的立方体ID obj_id <- rgl.ids()$id[rgl.ids()$type == "shapes"][1] # 直接修改材质为蓝色线框 rgl.material(id = obj_id, color = "blue", front = "line", back = "line")
批量处理说明
如果需要对大量对象做选择性描边,可在绘制时记录对应对象的ID,或者通过rgl.ids()的tag参数给不同类型的对象打标签,后续按标签批量筛选修改即可。
内容的提问来源于stack exchange,提问作者Timpe
相关产品推荐
相关产品推荐

