我想在P3D中旋转一个立方体,我的代码使用实时传感器数据来做到这一点。 问题是多维数据集的先前方向始终是可见的并且重叠(如图中所示:http://i.stack.imgur.com/txXw6.jpg),这是我不想要的。我已经尝试了“提示(DISABLE_OPTIMIZED_STROKE)”和“提示(ENABLE_DEPTH_TEST)”功能,它什么也没做。除了提示函数,我在类似的问题上找不到任何东西。
如何只渲染当前方向?
import processing.serial.*;
import toxi.geom.*;
Serial myPort;
float qW;
float qX;
float qY;
float qZ;
float[] axis = new float[4];
Quaternion quat = new Quaternion(1, 0, 0, 0);
void setup()
{
size(600, 400, P3D);
myPort = new Serial(this, "COM3", 9600);
background(0);
lights();
}
void draw()
{
serialEvent();
quat.set(qW, qX, qY, qZ);
axis = quat.toAxisAngle();
pushMatrix();
translate(width/2, height/2, -100);
rotate(axis[0], axis[1], axis[2], axis[3]);
noFill();
stroke(255);
box(330, 200, 40);
popMatrix();
}
void serialEvent()
{
int newLine = 13; // new line character in ASCII
String message;
do
{
message = myPort.readStringUntil(newLine); // read from port until new line
if (message != null)
{
String[] list = split(trim(message), " ");
if (list.length >= 4)
{
qW = float(list[0]);
qX = float(list[1]);
qY = float(list[2]);
qZ = float(list[3]);
}
}
} while (message != null);
}
答案 0 :(得分:0)
您好像没有清除帧缓冲区。尝试添加background(0);
作为draw();
中的第一行:
void draw()
{
//clear background
background(0);
serialEvent();
quat.set(qW, qX, qY, qZ);
axis = quat.toAxisAngle();
pushMatrix();
translate(width/2, height/2, -100);
rotate(axis[0], axis[1], axis[2], axis[3]);
noFill();
stroke(255);
box(330, 200, 40);
popMatrix();
}
偏离主题,可能值得查看serialEvent()。
您可以在setup()
myPort = new Serial(this, "COM3", 9600);
myPort.bufferUntil('\n');
你不需要在draw()中调用serialEvent(),串行库会这样做,因为它的缓冲。
然后在serialEvent()
希望你可以逃脱:
String message = myPort.readString();
if(message !=null){
String[] list = split(trim(message), " ");
if (list.length >= 4)
{
qW = float(list[0]);
qX = float(list[1]);
qY = float(list[2]);
qZ = float(list[3]);
}
}