Guten Abend...
Mein ziel ist es derzeit, eine Kamera nach dem klicken der rechten Maustaste um einen charakter herumdrehen zu können, und nur, wenn man den charakter bewegt,soll dieser mitgedreht werden...
Und falls er sich nicht bewegt, wird der dreh-wert gespeichert und danach auf den charakter angewendet...
So, allerdings habe ich noch kleinere Probleme.... undzwar zuckt die darstellung teilweise, aber das ließe sich hoffentlich noch beheben, und das größere problem, dass du bewegungsrichtung irgentwie scheinbar wahllos ist, obwohl ich mir immer die achsen der Rotationsmatrix hole...
Desweiteren verschiebt sich der charakter von der mitte des Bildschirms aus.... was nicht unbedingt der erwünschte effekt ist^^
Hier einmal der code:
der character ist ein object3D und die camera halt das Camera-objekt... sollte wohl alles durch die namensgebung ersichtlich sein, hoffe ich...
character.setTranslationMatrix(new Matrix());
SimpleVector pos = new SimpleVector(0,0,0);
pos.add(new SimpleVector(0, ellipsoid.y, 0));
SimpleVector dir = world.checkCollisionEllipsoid(pos, grav, ellipsoid, 1);
pos.add(new SimpleVector(0, -ellipsoid.y, 0));
dir.x = 0;
dir.z = 0;
pos.add(dir);
pos.add(new SimpleVector(0, ellipsoid.y, 0));
if(publickeys.up){
SimpleVector temp = character.getRotationMatrix().getZAxis();
temp.scalarMul(-moveSpeed);
temp = world.checkCollisionEllipsoid(pos, temp, ellipsoid, 8);
pos.add(temp);
temp.add(dir);
}
if(publickeys.down){
SimpleVector temp = character.getRotationMatrix().getZAxis();
temp.scalarMul(moveSpeed);
temp = world.checkCollisionEllipsoid(pos, temp, ellipsoid, 8);
pos.add(temp);
temp.add(dir);
}
if(publickeys.right){
SimpleVector temp = character.getRotationMatrix().getXAxis();
temp.scalarMul(-moveSpeed);
temp = world.checkCollisionEllipsoid(pos, temp, ellipsoid, 8);
pos.add(temp);
temp.add(dir);
}
if(publickeys.left){
SimpleVector temp = character.getRotationMatrix().getXAxis();
temp.scalarMul(moveSpeed);
temp = world.checkCollisionEllipsoid(pos, temp, ellipsoid, 8);
pos.add(temp);
temp.add(dir);
}
if(publickeys.lookUp){
//camera.moveCamera(Camera.CAMERA_MOVEUP, 10);
}
if(publickeys.lookDown){
//camera.moveCamera(Camera.CAMERA_MOVEDOWN, 10);
}
pos.add(new SimpleVector(0, -ellipsoid.y, 0));
synchronized(character){
character.getTranslation().set(0,0,0);
character.translate(pos);
character.translateMesh();
pos.add(character.getBackPosition());
character.setBackPosition(pos);
character.setCenter(pos);
synchronized(camera){
camera.moveCamera(Camera.CAMERA_MOVEIN, 300);
//camera.setPositionToCenter(character);
if(publickeys.rotatex){
float rotynew = 0;
float mousexnew = mousemapper.getMouseX();
float difference = -(mousexnew - mousex);
if(difference>0)
rotated=true;
rotynew = difference/210;
if(rotynew!=0)
mousex = mousexnew;
float mouseynew = mousemapper.getMouseY();
difference = -(mouseynew - mousey);
if(difference>0)
rotated=true;
float rotxnew = difference/210;
if(rotxnew!=0)
mousey = mouseynew;
//camera.rotateCameraY(-roty);
camera.rotateCameraX(-rotx);
camera.rotateCameraY(rotynew);
camera.rotateCameraX(rotx + rotxnew);
//camera.rotateCameraY(roty + rotynew);
rotx += rotxnew;
roty += rotynew;
rotycharnew += rotynew;
rotxcharnew += rotxnew;
}
if(publickeys.up || publickeys.down || publickeys.left || publickeys.right){
if(rotated){
character.getRotationMatrix().setIdentity();
character.rotateY(-rotychar);
character.rotateX(rotxcharnew);
character.rotateY(rotychar + rotycharnew);
rotxchar += rotxcharnew;
rotychar += rotycharnew;
rotxcharnew = 0;
rotycharnew = 0;
character.rotateMesh();
rotated=false;
}
}
camera.moveCamera(Camera.CAMERA_MOVEOUT, 300);
}
}