我需要创建两个Box,它们都应以相同的速度以相同的速度旋转,只有它们的位置应该不同。我得到的就是:
http://i.stack.imgur.com/JMua9.png
我使用了以下代码:
float rotatevalue;
void setup()
{
rotatevalue = 0;
size(500, 500, OPENGL);
if (frame != null) {
frame.setResizable(true);
}
}
void draw()
{
background(245, 238, 184);
fill(246, 225, 65);
rotatevalue = rotatevalue + 2;
pushMatrix();
translate(width/4, height/4);
rotateX(radians(rotatevalue));
rotateY(radians(rotatevalue));
box(50);
popMatrix();
pushMatrix();
translate(3*width/4, height/4);
rotateX(radians(rotatevalue));
rotateY(radians(rotatevalue));
box(50);
popMatrix();
}
使它们以不同方式旋转有什么问题?
答案 0 :(得分:0)
我不习惯使用OpenGL矩阵堆栈,所以这可能有些偏离基础。我计算自己的模型矩阵传递给顶点着色器。当我这样做时,我会在翻译之前先进行轮换。
答案 1 :(得分:0)
如果你想在2D草图中绘制3D对象,你必须使用某种类型的投影,就像你的眼睛投射现实世界一样。有关详细信息,您应该详细了解perspective和projection。
所以你的盒子以同样的方式旋转!我将尝试在这个基本示例上演示它。在这里你可以看到草图中间的5个方框:
void setup(){
size(500, 500, OPENGL);
fill(246, 225, 65);
//ortho();
}
void draw(){
background(245, 238, 184);
translate(width/2, height/2);
draw_box(0);
draw_box(1);
draw_box(2);
draw_box(3);
draw_box(4);
}
void draw_box(int pos){
pushMatrix();
switch(pos){
case 0: translate( 0, 0); break;
case 1: translate( 0,-100); break;
case 2: translate( 0, 100); break;
case 3: translate( 100, 0); break;
case 4: translate(-100, 0); break;
}
box(50);
popMatrix();
}
没有轮换,所以它们应该相同?没有!它与铁路轨道相同=它们是平行的但是在远距离你几乎可以看到它们在触摸(img)
您可以尝试使用正交投影来获取更多类似的框以获取更多信息,请参阅ortho。如果你想要更好的结果,你也应该更加中心化。