我知道这个问题已经被问过很多次了,但是我看不到有人试图在处理3D中旋转立方体的面的任何问题(对不起,如果我没有看到的话)。我用三元组制作了一个魔方,用于循环绘制多维数据集。
public class CuboDiRubik
{
private int l; // Lato del cubo
/**
1. Costruttore del cubo
2. @param l lato del cubo
*/
CuboDiRubik(int l)
{
this.l = l;
}
public void disegna()
{
int i,j,k;
for (k = -1; k < 2; k++)
{
pushMatrix();
translate(0,0,k*(l));
for (i = -1; i < 2; i++)
{
pushMatrix();
translate(0,i*(l));
for (j = -1; j < 2; j++)
{
pushMatrix();
rotateY(angY);
translate(j*l,0);
cubo(l/2);
popMatrix();
}
popMatrix();
}
popMatrix();
}
}
您可以看到我尝试使用rotateY(),但是它不起作用(它将旋转多维数据集的所有级别)。有什么想法可以轮换吗?
cubo(int side):用于制作立方体的功能
disegna():魔方的绘制
l:魔方立方体的一面
我使索引从-1开始,因为我首先创建了中心立方体,然后又创建了其他立方体。
这是主要代码:
float ang = 0.0;
float angX = 0.0;
float angY = 0.0;
color red = color(255,0,0);
color green = color(0,255,0);
color blue = color(0,0,255);
color yellow = color(255,255,0);
color white = color(255,255,255);
color orange = color(255,128,0);
CuboDiRubik cube_rubik;
/**
+ Funzione eseguita all'avvio del programma
*/
void setup()
{
size(640, 480, P3D);
shapeMode(CENTER);
cube_rubik = new CuboDiRubik(50);
}
/**
* Funzione che disegna le forme
*/
void draw()
{
ang += 0.02;
background(255);
translate(width/2,height/2);
rotateY(ang);
rotateX(ang);
cube_rubik.disegna();
}
在主draw()中,旋转立方体以清楚地看到它。