Home | Download | Screen shots | Discussion | Documentation |
---|
Abstract class for display of VRML models using OpenGL/Mesa. More...
#include <openvrml/gl/viewer.h>
Classes | |
struct | event_info |
Input event. More... | |
struct | light_info |
Light information. More... | |
class | modelview_matrix_stack |
Encapsulates an extended modelview matrix stack. More... |
Public Types | |
enum | { max_lights = 8 } |
enum | light_type { light_unused, light_directional, light_positional } |
Light type. More... | |
enum | event_type { event_key_down, event_mouse_move, event_mouse_click, event_mouse_drag, event_mouse_release } |
Event type. More... | |
![]() | |
enum | rendering_mode { draw_mode, pick_mode } |
The rendering mode. More... |
Public Member Functions | |
viewer () | |
Construct a viewer for the specified browser. | |
virtual | ~viewer () throw () |
Destroy. | |
void | update (double time=0.0) |
Update the scene. | |
virtual void | redraw () |
Redraw the scene. | |
void | resize (size_t width, size_t height) |
Resize the viewport. | |
void | input (event_info *e) |
Handle an event generated from user input. | |
![]() | |
rendering_mode | mode () |
Get the rendering mode. | |
double | frame_rate () |
Get the frame rate. | |
void | reset_user_navigation () |
Return view to the last bound Viewpoint. | |
void | begin_object (const char *id, bool retain=false) |
Begin a display list. | |
void | end_object () |
End a display list. | |
void | insert_background (const background_node &n) |
Insert a background into a display list. | |
void | insert_box (const geometry_node &n, const vec3f &size) |
Insert a box into a display list. | |
void | insert_cone (const geometry_node &n, float height, float radius, bool bottom, bool side) |
Insert a cone into a display list. | |
void | insert_cylinder (const geometry_node &n, float height, float radius, bool bottom, bool side, bool top) |
Insert a cylinder into a display list. | |
void | insert_elevation_grid (const geometry_node &n, unsigned int mask, const std::vector< float > &height, int32 x_dimension, int32 z_dimension, float x_spacing, float z_spacing, const std::vector< color > &color, const std::vector< vec3f > &normal, const std::vector< vec2f > &tex_coord) |
Insert an elevation grid into a display list. | |
void | insert_extrusion (const geometry_node &n, unsigned int mask, const std::vector< vec3f > &spine, const std::vector< vec2f > &cross_section, const std::vector< rotation > &orientation, const std::vector< vec2f > &scale) |
Insert an extrusion into a display list. | |
void | insert_line_set (const geometry_node &n, const std::vector< vec3f > &coord, const std::vector< int32 > &coord_index, bool color_per_vertex, const std::vector< color > &color, const std::vector< int32 > &color_index) |
Insert a line set into a display list. | |
void | insert_point_set (const geometry_node &n, const std::vector< vec3f > &coord, const std::vector< color > &color) |
Insert a point set into a display list. | |
void | insert_shell (const geometry_node &n, unsigned int mask, const std::vector< vec3f > &coord, const std::vector< int32 > &coord_index, const std::vector< color > &color, const std::vector< int32 > &color_index, const std::vector< vec3f > &normal, const std::vector< int32 > &normal_index, const std::vector< vec2f > &tex_coord, const std::vector< int32 > &tex_coord_index) |
Insert a shell into a display list. | |
void | insert_sphere (const geometry_node &n, float radius) |
Insert a sphere into a display list. | |
void | insert_dir_light (float ambient_intensity, float intensity, const color &color, const vec3f &direction) |
Insert a directional light into a display list. | |
void | insert_point_light (float ambient_intensity, const vec3f &attenuation, const color &color, float intensity, const vec3f &location, float radius) |
Insert a point light into a display list. | |
void | insert_spot_light (float ambient_intensity, const vec3f &attenuation, float beam_width, const color &color, float cut_off_angle, const vec3f &direction, float intensity, const vec3f &location, float radius) |
Insert a point light into a display list. | |
void | remove_object (const node &n) |
Remove an object from the display list. | |
void | enable_lighting (bool val) |
Enable/disable lighting. | |
void | set_fog (const color &color, float visibility_range, const char *type) |
Set the fog. | |
void | set_color (const color &rgb, float a=1.0) |
Set the color. | |
void | set_material (float ambient_intensity, const color &diffuse_color, const color &emissive_color, float shininess, const color &specular_color, float transparency) |
Set the material. | |
void | set_material_mode (size_t tex_components, bool geometry_color) |
Set the material mode. | |
void | set_sensitive (node *object) |
Indicate that a node should be sensitive to the pointing device. | |
void | insert_texture (const texture_node &n, bool retainHint=false) |
Create a texture object. | |
void | remove_texture_object (const texture_node &n) |
Remove a texture from the display list. | |
void | set_texture_transform (const vec2f ¢er, float rotation, const vec2f &scale, const vec2f &translation) |
Set the texture transform. | |
void | set_frustum (float field_of_view, float avatar_size, float visibility_limit) |
Set the frustum. | |
void | set_viewpoint (const vec3f &position, const rotation &orientation, float avatar_size, float visibility_limit) |
Set the viewpoint. | |
void | transform (const mat4f &mat) |
Transform the modelview. | |
void | transform_points (size_t nPoints, vec3f *point) const |
Transform points by the current modelview matrix. | |
const openvrml::frustum & | frustum () const |
The frustum. | |
void | frustum (const openvrml::frustum &f) |
Set the frustum. | |
bounding_volume::intersection | intersect_view_volume (const bounding_volume &bvolume) const |
Intersect the given bounding volume with the view volume. | |
void | draw_bounding_sphere (const bounding_sphere &bs, bounding_volume::intersection intersection) |
Draw a bounding sphere. |
Protected Types | |
enum | cursor_style { cursor_inherit, cursor_info, cursor_cycle, cursor_up_down, cursor_crosshair } |
Cursor style. More... | |
enum | { maxsensitive = 1000 } |
Protected Member Functions | |
void | initialize () |
Initialize. | |
void | shutdown () |
Shut down. | |
void | begin_geometry () |
Reset per-geometry attributes. | |
void | end_geometry () |
Reset attributes changed during geometry insertion. | |
void | step (float, float, float) |
Translate the user view. | |
void | zoom (float) |
Zoom. | |
void | rotate (const openvrml::rotation &rot) throw () |
Rotate the user view. | |
void | handleKey (int) |
Handle keypresses. | |
void | handleButton (event_info *e) |
Handle mouse button up/down. | |
void | handleMouseDrag (int, int) |
Handle mouse dragging. | |
bool | checkSensitive (int x, int y, event_type event) |
void | post_redraw () |
Called to indicate to the windowing system that a redraw is necessary. | |
void | set_cursor (cursor_style c) |
Called to set the cursor style. | |
void | swap_buffers () |
Called to indicate to the windowing system that the front and back buffers should be swapped. | |
void | set_timer (double interval) |
Set a delay. | |
![]() | |
virtual bounding_volume::intersection | do_intersect_view_volume (const bounding_volume &bvolume) const |
Intersect the given bounding volume with the view volume. | |
virtual const openvrml::frustum & | do_frustum () const |
virtual void | do_frustum (const openvrml::frustum &f) |
Set the frustum. |
Protected Attributes | |
modelview_matrix_stack | modelview_matrix_stack_ |
Modelview matrix stack. | |
bool | gl_initialized |
Indicate whether OpenGL has been initialized for rendering. | |
bool | blend |
Indicate whether alpha blending is enabled. | |
bool | lit |
Indicate whether lighting is enabled. | |
bool | texture |
Indicate whether texture mapping is enabled. | |
bool | wireframe |
Indicate whether wireframe mode is enabled. | |
size_t | win_width |
Window width. | |
size_t | win_height |
Window height. | |
color | background |
Background color. | |
size_t | objects |
Number of objects. | |
size_t | nested_objects |
Number of nested objects. | |
GLUtesselator * | tesselator |
GLU tesselation object. | |
size_t | sensitive |
Count of sensitive nodes. | |
size_t | active_sensitive |
Count of active sensitive nodes. | |
size_t | over_sensitive |
Count of sensitive nodes the mouse is over. | |
node * | sensitive_object [maxsensitive] |
Sensitive nodes. | |
bool | select_mode |
Indicate whether the renderer is in select mode. | |
double | select_z |
Window z-coordinate of last selection. | |
light_info | light_info_ [max_lights] |
light_info for the lights in the scene. | |
int | beginx |
Mouse drag start x-coordinate. | |
int | beginy |
Mouse drag start y-coordinate. | |
bool | rotating |
Whether the viewer is in the process of rotating. | |
bool | scaling |
Whether the viewer is in the process of scaling. | |
bool | translating |
Whether the viewer is in the process of translating. | |
bool | draw_bounding_spheres |
Whether to draw bounding spheres. | |
double | render_time |
Updated at the end of redraw with the time redraw took to execute. | |
double | render_time1 |
Rendering time for the previous cycle. | |
![]() | |
openvrml::frustum | frustum_ |
The frustum. |
Private Member Functions | |
virtual rendering_mode | do_mode () |
Rendering mode. | |
virtual double | do_frame_rate () |
Frame rate. | |
virtual void | do_reset_user_navigation () |
Reset the user view to the position and orientation of the currently bound Viewpoint node. | |
virtual void | do_begin_object (const char *id, bool retain) |
Begin a display list. | |
virtual void | do_end_object () |
End of group scope. | |
virtual void | do_insert_background (const background_node &n) |
Insert a background into a display list. | |
virtual void | do_insert_box (const geometry_node &n, const vec3f &size) |
Insert a box into a display list. | |
virtual void | do_insert_cone (const geometry_node &n, float height, float radius, bool bottom, bool side) |
Insert a cone into a display list. | |
virtual void | do_insert_cylinder (const geometry_node &n, float height, float radius, bool bottom, bool side, bool top) |
Insert a cylinder into a display list. | |
virtual void | do_insert_elevation_grid (const geometry_node &n, unsigned int mask, const std::vector< float > &height, int32 xDimension, int32 zDimension, float xSpacing, float zSpacing, const std::vector< color > &color, const std::vector< vec3f > &normal, const std::vector< vec2f > &texCoord) |
Insert an elevation grid into a display list. | |
virtual void | do_insert_extrusion (const geometry_node &n, unsigned int mask, const std::vector< vec3f > &spine, const std::vector< vec2f > &crossSection, const std::vector< openvrml::rotation > &orientation, const std::vector< vec2f > &scale) |
Insert an extrusion into a display list. | |
virtual void | do_insert_line_set (const geometry_node &n, const std::vector< vec3f > &coord, const std::vector< int32 > &coordIndex, bool colorPerVertex, const std::vector< color > &color, const std::vector< int32 > &colorIndex) |
Insert a line set into a display list. | |
virtual void | do_insert_point_set (const geometry_node &n, const std::vector< vec3f > &coord, const std::vector< color > &color) |
Insert a point set into a display list. | |
virtual void | do_insert_shell (const geometry_node &n, unsigned int mask, const std::vector< vec3f > &coord, const std::vector< int32 > &coordIndex, const std::vector< color > &color, const std::vector< int32 > &colorIndex, const std::vector< vec3f > &normal, const std::vector< int32 > &normalIndex, const std::vector< vec2f > &texCoord, const std::vector< int32 > &texCoordIndex) |
Insert a shell into a display list. | |
virtual void | do_insert_sphere (const geometry_node &n, float radius) |
Insert a sphere into a display list. | |
virtual void | do_insert_dir_light (float ambientIntensity, float intensity, const color &color, const vec3f &direction) |
Insert a directional light into a display list. | |
virtual void | do_insert_point_light (float ambientIntensity, const vec3f &attenuation, const color &color, float intensity, const vec3f &location, float radius) |
Insert a point light into a display list. | |
virtual void | do_insert_spot_light (float ambientIntensity, const vec3f &attenuation, float beamWidth, const color &color, float cutOffAngle, const vec3f &direction, float intensity, const vec3f &location, float radius) |
Insert a point light into a display list. | |
virtual void | do_remove_object (const node &ref) |
Remove an object from the display list. | |
virtual void | do_enable_lighting (bool) |
Enable/disable lighting. | |
virtual void | do_set_color (const color &rgb, float a=1.0) |
Set the color. | |
virtual void | do_set_fog (const color &color, float visibilityRange, const char *type) |
Set the fog. | |
virtual void | do_set_material (float ambientIntensity, const color &diffuseColor, const color &emissiveColor, float shininess, const color &specularColor, float transparency) |
Set the material. | |
virtual void | do_set_material_mode (size_t tex_components, bool geometry_color) |
Set the material mode. | |
virtual void | do_set_sensitive (node *object) |
Indicate that a node should be sensitive to the pointing device. | |
virtual void | do_insert_texture (const texture_node &n, bool retainHint=false) |
Create a texture object. | |
virtual void | do_remove_texture_object (const texture_node &n) |
Remove a texture from the display list. | |
virtual void | do_set_texture_transform (const vec2f ¢er, float rotation, const vec2f &scale, const vec2f &translation) |
Set the texture transform. | |
virtual void | do_set_viewpoint (const vec3f &position, const openvrml::rotation &orientation, float avatarSize, float visibilityLimit) |
Set the viewpoint. | |
virtual void | do_transform (const mat4f &mat) |
Multiply the current modelview matrix by mat . | |
virtual void | do_transform_points (size_t nPoints, vec3f *point) const |
Transform points by the current modelview matrix. | |
virtual void | do_draw_bounding_sphere (const bounding_sphere &bs, bounding_volume::intersection intersection) |
Draw a bounding sphere. | |
virtual void | do_post_redraw ()=0 |
Called to indicate to the windowing system that a redraw is necessary. | |
virtual void | do_set_cursor (cursor_style c)=0 |
Called to set the cursor style. | |
virtual void | do_swap_buffers ()=0 |
Called to indicate to the windowing system that the front and back buffers should be swapped. | |
virtual void | do_set_timer (double interval)=0 |
Set a delay. |
Abstract class for display of VRML models using OpenGL/Mesa.
A window-system specific subclass needs to redefine the pure virtual methods.
|
protected |
|
protected |
maxsensitive |
Maximum number of sensitive nodes. |
openvrml::gl::viewer::viewer | ( | ) |
Construct a viewer for the specified browser.
Reimplemented from openvrml::viewer.
|
virtual |
Destroy.
Implements openvrml::viewer.
|
protected |
Initialize.
|
protected |
Shut down.
|
protected |
Reset per-geometry attributes.
Called after the appearance/material has been set.
|
protected |
Reset attributes changed during geometry insertion.
|
protected |
Translate the user view.
[in] | x | translation vector x component. |
[in] | y | translation vector y component. |
[in] | z | translation vector z component. |
|
protected |
Zoom.
[in] | z | amount to zoom. |
|
protected |
Rotate the user view.
[in] | rot | rotation. |
|
protected |
Handle keypresses.
[in] | key | key identifier. |
|
protected |
Handle mouse button up/down.
[in] | e | event data. |
|
protected |
Handle mouse dragging.
[in] | x | pointer x-coordinate. |
[in] | y | pointer y-coordinate. |
|
protected |
Check for pickable objects.
|
protected |
Called to indicate to the windowing system that a redraw is necessary.
|
protected |
Called to set the cursor style.
[in] | c | cursor style identifier. |
|
protected |
Called to indicate to the windowing system that the front and back buffers should be swapped.
|
protected |
Set a delay.
[in] | interval | milliseconds to delay. |
void openvrml::gl::viewer::update | ( | double | time = 0.0 | ) |
Update the scene.
update is called from a timer callback and from checkSensitive.
[in] | time | current time. |
|
virtual |
Redraw the scene.
void openvrml::gl::viewer::resize | ( | size_t | width, |
size_t | height | ||
) |
Resize the viewport.
[in] | width | new width. |
[in] | height | new height. |
void openvrml::gl::viewer::input | ( | event_info * | e | ) |
Handle an event generated from user input.
[in] | e | event data. |
|
privatevirtual |
Rendering mode.
|
privatevirtual |
Frame rate.
|
privatevirtual |
Reset the user view to the position and orientation of the currently bound Viewpoint node.
|
privatevirtual |
Begin a display list.
begin_object
and end_object
should correspond to grouping_nodes
. Group-level scoping for directional lights, anchors, sensors are handled here. Display lists can optionally be created (but the retain flag is just a hint, not guaranteed). Retained objects can be referred to later to avoid duplicating geometry. OpenGL doesn't allow nested objects. The top-down approach of putting entire groups in display lists is faster for static scenes but uses more memory and means that if anything is changed, the whole object must be tossed.
The bottom-up model wraps each piece of geometry in a dlist but requires traversal of the entire scene graph to reference each dlist. The decision about what groups to stuff in an object is punted to the object itself, as it can decide whether it is mutable.
The OpenGL viewer never puts objects in display lists, so the retain hint is ignored.
[in] | id | not used. |
[in] | retain | not used. |
|
privatevirtual |
End of group scope.
|
privatevirtual |
Insert a background into a display list.
[in] | n | a background_node . |
|
privatevirtual |
Insert a box into a display list.
[in] | n | the geometry_node corresponding to the box. |
[in] | size | box dimensions. |
|
privatevirtual |
Insert a cone into a display list.
[in] | n | the geometry_node corresponding to the cone. |
[in] | height | height. |
[in] | radius | radius at base. |
[in] | bottom | show the bottom. |
[in] | side | show the side. |
|
privatevirtual |
Insert a cylinder into a display list.
[in] | n | the geometry_node corresponding to the cylinder. |
[in] | height | height. |
[in] | radius | radius. |
[in] | bottom | show the bottom. |
[in] | side | show the side. |
[in] | top | show the top. |
|
privatevirtual |
Insert an elevation grid into a display list.
[in] | node | the geometry_node corresponding to the elevation grid. |
[in] | mask | |
[in] | height | height field. |
[in] | xDimension | vertices in the x direction. |
[in] | zDimension | vertices in the z direction. |
[in] | xSpacing | distance between vertices in the x direction. |
[in] | zSpacing | distance between vertices in the z direction. |
[in] | color | colors. |
[in] | normal | normals. |
[in] | texCoord | texture coordinates. |
|
privatevirtual |
Insert an extrusion into a display list.
[in] | n | the geometry_node corresponding to the extrusion. |
[in] | mask | |
[in] | spine | spine points. |
[in] | crossSection | cross-sections. |
[in] | orientation | cross-section orientations. |
[in] | scale | cross-section scales. |
|
privatevirtual |
Insert a line set into a display list.
[in] | n | the geometry_node corresponding to the line set. |
[in] | coord | coordinates. |
[in] | coordIndex | coordinate indices. |
[in] | colorPerVertex | whether colors are applied per-vertex or per- face. |
[in] | color | colors. |
[in] | colorIndex | color indices. |
|
privatevirtual |
Insert a point set into a display list.
[in] | n | the geometry_node corresponding to the point set. |
[in] | coord | points. |
[in] | color | colors. |
|
privatevirtual |
Insert a shell into a display list.
[in] | n | the geometry_node corresponding to the shell. |
[in] | mask | |
[in] | coord | coordinates. |
[in] | coord_index | coordinate indices. |
[in] | color | colors. |
[in] | color_index | color indices. |
[in] | normal | normals. |
[in] | normal_index | normal indices. |
[in] | tex_coord | texture coordinates. |
[in] | tex_coord_index | texture coordinate indices. |
|
privatevirtual |
Insert a sphere into a display list.
[in] | n | the geometry_node corresponding to the sphere. |
[in] | radius | sphere radius. |
|
privatevirtual |
Insert a directional light into a display list.
[in] | ambientIntensity | ambient intensity. |
[in] | intensity | intensity. |
[in] | color | color. |
[in] | direction | direction. |
|
privatevirtual |
Insert a point light into a display list.
[in] | ambientIntensity | ambient intensity. |
[in] | attenuation | attenuation. |
[in] | color | color. |
[in] | intensity | intensity. |
[in] | location | location. |
[in] | radius | radius. |
|
privatevirtual |
Insert a point light into a display list.
[in] | ambientIntensity | ambient intensity. |
[in] | attenuation | attenuation. |
[in] | beamWidth | beam width. |
[in] | color | color. |
[in] | cutOffAngle | cut-off angle. |
[in] | direction | direction. |
[in] | intensity | intensity. |
[in] | location | location. |
[in] | radius | radius. |
|
privatevirtual |
Remove an object from the display list.
[in] | ref | object handle. |
|
privatevirtual |
Enable/disable lighting.
[in] | val | whether lighting should be enabled. |
|
privatevirtual |
Set the color.
[in] | rgb | red, green, and blue components. |
[in] | a | alpha (transparency) component. |
|
privatevirtual |
Set the fog.
[in] | color | fog color. |
[in] | visibilityRange | the distance at which objects are fully obscured by fog. |
[in] | type | fog type. |
|
privatevirtual |
Set the material.
[in] | ambientIntensity | ambient intensity. |
[in] | diffuseColor | diffuse color. |
[in] | emissiveColor | emissive color. |
[in] | shininess | shininess. |
[in] | specularColor | specular color. |
[in] | transparency | transparency. |
|
privatevirtual |
Set the material mode.
[in] | tex_components | texture components. |
[in] | geometry_color | geometry color. |
|
privatevirtual |
Indicate that a node should be sensitive to the pointing device.
[in] | object | a node. |
|
privatevirtual |
Create a texture object.
[in] | n | texture. |
[in] | retainHint | whether the texture is likely to be reused. |
|
privatevirtual |
Remove a texture from the display list.
[in] | ref | texture handle. |
|
privatevirtual |
Set the texture transform.
Texture coordinate transform Tc' = -C x S x R x C x T x Tc
[in] | center | center. |
[in] | rotation | rotation. |
[in] | scale | scale. |
[in] | translation | translation. |
|
privatevirtual |
Set the viewpoint.
[in] | position | position. |
[in] | orientation | orientation. |
[in] | avatarSize | avatar size. |
[in] | visibilityLimit | visiblity limit. |
|
privatevirtual |
Multiply the current modelview matrix by mat
.
[in] | mat | a matrix. |
|
privatevirtual |
Transform points
by the current modelview matrix.
[in] | nPoints | number of points. |
[in] | point | pointer to the first point in an array. |
|
privatevirtual |
Draw a bounding sphere.
Used for debugging view culling. Probably should be draw_bounding_volume and handle axis_aligned_bounding_boxes as well.
[in] | bs | a bounding sphere; if max, will not be drawn |
[in] | intersection | one of the bvolume intersection test constants, or 4 to draw in unique way. (useful for debugging) |
|
privatepure virtual |
Called to indicate to the windowing system that a redraw is necessary.
|
privatepure virtual |
Called to set the cursor style.
[in] | c | cursor style identifier. |
|
privatepure virtual |
Called to indicate to the windowing system that the front and back buffers should be swapped.
|
privatepure virtual |
Set a delay.
[in] | interval | milliseconds to delay. |
|
protected |
Modelview matrix stack.
|
protected |
Indicate whether OpenGL has been initialized for rendering.
|
protected |
Indicate whether alpha blending is enabled.
|
protected |
Indicate whether lighting is enabled.
|
protected |
Indicate whether texture mapping is enabled.
|
protected |
Indicate whether wireframe mode is enabled.
|
protected |
Window width.
|
protected |
Window height.
|
protected |
Background color.
|
protected |
Number of objects.
|
protected |
Number of nested objects.
|
protected |
GLU tesselation object.
|
protected |
Count of sensitive nodes.
|
protected |
Count of active sensitive nodes.
|
protected |
Count of sensitive nodes the mouse is over.
|
protected |
Sensitive nodes.
|
protected |
Indicate whether the renderer is in select mode.
|
protected |
Window z-coordinate of last selection.
|
protected |
light_info for the lights in the scene.
|
protected |
Mouse drag start x-coordinate.
|
protected |
Mouse drag start y-coordinate.
|
protected |
Whether the viewer is in the process of rotating.
|
protected |
Whether the viewer is in the process of scaling.
|
protected |
Whether the viewer is in the process of translating.
|
protected |
Whether to draw bounding spheres.
|
protected |
Updated at the end of redraw with the time redraw took to execute.
|
protected |
Rendering time for the previous cycle.