In rgl
,绘制原始形状时,您将颜色应用于顶点,而不是面。通过在顶点处插值颜色来为面着色。
然而,cube3d()
不是原始形状,而是“网格”。它被绘制为 6 个独立的四边形。每个顶点使用 3 次。
它并没有真正记录下来,但颜色使用的顺序是前 4 个用于一个面,然后接下来的 4 个用于下一个面,依此类推。如果你希望你的颜色是rainbow(6)
,您需要将每种颜色复制 4 次:
library(rgl)
c3d <- cube3d(color=rep(rainbow(6), each = 4), alpha = 0.5)
open3d()
shade3d(c3d)
points3d(t(c3d$vb), size = 5)
for (i in 1:6)
lines3d(t(c3d$vb)[c3d$ib[,i],])
我会推荐更高的alpha
价值;我发现透明度有点令人困惑alpha = 0.5
.
顺便说一句,出于同样的目的,我通常使用看起来更球形的形状作为基线;我认为它可以让我们对转型有更好的直觉。这是我使用过的代码:
sphere <- subdivision3d(cube3d(color=rep(rainbow(6),rep(4*4^4,6)), alpha=0.9),
depth=4)
sphere$vb[4,] <- apply(sphere$vb[1:3,], 2, function(x) sqrt(sum(x^2)))
open3d()
shade3d(sphere)
这给出了这个形状:
变成这样:
A <- matrix(c( 1, 0, 1, 0, 2, 0, 1, 0, 2), 3, 3)
trans <- transform3d(sphere, A)
open3d()
shade3d(trans)
当然,如果你能旋转它,一切看起来都会更好。