Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Responding to Events: WakeupOnAWTEvent & Human Animation with VRML & Java3d

5 views
Skip to first unread message

P. Flavin

unread,
Feb 17, 2003, 1:59:31 PM2/17/03
to
Learning 3d programming is easy by combining Java & VRML.

VRML describes a 3d scene, Java can render it.

Action Events on VRML scenes anmimated with Java3d
------------- as implemented by the Sun VRML Loaders
donated to Web3d.org use the __ WakeupOnAWTEvent __
to have web based applet VRML viewers respond
to user events with fluid, multi-jointed animation.

Sun Tutorials & Demo codes demostrate this as
does do the Sun VRML Loaders ( see below ).


Java3d Tutorial ( free ) View Chapters On-line
-----------------------------------------------
|
| Chapter 0, Preface, Appendices, and Glossary
| Chapter 1, Getting Started
| Chapter 2, Creating Content
| Chapter 3, Easier Content Creation
| Chapter 4, Interaction <----- Look here 8^)
| Chapter 5, Animation
| Chapter 6, Lights
| Chapter 7, Textures
|
Download complete tutorial
(3.0MB zip or 4.1MB tar) and examples
(325Kb zip or 336Kb tar).
|
http://java.sun.com/products/java-media/3D/collateral/examples1_6.jar.zip
|
http://java.sun.com/products/java-media/3D/collateral/

WakeupOnAWTEvent


x3d/com/sun/j3d/loaders/vrml97/impl/Evagation.java
--------------------------------------------------
( Sun VRML Loaders )

1 /*
2 * @(#)Evagation.java 1.31 99/03/01 14:33:18
3 *
4 * Copyright (c) 1996-1998 Sun Microsystems,
Inc. All Rights Reserved. ...

234 void resetWakeups() {
235 //if ( !firstTime ) {
236 SceneGraphPath viewPath =
237 new SceneGraphPath(browser.locale,viewTrans);
238 //collisionEnter = new WakeupOnCollisionEntry(viewPath);
239 //collisionExit = new WakeupOnCollisionExit(viewPath);
240 //criterion[0] = collisionEnter;
241 //criterion[1] = collisionExit;
242 criterion = new WakeupCriterion[7];
243 criterion[0] = new WakeupOnAWTEvent(MouseEvent.MOUSE_MOVED) ;
244 criterion[1] = new WakeupOnAWTEvent(MouseEvent.MOUSE_PRESSED);
245 criterion[2] = new WakeupOnAWTEvent(MouseEvent.MOUSE_DRAGGED);
246 criterion[3] = new WakeupOnAWTEvent(MouseEvent.MOUSE_CLICKED);
247 criterion[4] = new WakeupOnAWTEvent(MouseEvent.MOUSE_RELEASED);
248 criterion[5] = new WakeupOnAWTEvent(KeyEvent.KEY_RELEASED);
249 criterion[6] = new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED);
250
251 wakeupOn( new WakeupOr( criterion ));
252 //} else { firstTime = false; }
253 firstTime=false;
254 }
255
http://topaz.kaist.ac.kr/manual/x3d/com/sun/j3d/loaders/vrml97/impl/Evagation.java.html
http://216.239.57.100/search?q=cache:RlFJLxlF94IC:topaz.kaist.ac.kr/manual/x3d/com/sun/j3d/loaders/vrml97/impl/Evagation.java.html


| F.2.2.2 The Execution Environment
|
| The developer of a VRML 2.0 runtime environment must
| also include code to propagate events along the routes
| specified in a VRML file.
|
| Either user interactions or VRML sensors,
| such as timers, can generate events that change
| field values. When a field's value changes,
| the thin-layer VRML node object that contains
| the field first updates its underlying Java 3D
| object(s), and then updates the field's associated
| output fields with the new value.
|
| The VRML runtime code then propagates the new
| output field values, through routes, to other fields.
| The resulting event cascade moves through the VRML
| route structure, resulting in an updated Java 3D scene graph.
|
| The developer must somehow integrate event generation
| into the Java 3D execution environment. This can be done
| using the Java 3D behavior mechanism to generate events.
|
| For example, a WakeupOnElapsedTime or WakeupOnElapsedFrames
| wakeup criteria can trigger a VRML TimeSensor event, and a
| mouse-button WakeupOnAWTEvent wakeup criteria can trigger a
| VRML TouchSensor event. Other VRML sensors can be implemented
| in a similar manner.
|
http://www.esc.auckland.ac.nz/Docs/java/j3dguide/AppendixVRML.doc.html

tony lincoln wrote:
> Dear friends,
>
> In j3d scence I want to do a single change per button press, for
> example, to rotate the cube 10 degree per button press(not animation).
>
> I guess that I have to use class WakeupOnAWTEvent. I read something
> already in http://www.j3d.org/tutorials/raw_j3d/chapter6/mouse.html.
> But there is no example codes about it. I still do not know how to
> use it.
>
> Do you have any example codes about using WakeupOnAWTEvent? Thanks
> in advance.
>
> regards.
> Tony lincoln
|
http://groups.google.com/groups?dq=&hl=en&lr=&ie=UTF-8&group=comp.lang.java.3d&selm=3dc4659.0302161059.6ccee416%40posting.google.com


Full Java source code
from Sun is below, but please note,
you may not even to use that method for
events on the GUI external the Canvas3d:

Web Demo: Java3d, Human Model with rotating Joints:

http://web3dbooks.com/java3d/jumpstart/Human.html
http://www.frontiernet.net/~imaging/sourcecode/Human.java

The above is a crude Human Model, this is better:

Web3d.org's VRML H-Anim Avatars Animated wiht Java3d
----------------------------------------------------
http://www.frontiernet.net/~imaging/vrml_loaders_working.html


Norman Badler on 'problems' with Human Animation
------------------------------------------------
| there is a relatively large group of researchers
| building rich human-like agents,
| but neither a coherent sense of community,
| nor an extended venue to help foster discussions
| on our research. ...
|
| Norm Badler ... [ et al. ] have been discussing
| some possible first steps toward community building ...
|
| One of the major impediments to research
| on interactive human-like characters is
| the paucity of software infrastructure and standards
| to support this rapidly developing area of research.
|
| -- Norman Badler ... [ et al. ]
|
http://www.ict.usc.edu/~vhumans/overview.html


No Norm, Java & Web3d.org's H-Anim Avatars do that.

It's been done.

No Norman, your Yumetech - U.Penn Flame War
( The "Couch - Bietler Flame War" )
has been a major impediment to progress.

Human Animation with Web3d.org's H-Anim Avatars
is easy if you ignore the lies from Justin Couch
& Norman Badler.

-- Paul, Java Developer & Web Animator
--------------------------------------
Imaging the Imagined: Modeling with Math & a Keyboard

/*
* Filename: SimpleBehaviorApp.java
*
* Implements: rotates cube 0.1 radians every key press
*
* Date: 1.1 00/09/22 16:24
*
* Copyright (c) 1996-2000 Sun Microsystems, Inc. All Rights Reserved.
*
* from:
http://java.sun.com/products/java-media/3D/collateral/examples1_6.jar.zip
* example:

* Interaction/SimpleBehaviorApp.java
*/

import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.GraphicsConfiguration;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;

import java.awt.event.*;
import java.util.Enumeration;

// SimpleBehaviorApp renders a single ColorCube
// that rotates when any key is pressed.

public class SimpleBehaviorApp extends Applet {

public class SimpleBehavior extends Behavior{

private TransformGroup targetTG;
private Transform3D rotation = new Transform3D();
private double angle = 0.0;

// create SimpleBehavior
SimpleBehavior(TransformGroup targetTG){
this.targetTG = targetTG;
}

// initialize the Behavior
// set initial wakeup condition
// called when behavior beacomes live
public void initialize(){
// set initial wakeup condition
this.wakeupOn(new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED));
}

// behave
// called by Java 3D when appropriate stimulus occures
public void processStimulus(Enumeration criteria){
// decode event

// do what is necessary
angle += 0.1;
rotation.rotY(angle);
targetTG.setTransform(rotation);
this.wakeupOn(new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED));
}

} // end of class SimpleBehavior

public BranchGroup createSceneGraph() {
// Create the root of the branch graph
BranchGroup objRoot = new BranchGroup();

TransformGroup objRotate = new TransformGroup();
objRotate.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

objRoot.addChild(objRotate);
objRotate.addChild(new ColorCube(0.4));

SimpleBehavior myRotationBehavior = new SimpleBehavior(objRotate);
myRotationBehavior.setSchedulingBounds(new BoundingSphere());
objRoot.addChild(myRotationBehavior);

// Let Java 3D perform optimizations on this scene graph.
objRoot.compile();

return objRoot;
} // end of CreateSceneGraph method of SimpleBehaviorApp

// Create a simple scene and attach it to the virtual universe

public SimpleBehaviorApp() {
setLayout(new BorderLayout());
GraphicsConfiguration config =
SimpleUniverse.getPreferredConfiguration();

Canvas3D canvas3D = new Canvas3D(config);
add("Center", canvas3D);

BranchGroup scene = createSceneGraph();

// SimpleUniverse is a Convenience Utility class
SimpleUniverse simpleU = new SimpleUniverse(canvas3D);

// This will move the ViewPlatform back a bit so the
// objects in the scene can be viewed.
simpleU.getViewingPlatform().setNominalViewingTransform();

simpleU.addBranchGraph(scene);
} // end of SimpleBehaviorApp (constructor)
// The following allows this to be run as an application
// as well as an applet

public static void main(String[] args) {
System.out.print("SimpleBehaviorApp.java \n- a demonstration of
creating a simple");
System.out.println("behavior class to provide interaction in a
Java 3D scene.");
System.out.println("When the app loads, press any key to make
the cube rotate.");
System.out.println("This is a simple example progam from The
Java 3D API Tutorial.");
System.out.println("The Java 3D Tutorial is available on the
web at:");

System.out.println("http://java.sun.com/products/java-media/3D/collateral");
Frame frame = new MainFrame(new SimpleBehaviorApp(), 256, 256);
} // end of main (method of SimpleBehaviorApp)

} // end of class SimpleBehaviorApp

/*
* @(#)SimpleBehaviorApp.java 1.1 00/09/22 16:24
*
* Copyright (c) 1996-2000 Sun Microsystems, Inc. All Rights Reserved.
*
* Sun grants you ("Licensee") a non-exclusive, royalty free, license
to use,
* modify and redistribute this software in source and binary code form,
* provided that i) this copyright notice and license appear on all
copies of
* the software; and ii) Licensee does not utilize the software in a manner
* which is disparaging to Sun.
*
* This software is provided "AS IS," without a warranty of any kind. ALL
* EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
INCLUDING ANY
* IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
* NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL
NOT BE
* LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING,
MODIFYING
* OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
SUN OR ITS
* LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
* INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES,
HOWEVER
* CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE
USE OF
* OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*
* This software is not designed or intended for use in on-line control of
* aircraft, air traffic, aircraft navigation or aircraft
communications; or in
* the design, construction, operation or maintenance of any nuclear
* facility. Licensee represents and warrants that it will not use or
* redistribute the Software for such purposes.
*/


Sun's VRML Loaders Animate VRML in a browser with Java3d
--------------------------------------------------------

> Justin Couch:> Hey, what sort of crack are you on ?
> Justin Couch:>
> Justin Couch:> That codebase [ the Sun's VRML Loaders ]
> Justin Couch:> didn't even support protos let alone H-anim.
> Justin Couch:>
> Justin Couch:> Scripting support was barely functional and the
> Justin Couch:> event model was nowhere near spec compliant.
> Justin Couch:>
> Justin Couch:> You're bullshitting again.
>
>
Rick Goldberg:> This [ Justin Couch's statement ] is false.
Rick Goldberg:>
Rick Goldberg:> The code __ did __ support protos
Rick Goldberg:> __ before __ you touched it.
Rick Goldberg:>
Rick Goldberg:> Scripting support was by
Rick Goldberg:> the letter of the law,
Rick Goldberg:> and highly functional.
Rick Goldberg:>
Rick Goldberg:> Sounds like you are smoking
Rick Goldberg:> some shrubbery of your own.
|
http://www.web3d.org/TaskGroups/source/hypermail/2001/0591.html
http://www.web3d.org/TaskGroups/source/hypermail/2001/0587.html

Hoppy Thing

unread,
Feb 18, 2003, 8:26:21 PM2/18/03
to
"P. Flavin" <anim...@rochester.rr.com> wrote in message news:<3E5130CD...@rochester.rr.com>...


> No Norm, Java & Web3d.org's H-Anim Avatars do that.
>
> It's been done.
>
> No Norman, your Yumetech - U.Penn Flame War
> ( The "Couch - Bietler Flame War" )
> has been a major impediment to progress.
>
> Human Animation with Web3d.org's H-Anim Avatars
> is easy if you ignore the lies from Justin Couch
> & Norman Badler.

The "flame war" with Norm Badler has been over for a long time (2001).

http://www.web3d.org/WorkingGroups/h-anim/hypermail/2001/0153.html
http://www.web3d.org/WorkingGroups/h-anim/hypermail/2001/0296.html
http://swjscmail1.java.sun.com/cgi-bin/wa?A2=ind0112&L=java3d-interest&P=R131376

0 new messages