Hey,
I'd like to make (and in fact I truly need for tomorrow) a MouseMapper. Here is my situation: I used the "car" example and tuned it by myself in order to create several cars instead of one (for example) or say that a given is "selected". Now I need a set of methods to be able to click somewhere in the windows and say "the car beneath my mouse is selected".
I ran through several posts that dealt with MouseMappers and got some code but I can't make it work with my own code. Help !!
L.
For the MouseMapper, there is in the Paradroidz sources that you can have a look at (http://www.jpct.net/download/paradroidz_src.zip). The given mouse coords may then be used to pick the object in question by using the picking methods in Interact2D like so:
int[] res=Interact2D.pickPolygon(world.getVisibilityList(), Interact2D.reproject2D3D(world.getCamera(), buffer, x, y));
if (res!=null) {
obj=world.getObject(Interact2D.getObjectID(res));
}
The objects have to be made selectable to make this work, of course.
unfortunately, that's what I had been doing before ...
For the moment, I started over and :
-> copied MouseMapper in my src directory (using NetBeans)
-> removed "import naroth.config.*;"
-> tried to compile
-> got "cannot find Configuration"
-> imported Configuration.java
-> removed "package naroth.config;"
-> added a function in my CarTest.java file :
public Object3D pickingObject(int mouseX, int mouseY, Camera camera, FrameBuffer buffer, World theWorld){
SimpleVector ray=Interact2D.reproject2D3D(camera, buffer, mouseX, mouseY);
int[] res=Interact2D.pickPolygon(theWorld.getVisibilityList(), ray);
if (res!=null) {
return theWorld.getObject(Interact2D.getObjectID(res));
}
return null;
}
now it compiles, but doesn't do anything at all ... what shall I do ?
I also added a few things :
-> a method to move a selected cube:
public void moveClick(Cube pointe) {
if (cubeleft) {
pointe.turnLeft();
}
if (cuberight) {
pointe.turnRight();
}
Matrix backUpTrans=pointe.getTranslationMatrix().cloneMatrix();
if (cubeforward) {
if (speed<15) {speed+=0.1f;}
pointe.setSpeed(speed);
pointe.moveForward();
}
if (cubeback) {
if (speed>0) {speed-=0.3f;}
if (speed<0) {speed=0;
}
pointe.setSpeed(speed);
pointe.moveForward();
}
if (speed>=0 && !cubeback && !cubeforward) {
speed-=0.075f;
if (speed<0) {speed=0;}
pointe.setSpeed(speed);
pointe.moveForward();
}
boolean ok=pointe.place(terrain);
if (!ok) {
pointe.setTranslationMatrix(backUpTrans);
speed=0;
pointe.setSpeed(speed);
} else {}
}
->its call in the gameLoop function:
moveClick(MouseMapper.click);
-> something that is supposed to affect the cube beneath the mouse in a variable when clicking:
click=(Cube) pickingObject(getMouseX(), getMouseY(), CarTest.camera, CarTest.buffer, CarTest.theWorld);
does this seem correct to u ?
I get Exception in thread "main" java.lang.NullPointerException when compiling concerning
Matrix backUpTrans=pointe.getTranslationMatrix().cloneMatrix();
in the mouseClick function.
.... I feel a bit lost !
If you're still having the problem, you may consider sending me your code (or a stripped test case) so i can see for myself. From the snippets you are posting (btw: please use the [ code ]-tag to format your sources when posting), it's hard to tell where the problem is.