User-facing text and docs now say SpaceMouse, covering both the
SpaceNavigator over USB and the SpaceMouse Wireless over Bluetooth:
launcher entry, demo readout (including the no-device hint) and
javadoc. The manual's SpaceMouse section lists both transports.
Also correct the global illumination wording in HouseDemo and the
manual: GI is baked in bounce generations over the first seconds and
then frees its per-texel state, rather than progressing from
per-polygon stamps to per-texel refinement.
=-De3d.headtrack=false=. See the *Head tracking* demo for a compass
scene built to show this off.
=-De3d.headtrack=false=. See the *Head tracking* demo for a compass
scene built to show this off.
-*SpaceMouse 6DOF:* when a 3Dconnexion SpaceNavigator is plugged in
-(USB), every demo automatically flies the camera with the cap —
+*SpaceMouse 6DOF:* when a 3Dconnexion SpaceMouse is connected
+(SpaceNavigator over USB or SpaceMouse Wireless over Bluetooth),
+every demo automatically flies the camera with the cap —
push/pull/slide to move (same acceleration physics as arrow keys),
tilt/twist to look. The left cap button brakes (kills camera
velocity). Rotation composes with head tracking and mouse drag.
push/pull/slide to move (same acceleration physics as arrow keys),
tilt/twist to look. The left cap button brakes (kills camera
velocity). Rotation composes with head tracking and mouse drag.
- Light indicators that explain the shadows: every hero light shows a
large glow at its position — shadows extend radially away from that
point (the source is omnidirectional)
- Light indicators that explain the shadows: every hero light shows a
large glow at its position — shadows extend radially away from that
point (the source is omnidirectional)
-- Progressive global illumination (=ViewPanel.enableGlobalIllumination=):
+- Baked global illumination (=ViewPanel.enableGlobalIllumination=):
the city's polygons render as lightmapped triangles
the city's polygons render as lightmapped triangles
- (=ObjModel= is a =LightmappedCompositeShape=), so GI proceeds from
- per-polygon stamps to per-texel shadow and bounce refinement over the
- first seconds (golden images stay lightmapping- and GI-free for
+ (=ObjModel= is a =LightmappedCompositeShape=), so GI bakes them in
+ bounce generations — direct light first, one more bounce per
+ generation after that — over the first seconds, then frees the
+ per-texel state (golden images stay lightmapping- and GI-free for
determinism)
* Graphics Benchmark
determinism)
* Graphics Benchmark
addLights(viewPanel.getLightingManager(), shapes);
addLights(viewPanel.getLightingManager(), shapes);
- // Progressive global illumination: shadows and indirect bounce
- // light fade in over the first seconds on dedicated CPU threads.
+ // Baked global illumination: shadows and indirect bounce light
+ // are traced in bounce generations over the first seconds on
+ // dedicated CPU threads, then the per-texel state is freed and
+ // only the final lightmap textures remain.
// 4 threads: 3-unit texels mean ~16x more work items than 12-unit.
viewPanel.enableGlobalIllumination(4);
// 4 threads: 3-unit texels mean ~16x more work items than 12-unit.
viewPanel.enableGlobalIllumination(4);
new ShowHeadTrackingDemo()),
new DemoEntry("SpaceMouse 6DOF",
new ShowHeadTrackingDemo()),
new DemoEntry("SpaceMouse 6DOF",
- "Fly with a 3Dconnexion SpaceNavigator — cap moves, tilts and twists",
+ "Fly with a 3Dconnexion SpaceMouse — cap moves, tilts and twists",
new ShowSpaceMouseDemo()),
};
new ShowSpaceMouseDemo()),
};
import static eu.svjatoslav.aukio.e3d.geometry.Point3D.point;
/**
import static eu.svjatoslav.aukio.e3d.geometry.Point3D.point;
/**
- * SpaceNavigator 6DOF mouse demo.
+ * SpaceMouse 6DOF mouse demo.
*
* <p>The camera stands at the center of a compass ring (same scene as
*
* <p>The camera stands at the center of a compass ring (same scene as
- * the head tracking demo, for comparable behavior). With a
- * SpaceNavigator plugged in, push/pull/slide the cap to fly and
+ * the head tracking demo, for comparable behavior). With a supported
+ * 3Dconnexion device connected (SpaceNavigator over USB or SpaceMouse
+ * Wireless over Bluetooth), push/pull/slide the cap to fly and
* tilt/twist to look. A floating readout shows the six raw axis values
* live — deflect the cap and confirm each axis moves the expected
* number and in the expected direction.</p>
*
* tilt/twist to look. A floating readout shows the six raw axis values
* live — deflect the cap and confirm each axis moves the expected
* number and in the expected direction.</p>
*
- * <p>SpaceNavigator support is automatic in every engine app: the
+ * <p>SpaceMouse support is automatic in every engine app: the
* device is hot-plug detected, no setup code needed. Left button
* brakes (kills camera velocity). Disable with
* {@code -De3d.spacemouse=false}.</p>
* device is hot-plug detected, no setup code needed. Left button
* brakes (kills camera velocity). Disable with
* {@code -De3d.spacemouse=false}.</p>
/**
* Builds the demo scene: compass ring, floor grid and the axis readout,
/**
* Builds the demo scene: compass ring, floor grid and the axis readout,
- * camera at the center of the ring. The SpaceNavigator itself is
+ * camera at the center of the ring. The SpaceMouse itself is
* hot-plug auto-started by the view panel — nothing to wire.
* Called by both {@link #main(String[])} (via {@link #buildSceneState})
* and the golden-image harness — must stay deterministic (no time, no
* hot-plug auto-started by the view panel — nothing to wire.
* Called by both {@link #main(String[])} (via {@link #buildSceneState})
* and the golden-image harness — must stay deterministic (no time, no
final int ms) {
final SpaceNavigatorHid device = panel.getSpaceMouse();
if (device == null) {
final int ms) {
final SpaceNavigatorHid device = panel.getSpaceMouse();
if (device == null) {
- readout.setText(" No SpaceNavigator detected \n"
- + " Plug it in — hot-plug is on ");
+ readout.setText(" No SpaceMouse detected \n"
+ + " Connect one — hot-plug is on ");
return true;
}
readout.setText(String.format(
return true;
}
readout.setText(String.format(