我正在编写一个 3D 草图,其中用户在左键单击和移动鼠标的同时使用 peasyCam 旋转相机。问题是我想在按下右键时移动对象,以便用户可以在屏幕的 X 和 Y 轴上拖动对象。当然,我知道如何使用 mouseX 和 mouseY 输入来修改平移,但只能跨越 3D 空间坐标,如下面的 GIF 所示:
图像中发生的事情的示例代码:
import peasy.*;
import peasy.org.apache.commons.math.*;
import peasy.org.apache.commons.math.geometry.*;
PeasyCam cam;
float x=15;float y=15; float z=15;
float e;
void setup(){
size (700,700,P3D);
cam = new PeasyCam(this, 200);
cam.setRightDragHandler(null);
}
void draw(){
background(0);
pushMatrix();
translate(5, 5, 0);
fill(255);
stroke(255);
sphere(5);
popMatrix();
pushMatrix();
fill(255,0,0);
stroke(255,0,0);
translate(x, y, z);
sphere(5);
popMatrix();
stroke(0,0,255);
line(5,5,0,x,y,z);
//obvoiusly not working method
if(mousePressed && (mouseButton == RIGHT)){
x= x+(mouseX-pmouseX);
y= y+(mouseY-pmouseY);
}
}
void mouseWheel(MouseEvent event) {
e = event.getCount();
z=z+e;
println(e);
}
void mousePressed(){
if (mouseButton==RIGHT){
cam.setActive(false);
}
}
void mouseReleased(){
cam.setActive(true);
}
我需要的是能够仅在屏幕 X/Y 轴上拖动球体,在固定的 Z 上,如下图所示(我对我正在寻找的行为进行的简单模拟)。
PeasyCam 用于探索 3D 空间。这个问题可能很难理解。问题是关于在 3D 世界上移动对象,使用屏幕/画布 2D 坐标使对象跟随光标的移动。如果鼠标向左移动(x 轴减小),对象应该在屏幕上向左移动,而不仅仅是在世界 X 轴上。这是第二个示例图像的行为方式,但仅通过模拟 3D 空间来实现,而没有实际旋转到 x、y、z 轴。
我一直在用这个东西挠头,我似乎无法弄清楚。否则我不会在这里问。提前谢谢各位。