我收集了一些数据。
它由我使用网格划分软件制作的顶点和三角形组成。
我可以使用R和
trimesh(三角形,顶点)
制作漂亮的网格图。
但是无法弄清楚如何使用RGL创建一个我可以查看的交互式绘图,而我无法根据数据中的不同值来弄清楚如何为网格的面部着色帧。
这是数据框中的顶点。 x,y,z是节点/点(nn)的坐标
@import url('href="//fonts.googleapis.com/css?family=Arvo');
顶点的三角形是
'data.frame': 23796 obs. of 7 variables:
$ nn : int 0 1 2 3 4 5 6 7 8 9 ...
$ x : num 39.5 70.8 49 83.5 -16 ...
$ y : num 28.2 -2.97 -25.67 -9.1 -39.75 ...
$ z: num 160 158 109 121 188 ...
$ uni: num 3.87 6.64 5.02 4.48 1.91 ...
$ bi : num 0.749 0.784 1.045 0.935 0.733 ...
nn x y z uni bi
0 39.527 28.202 160.219 3.86942 0.74871
1 70.804 -2.966 157.578 6.64361 0.78373
2 48.982 -25.674 109.022 5.02491 1.0451
3 83.514 -9.096 120.988 4.47977 0.9348
4 -16.04 -39.749 188.467 1.90873 0.73286
5 74.526 -3.096 174.347 8.4263 0.70594
6 54.93 -56.347 151.496 7.53334 2.17128
7 56.936 -20.131 186.177 7.16118 1.44875
8 -14.627 -47.1 162.185 2.13939 0.70887
9 38.207 -59.201 147.993 5.83457 4.32971
10 50.645 -32.04 110.418 5.3741 1.14543
我需要在三角形中将其制作成网格,但是使用RGL并且我需要根据uni的比例对网格的面进行着色,其中< 0.5为红色,0 / 5-1 / 5是橙色,> 1.5是绿色
答案 0 :(得分:0)
以下是一个示例,从两个数据帧开始。
> library(rgl)
> vertices
x y z
1 1 -1 1
2 1 -1 -1
3 1 1 -1
4 1 1 1
5 -1 -1 1
6 -1 -1 -1
7 -1 1 -1
8 -1 1 1
> triangles
T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12
1 5 5 1 1 2 2 6 6 8 8 1 1
2 1 4 2 3 6 7 5 8 4 3 6 5
3 4 8 3 4 7 3 8 7 3 7 2 6
您需要使用矩阵来处理tmesh3d
。必须将一行1
添加到顶点表中。
verts <- rbind(t(as.matrix(vertices)),1)
trgls <- as.matrix(triangles)
tmesh <- tmesh3d(verts, trgls)
现在你可以绘制网格:
wire3d(tmesh)
关于颜色,您必须将一种颜色与每个三角形相关联:
tmesh$material <- list(color=rainbow(ncol(trgls)))
wire3d(tmesh)
> shade3d(tmesh)
最新版本的rgl
(0.100.18)允许对材质颜色进行不同的解释。
您可以为每张脸指定颜色:
vertices <- as.matrix(vertices)
triangles <- as.matrix(triangles)
mesh1 <- tmesh3d(
vertices = t(vertices),
indices = triangles,
homogeneous = FALSE,
material = list(color = rainbow(ncol(triangles)))
)
shade3d(mesh1, meshColor = "faces")
或为每个顶点指定颜色:
mesh2 <- tmesh3d(
vertices = t(vertices),
indices = triangles,
homogeneous = FALSE,
material = list(color = rainbow(nrow(vertices)))
)
shade3d(mesh2, meshColor = "vertices")