1

人間の顔の 3D サーフェス メッシュを描画しています。データはhttps://github.com/Patricklv/Smoothing-3D-surfaceにあります。vb.xlsx には頂点が含まれ、it.xlsx には面が含まれています。

私のRコードは次のとおりです。

library(xlsx)
library(rgl)

vb <- read.xlsx("C:\\Users\\<Username>\\Desktop\\vb.xlsx", sheetIndex = 1, header = F)
it <- read.xlsx("C:\\Users\\<Username>\\Desktop\\it.xlsx", sheetIndex = 1, header = F)
vb_mat <- t(as.matrix(vb))
vb_mat <- rbind(vb_mat, 1)
rownames(vb_mat) <- c("xpts", "ypts", "zpts", "")

it_mat <- t(as.matrix(it))
rownames(it_mat) <- NULL

vertices <- c(vb_mat)
indices <- c(it_mat)

try <- tmesh3d(vertices = vertices, indices = indices, homogeneous = TRUE, material = NULL, normals = NULL, texcoords = NULL)

shade3d(try, ambient = "darkgrey", specular = "white")

結果の 3D サーフェスは次 ここに画像の説明を入力 のようになります。 3D サーフェス メッシュでは、多くの三角形が簡単に確認できます。以下に示すように、この表面メッシュをより滑らかに見せたいと思います。 ここに画像の説明を入力

目に見える三角形の面が滑らかになっている 2 番目のメッシュのように見えるように、表面メッシュを滑らかにするには、R で何をすべきですか? おそらく、シェーディング用の Phong モデルは、misc3d パッケージの輪郭 3d 関数を介して機能するでしょう。この関数を私のデータに適用する方法を誰かが示すことができますか?

R の plotly パッケージには、サーフェス メッシュを作成する非常に便利な方法がいくつかあることに注意してください。

library(plotly)

face <- plot_ly(
    x = vb[,1], y = vb[,2], z = vb[,3],
    type = "mesh3d"
)

face

結果の顔面メッシュは次のようになります。 ここに画像の説明を入力

表面のメッシュがとても滑らか!しかし、保存時に plotly.js オブジェクトの向きを制御できません。追加購入しないとPDFファイルとして保存することもできませんでした。顔情報を提供しなかった場合でも、この滑らかな表面メッシュを作成する魔法がどれほど巧妙に行われたかを知りたいです (情報は提供されず、vb のみが提供されます)。plotly によって行われる魔法を R で他の方法で行うことができるとしたら、写真を保存するときに向きをカスタマイズし、購入せずに PDF ファイルとして保存できますが、そのような高レベルの滑らかさを維持できますか?

4

1 に答える 1