Interact2D behaviour

Started by Tornado7, May 19, 2004, 02:54:11 PM

Previous topic - Next topic

Tornado7

Hi, I'm here again to waste your time... but I've another question. I've implemented the selection objects function, as I've wrote in some previous thread, and I've place, as you said,  the following code:


SimpleVector ray=Interact2D.reproject2D3D(camera, buffer, mouseX, mouseY);
                    int[] res=Interact2D.pickPolygon(theWorld.getVisibilityList(), ray);

                    if (res!=null) {
                        Object3D pickedObjs=theWorld.getObject(Interact2D.getObjectID(res));
                    }
                   
                    feritoID = Interact2D.getObjectID(res);
                   
                    System.out.println("ID: "+feritoID);


after:


theWorld.renderScene(buffer);


When I run my applet and look in Java Console, I see that it repeats many times the string ID: 120 when I click in the applet on a non-selectable objs (I guess this code is a default code for non-selectable objs) or the string ID: with the selectable obj code. Why it repeats many times this string instead that just one time?
Second question: I need that this string appears on the java console just when I make a click on a obj; I've experimented that if I place the mouse's arrow on the applet window and I use the keyboard keys to move in my scene, when the arrow passes on a selectable obj (without pressing a mouse's button) appears the string ID: in the java console. Is it possible to prevent this behaviour making string appears just when I press a mouse button?

Bye and thanks a lot
:)

EgonOlsen

No, 120 isn't a default ID or whatever. If 120 is reported, an object with this ID has been selected, unless the method is faulty which i'm not aware of.
However, it may be related to the fact that you call the picking all the time, not just when a mouse button has been pressed. I assume that your mouse-click-method sets mouseX and mouseY? If so, let it set a flag like "clicked=true" too and do the picking only if this flag is set (and reset it afterwards). See if this fixes your problem.
The picking doesn't care if a mouse button has been pressed or not. It just fires a ray into the scene according to the coordinates you give it. If you do this every frame, so be it...
If the "120"-problem remains, please try to find out which object's ID this is and where it is located.

Tornado7

Did it, I've solved my problem: no more indesirable obj selection and one istance of the string returned when I select an obj.
The "120" is still here. It appears whenever I click on an obj that I haven't defined as selectable (I've defined 3 selectable obj one that returns id 0, another that returns id 2 and the last that returns id 4, if I select every other obj, the returned value is 120). But, this isn't a great problem for me because I've just to ignore this id using an if condition..... so, thanks another time for your help  :D

EgonOlsen

Fine, but i'll look into this 120-issue...i don't see a reason for this behaviour. If nothing has been selected, null should be returned. Not an array containing nonsense values.

Edit: Please let me know if an object with ID=120 really exists (even if you haven't created it yourself). Try to get the actual object with this ID from World by calling getObject(int id). If such object exists, please tell be the name of it (getName()). Or does getObject() returns null and prints out an error?

Tornado7

Here the results:

theWorld.getObject(120)

returns: com.threed.jpct.Object3D@787c16
theWorld.getObject(120).getName()

returns: object122
I've loaded four separate 3ds objs: the first, the second and the third are the selecable objs the fourth is the rest of my world (it can be compared to your level in fps and it's loaded exactly as is loaded your level). Objcect122 is the rest of my world. Whose is strange is that it behaves as jPCT consider it as a selectable obj, but I have not defined it as selectable.

Bye

EgonOlsen

Selectable is default. You don't have to enable selection on desired objects but disable it on all others. What i don't understand is, that the unselectable objects doesn't block the ray to prevent the "rest of the world" from being picked. Then again, i don't know how your world looks like exactly, so i guess that this is a correct behaviour in your case. I double checked the picking code and can't find anything wrong with it.

Tornado7

Don't worry....thanks  :D