This is an due discussion, because J support for
OpenGL does not utilize a mouse so far.
However, the proposed approach is versatile, but
complicated and for complicated operations, whose
purpose is not explained. I can envision that with these
kinds of features one can _manipulate_ the objects
as in a 3D design space, such as CAD or 3D
modeling applications.
I believe we are not there yet. Meanwhile, mouse could
be used to facilitate _exploration_ and _movement_.
This does not require all the mentioned facilities, but
can easily create an intuitive environment.
I like the approach taken by VRML, which operates camera position
and orientation. Regular mouse behavior (without 3D capture)
is combined with modifier keys.
Mouse movement positions the cursor, dragging mouse
changes the view point:
- no modifier: move around (fly or walk)
up/down: zoom, left/right: turn changing direction
- alt: pan
- ctrl: study (rotate the space sphere along meridian and equator
ralative to the closest object in the live of view)
- shift: increase spead
This interface alone should be able to make a more
dynamic and natural alternative to the i,o/x,y,z/i,j,k
etc. keys.
It only requires one mouse button. It maps easily to
the state of the viewpoint, and changes it relatively, rather
than requiring to map window coordinates to 3D corrdinates.
It does not require a 3D cursor.
VRML goes further allowing natural selection of objects
by direct clicking and then you can further modify the
selected object or use it as a handle to modify other things.
But that's further along.
--- "Miller, Raul D" <[EMAIL PROTECTED]> wrote:
In principle, we're going to get a more flexible and powerful interface
to opengl in the next month or so. It would be nice if we got better
mouse support along with that.
One rather obvious issue is that it would be nice to get support for
more than two buttons (including the mouse wheel, or maybe even
wheels for a multi-wheeled mouse). Since this ties into J's event
handling system, I'm not sure how if it could be done from user
space.
Another issue is that mouse coordinates are in what opengl
documentation calls "window coordinates", and very little
is done in opengl using window coordinates. Much more useful
would be a way of manipulating using object coordinates or
eye coordinates or something of that nature. The problem
is that in some cases converting from window coordinates
to object space coordinates can be difficult.
Here's an idea for making that happen (based on what I've
seen done in other software):
(1) Make the mouse pointer invisible (and maybe grab its
window coordinates at the start of this -- the application
can convert these to approximate object space coordinates).
(2) Position the mouse pointer in the center of the
opengl rendering area.
(3) Every time a mouse event is generated, the mouse's
deltaX and deltaY are obtained and the mouse is
repositioned in the center of the opengl rendering area.
These deltaX and deltaY numbers (and perhaps deltaZ from
the mouse wheel) would then be used to manipulate a
"mouse object" which the application program would render
inside the opengl window.
Note that the application might have to give up control of
the mouse under some circumstances (for example, under
windows a person can use various key combinations to switch
to another task). So I guess there would have to be a
"give up the mouse" event of some sort and a "ok, you can
have it back" event.
Probably most of this can be managed from user space.
Things I don't know about:
[1] How to know when another application has gained
control of the mouse. (Even if I never see anything
happening there, maybe the mouse needs to be made
invisible again, and repositioned in the center of
the opengl isigraph control when I get control back).
[2] How to make the mouse invisible in the first place.
[3] How to set the mouse position in the center of the
isigraph control (or, perhaps, in the center of the
parent form, or the center of the screen).
Popping the mouse in and out of this mode is another
issue, but it's easy to think of solutions for them
(hit a key or a mouse button to toggle, maybe).
Call this a wishlist item. Or maybe a request for
documentation?
Thanks,
--
Raul
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm