将rgl 3D场景保存为u3d格式(用于.pdf文件集成)

11

使用R rgl包生成了一个3D场景。

  • 我可以通过rgl函数将它保存为RTL和OBJ格式,但这些函数不支持颜色。
  • 我可以将其保存为WebGL格式,但是我找不到WebGL转换为.u3d格式的方法,也没有任何办法将WebGL内容插入到由LaTeX生成的.pdf文件中。
  • 我可以将其保存为PLY格式,然后导出为.u3d格式(例如使用Meshlab),但会出现以下错误:

    Error in if (sum(normals[1:3, it[j, i]] * normal) < 0) normals[, it[j,  : 
    missing value where TRUE/FALSE needed 
    

我真的不知道该如何解决。

这里有一个示例文件,可用于重现此问题。要复现,只需在工作目录中下载该文件,执行R并运行:

library(rgl)
load("alps3d.Rdata") #This loads the alps3d variable
plot3d(alps3d)
writePLY("alps3d.ply")

我该如何将3D场景保存为一种格式,以便在使用LaTeX的.pdf文件中集成?


示例文件已无法从链接的网站下载。您能再次上传它,或者您有其他简单的方法来重新生成使用PLY时遇到的问题吗? - WhiteViking
@WhiteViking 谢谢你的通知。我已经更新了下载链接,现在应该可以使用了。 - AF7
2
https://dev59.com/OGcs5IYBdhLWcg3wh0b7 和 http://r.789695.n4.nabble.com/Exporting-an-rgl-graph-td1872712.html 可能会有用。 - baptiste
1
你可以通过writePLY("alps3d.ply", withNormals = F)来避免这个错误。对于这个特定的模型,它似乎只有平面几何,并没有顶点法线也不会带来太大的问题。所以你最终得到一个包含几何和颜色信息的PLY文件。然而... MeshLab不会从PLY文件中读取任何颜色信息。因此,使用MeshLab转换为U3D也不是可行的方法。 - WhiteViking
1
我曾经使用persp3d和rgl.snapshot导出rgl对象,后者可以导出图片。对于3D电影,我使用了具有导出电影选项的movie3d。 - Lamothy
显示剩余2条评论
2个回答

3
你可以使用 rgl.postscript,它允许导出到各种格式,包括pdf。结果可能不是很好,但这取决于图形类型。
> x <- y <- seq(-10, 10, length = 20)
> z <- outer(x, y, function(x, y) x^2 + y^2)
> persp3d(x, y, z, col = 'lightblue')
> rgl.postscript("persp3d.pdf", "pdf")

您还可以导出到tex,从而可以进行一些手动修改。

输入图像描述


3
你应该尝试使用writeASY()函数。它为Asymptote编写代码,可以生成PRC而不是U3D格式,但可能足够好用。我尝试了你提供的示例场景,在Acrobat Reader中加载结果大约需要5分钟,但最终会加载并正常工作。
writeASY()是rgl的最新补充;你需要从R-Forge或Github上获取它的副本。

2
这很有用@user2554330。如果您已经看到它,能否为我们提供一个资源,以便完整地了解如何在LaTeX文档中使用writeASY()的输出?(除非现在更多是关于LaTeX的问题?)我看到的标准渐近线文档和帮助页面似乎并没有完全涵盖所需内容,并且我使用了http://tex.stackexchange.com/questions/111655/simple-way-to-switch-inline-asymptote-figures-on-and-off的建议后出现了许多编译错误。 - Jason Whyte

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接