1
0
Fork 0

Add buddha model with yaw, pitch, roll rotation

This commit is contained in:
Simon Giesel 2019-01-11 20:04:21 +01:00
parent 0b908b9fe4
commit 174480d3a7
2 changed files with 38764 additions and 81 deletions

View file

@ -2,104 +2,93 @@ import ketai.sensors.*;
KetaiSensor sensor; KetaiSensor sensor;
float fontSize = 130*displayDensity; float fontSize = 130*displayDensity;
float accelerometerX, accelerometerY, accelerometerZ, rotationX, rotationY, rotationZ; float rotationX, rotationY, rotationZ;
ArrayList<Integer> valuesAccelX = new ArrayList<Integer>(); float roll, pitch, yaw;
ArrayList<Integer> valuesAccelY = new ArrayList<Integer>(); PShape buddha;
ArrayList<Integer> valuesAccelZ = new ArrayList<Integer>(); PVector half = new PVector();
ArrayList<Integer> valuesRotX = new ArrayList<Integer>(); PMatrix3D baseMat;
ArrayList<Integer> valuesRotY = new ArrayList<Integer>();
ArrayList<Integer> valuesRotZ = new ArrayList<Integer>();
void setup() void setup()
{ {
sensor = new KetaiSensor(this); size(displayWidth, displayHeight, P3D);
sensor.start(); if(sensor == null){
sensor = new KetaiSensor(this);
sensor.start();
}
buddha = loadShape("buddha.obj");
buddha.setFill(0xffffffff);
buddha.setSpecular(0xfffff7d5);
textAlign(CENTER, CENTER); textAlign(CENTER, CENTER);
textSize(fontSize); textSize(fontSize);
strokeWeight(6); half.set(width * .5, height * .5);
smooth(); baseMat = getMatrix(baseMat);
} }
float mapNum;
void draw() void draw()
{ {
background(78, 93, 75); background(0xff000000);
drawGraph(valuesAccelX, height / 2 - fontSize * 4); pushMatrix();
drawGraph(valuesAccelY, height / 2 - fontSize * 3); camera(0, 0, height,
drawGraph(valuesAccelZ, height / 2 - fontSize * 2); 0, 0, 0,
drawGraph(valuesRotX, height / 2 + fontSize * 3); 0, 1, 0);
drawGraph(valuesRotY, height / 2 + fontSize * 4); scale(20);
drawGraph(valuesRotZ, height / 2 + fontSize * 5); lightSpecular(64, 64, 64);
// Horizonal light.
spotLight(255, 255, 255,
-half.x, 1, 0,
1, 0, 0,
PI, 10);
// // Vertical light.
spotLight(255, 255, 255,
1, -half.y, 0,
0, 1, 0,
PI, 10);
shape(buddha);
pitch += rotationX;
roll += rotationY;
yaw += rotationZ;
buddha.rotateX(pitch);
buddha.rotateY(-roll);
buddha.rotateZ(yaw);
popMatrix();
this.setMatrix(baseMat);
ambientLight(255, 255, 255);
fill(255); fill(255);
text("Accelerometer:", 0, -fontSize*5.5, width, height); textSize(fontSize * .5);
mapNum = mapColor(accelerometerX); text(
fill(mapNum, 255-mapNum, 0); "pitch: " + nfp(pitch * 100, 1, 1) +
text("x: " + nfp(accelerometerX, 1, 3), 0, -fontSize*4, width, height); " | roll: " + nfp(roll * 100, 1, 1) +
mapNum = mapColor(accelerometerY); " | yaw: " + nfp(yaw * 100, 1, 1),
fill(mapNum, 255-mapNum, 0); 0, fontSize*7.5, width, height
text("y: " + nfp(accelerometerY, 1, 3), 0, -fontSize*3, width, height); );
mapNum = mapColor(accelerometerZ); text("Tap screen to reset orientation", 0, fontSize*8.1, width, height);
fill(mapNum, 255-mapNum, 0); textSize(fontSize);
text("z: " + nfp(accelerometerZ, 1, 3), 0, -fontSize*2, width, height); text("fps: " + round(frameRate), 0, fontSize*9, width, height);
fill(255);
text("Gyroscope:", 0, fontSize*1.5, width, height);
mapNum = mapColor(rotationX);
fill(mapNum, 255-mapNum, 0);
text("x: " + nfp(rotationX, 1, 3), 0, fontSize*3, width, height);
mapNum = mapColor(rotationY);
fill(mapNum, 255-mapNum, 0);
text("y: " + nfp(rotationY, 1, 3), 0, fontSize*4, width, height);
mapNum = mapColor(rotationZ);
fill(mapNum, 255-mapNum, 0);
text("z: " + nfp(rotationZ, 1, 3), 0, fontSize*5, width, height);
}
float mapColor(float in){
return map(in, -9.83, 9.83, 0, 255);
}
void drawGraph(ArrayList<Integer> values, float margin){
float lineWidth = (float) width / (values.size() - 1);
for (int i=0; i < values.size() - 1; i++) {
line(i * lineWidth, margin + values.get(i), (i + 1) * lineWidth, margin + values.get(i + 1));
}
}
void onAccelerometerEvent(float x, float y, float z)
{
valuesAccelX.add(int(x * 10));
while(valuesAccelX.size() > 10)
valuesAccelX.remove(0);
valuesAccelY.add(int(y * 10));
while(valuesAccelY.size() > 10)
valuesAccelY.remove(0);
valuesAccelZ.add(int(z * 10));
while(valuesAccelZ.size() > 10)
valuesAccelZ.remove(0);
accelerometerX = x;
accelerometerY = y;
accelerometerZ = z;
} }
void onGyroscopeEvent(float x, float y, float z) void onGyroscopeEvent(float x, float y, float z)
{ {
valuesRotX.add(int(x * 10)); rotationX = radians(x);
while(valuesRotX.size() > 10) if(round(rotationX) == 0) pitch = 0;
valuesRotX.remove(0); rotationY = radians(y);
valuesRotY.add(int(y * 10)); if(round(rotationY) == 0) roll = 0;
while(valuesRotY.size() > 10) rotationZ = radians(z);
valuesRotY.remove(0); if(round(rotationZ) == 0) yaw = 0;
valuesRotZ.add(int(z * 10)); }
while(valuesRotZ.size() > 10)
valuesRotZ.remove(0); void mousePressed()
{
rotationX = x; pitch = roll = yaw = 0;
rotationY = y; setup();
rotationZ = z;
} }

38694
data/buddha.obj Normal file

File diff suppressed because it is too large Load diff