简体   繁体   中英

rgl materials to keep colors constant in a 3D plot

In the matlib package, https://github.com/friendly/matlib , the function plotEqn3d() is used to plot the planes corresponding to a system of linear equations in 3 variables of the form $A x = b$, using different colors for each plane.

However, there is something about the lighting used that makes the planes change color depending on the orientation of the plot which is confusing in this application, and I don't know how to change it.

Here is an example:

library(matlib)
library(rgl)

A <- matrix(scan(), byrow=TRUE, nrow=3)
2 -2 0
1 -1 1
4 4 -4


b <- 1:3

plotEqn3d(A, b)

To show the effect, I made a movie3d() , rotating about the Z axis.

movie3d(spin3d(rpm=15), duration=4, movie="plotEqn", dir=".")

It is clear enough in the movie which plane is which, but in a still image, it is not, depending on the orientation. What are the par3d() or other settings I need to keep the color of the planes from changing?

在此处输入图片说明

A second question: The function uses rgl::plot3d() to set up the basic plot frame. Is it possible to turn off the tick marks and tick values on the axes? If so, how?

It seems better not to use plotEqn3d() but get paramaters and use rgl() 's function. You can remove geometoric effect by lit = F (detail; ?rgl.material ).

open3d()
plot3d(0,0,0, xlim = c(-2,2), ylim = c(-2,2), zlim = c(-3,3), type = "n", axes = F,
       xlab = "", ylab = "", zlab = "")      # a draft
planes3d(A[,1], A[,2], A[,3], -b, col = 2:(nrow(A) + 1), alpha = 1, lit = F)
spheres3d(solve(A, b), radius = 0.2)
box3d()
 # axes3d(c("x", "y", "z"))  # fixed tick marks and values

play3d(spin3d(rpm=15), duration = 4)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM