Log of /trunk/core/base/inc/TVirtualViewer3D.h
Parent Directory
Revision
22961 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Thu Apr 3 13:32:57 2008 UTC (6 years, 9 months ago) by
rdm
File length: 3562 byte(s)
Diff to
previous 20877
move the directories:
base clib cont meta metautils newdelete pcre rint thread unix utils
winnt zip
under the new core meta directory.
Revision
20292 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Wed Oct 10 14:08:48 2007 UTC (7 years, 3 months ago) by
brun
Original Path:
trunk/base/inc/TVirtualViewer3D.h
File length: 3562 byte(s)
Diff to
previous 19826
From Matevz & Alja
* base/inc/TVirtualViewer3D.h:
Add function virtual void ObjectPaint(TObject*, Option_t*).
/**************************************************************************/
* ged/src/TGedEditor.cxx:
When adding top-level TGFrame for the extra tabs specify layout
hints with kLHintsExpandX.
/**************************************************************************/
* gl/inc/TGLScenePad.h:
* gl/src/TGLScenePad.cxx:
Implement virtual TVirtualViewer3D::ObjectPaint().
* gl/src/TGLCamera.cxx:
* gl/inc/TGLCamera.h:
* gl/src/TGLPerspectiveCamera.cxx:
* gl/inc/TGLPerspectiveCamera.h:
* gl/src/TGLOrthoCamera.cxx:
* gl/inc/TGLOrthoCamera.h:
Introduce two transformation matrices to clearly define movement
of camera around the center point. The first transformation matrix
fCamBase defines the coordinate system placed at the camera center
point with camera up-vector as the third base vector. The second
transformation matrix fCamTrans defines the camera transformation
relative to fCamBase.
Implement a common Truck(), Rotate() and Dolly() function for
orthographic and perspective camera.
Implement an option to define camera center point
externally. Center can also be determined via picking.
* gl/src/TGLUtil.cxx:
* gl/inc/TGLUtil.h:
TGLMatrix: add new functions to get/set the base vectors
directly.
TGLUtil: add member UInt_t fgDefaultDrawQuality.
TGLRect: bugfix in Diagonal(), integer calculation overflowed.
* gl/src/TGLViewer.cxx:
* gl/inc/TGLViewer.h:
Make interface to draw camera center point.
Add option to disable/enable depth test when drawing axis guides.
* gl/src/TGLViewerEditor.cxx:
* gl/inc/TGLViewerEditor.h:
Add GUI to manipulate camera center and to disable/enable depth
test when drawing axis guides.
* gl/src/TGLClipSetEditor.cxx:
Change layout of labeled number entries.
* gl/src/TGLLightSet.cxx:
Fix positioning of front light. White-space consolidation.
* gl/src/TGLLightSetEditor.cxx:
* gl/inc/TGLLightSetEditor.h:
Put GUI for the 6 lights in two columns.
/**************************************************************************/
* tutorials/gl/glViewerExercise.C:
Follow-up on changes in TGLCamera. Enable rotation on
orthographic camera.
* tutorials/gl/glViewerLOD.C:
Workourond for cint bug with switch statements.
Revision
19000 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Mon Jun 11 19:56:34 2007 UTC (7 years, 7 months ago) by
brun
Original Path:
trunk/base/inc/TVirtualViewer3D.h
File length: 3286 byte(s)
Diff to
previous 18024
From Matevz:
Major restructuring of GL viewer-scene relationship (Matevz)
===================================================
The main idea was to generalize current GL infrustructure so that the
following features can be done in the future:
1. Full pad rendering via GL including 3D histo/func painters and 2D graphics.
2. Implementation of GL canvas (with independent viewers serving as pads).
3. Multi-view event-visualization front-end.
4. Inclusion of external scenes (non-ROOT-gl) in ROOT viewer.
Rendering of ROOT scenes in external GL frameworks.
Changes on the code level
-------------------------
0. Extend current scene/viewer classes into a 2-level class hierarchy.
New classes TGLViewerBase and TGLSceneBase.
1. Allow scenes to be shared among viewers. View-specific scene-cache
needs to be kept at the viewer side.
2. Viewer now manages a list of scenes. It is possible to put together
a combination of scenes (e.g. one showing geometry, another one tracks
and yet another clusters). Each scene can define its own clipping object.
3. Provide API for fine-grained control over rendered object removal,
creation and update. This allows for efficient scene-updates.
4. Disentangle selection, clipping and other markup objects from
within viewer-scene singleton.
New classes TGLClipSet, TGLManipSet.
6. Disentangle selection management.
7. Separate overlay rendering to allow any number of active GL-GUI
elements (like manipulators are now).
New classes TGLOverlayElement.
8. Trailing white space has been removed in all files.
Restructure low-level interface to OpenGL (Timur)
=========================================
1. Allow sharing GL resources among viewers.
2. Do not bind GL-output (windowed or offscreen) to ROOT GUI.
New classes TGLContext, TGLFormat, TGLWidget.
This oboletes TGLKernel and TVirtualGL classes.
Revision
17996 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Sun Feb 18 14:56:42 2007 UTC (7 years, 11 months ago) by
brun
Original Path:
trunk/base/inc/TVirtualViewer3D.h
File length: 3397 byte(s)
Diff to
previous 16090
For abstract interfaces, generate the CINT stub functions only for
the strict minimum of functions.
Keep only one pure function known to CINT such that CINT can
recognize that the class is abstract and has pure functions.
This optimization gains about one megabyte of generated code.
Revision
16090 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Wed Aug 23 14:39:40 2006 UTC (8 years, 5 months ago) by
brun
Original Path:
trunk/base/inc/TVirtualViewer3D.h
File length: 3374 byte(s)
Diff to
previous 14203
From Matevz Tadel:
1) Implementation of two-level (secondary) selection
Rendering objects can provide a new level of interactivity, for
example a TPointSet3D holding a set of clusters can attach a pointer
to original cluster to each point and receive notifications when a
specified cluster was clicked.
Secondary selection is activated by Control-Left clicking into the
GL window.
2) Improve control over camera-reset behaviour
Allow user to prevent camera reset on scene update and
double-click.
3) Improvements in TPointSet3D(GL)
Detailed ChangeLog
==================
* base/inc/TVirtualViewer3D.h:
Added virtual methods 'void ResetCameras(){}' and 'void
ResetCamerasAfterNextUpdate(){}'.
* gl/inc/TGLScene.h:
* gl/src/TGLScene.cxx:
Implemented two-level selection. It is enabled for next selection
pass by calling ActivateSecSelect().
DoSelect() does not change the selected object but only indicates
which object has been selected by setting new member
'TGLPhysicalShape *fSelectionResult'. Caller (TGLViewer) must call
new method 'void ApplySelection()' to actually change the selected
object to the last selection result.
Changed declaration of selection buffer from being a static varable
within DoSelect() to data-member. This allows post-processing of
selection records needed by two-level selection.
* gl/inc/TGLCamera.h:
* gl/inc/TGLOrthoCamera.h:
* gl/inc/TGLPerspectiveCamera.h:
* gl/src/TGLCamera.cxx:
* gl/src/TGLOrthoCamera.cxx:
* gl/src/TGLPerspectiveCamera.cxx:
Added Bool_t argument with default value to:
virtual void TGLCamera::Setup(const TGLBoundingBox & box, Bool_t
reset=kTRUE) = 0;
By setting it to false one can change camera parameters for new
scene bounding-box without repositioning the camera.
Added 'Bool_t checkSize' argument to OfInterest().
This is relevant for marker-classes which can have small
volume/length but are still visible as they are rendered in
pixel-coordinates. Value of this argument is needed in TGLScene
(DestroyPhysicals) and TGLViewer (AddObject). It is obtained by
calling virtual method TGLLogicalShape::IgnoreSizeForOfInterest().
This method returns false by defalut and is overriden in
TGLPolyMarker and TPointSet3DGL.
* gl/inc/TGLViewer.h:
* gl/src/TGLViewer.cxx:
Added controls for camera-reset behaviour.
Data-members: 'Bool_t fResetCamerasOnUpdate', 'Bool_t
fResetCamerasOnNextUpdate', 'Bool_t fResetCameraOnDoubleClick'.
Methods: 'ResetCameras()', 'ResetCamerasAfterNextUpdate()',
'ResetCurrentCamera()'.
Added an argument to 'void PostSceneBuildSetup(Bool_t resetCameras).
Added Bool_t return-value to RequestSelect(). It returns true if
result of the selection is different then fSelectedPhysical.
Added method ApplySelection() to interface with TGLScene
selection state. This is called from event-handling functions in
TGLViewer.
Added key-binding for 'Home': ResetCurrentCamera().
* gl/inc/TGLSAViewer.h:
* gl/src/TGLSAViewer.cxx:
Added description of new functionality to fgHelpText.
MSVC was complaining about fgHelpText being too long: I split it
into fgHelpText1 and fgHelpText2.
* gl/inc/TGLDrawFlags.h:
* gl/src/TGLDrawFlags.cxx:
Added members 'Bool_t fSelection' and 'Bool_t
fSecSelection' allowing passing of current selection state to
renderers. This is needed to allow different render-paths during
(secondary) selection.
We should consider passing TGLScene* and/or TGLViewer* down to
DirectDraw() of individual renderers.
* gl/src/TGLDrawable.cxx:
In ShouldCache() return false if secondary selection is in progress.
* gl/src/TGLPhysicalShape.cxx:
Handle new members in TGLDrawFlags.
* gl/inc/TGLLogicalShape.h:
* gl/src/TGLLogicalShape.cxx:
Added three new functions:
1) virtual Bool_t SupportsSecondarySelect() const { return kFALSE; }
This is called by TGLScene::DoSelect() to check is object that was
the result of primary selection supports secondary selection.
2) virtual void ProcessSelection(UInt_t* ptr, TGLViewer*, TGLScene*);
It is called back from TGLViewer after successful secondary
selection. As the object that does the rendering is the only one
that actually knows how the object sub-parts were named it has
to interpret the results.
Both of these should be overriden in classes that support
secondary selection, for example see TPointSet3DGL.
3) virtual Bool_t IgnoreSizeForOfInterest() const { return kFALSE; }
Signals to TGLScene and TGLViewer that volume/lenght of this
class' bounding box should not be considered when checking if
objects of this class are of interest to current camera.
* gl/inc/TGLObject.h:
* gl/src/TGLObject.cxx:
Changed second argument of function:
Bool_t SetModelCheckClass(TObject* obj, const Text_t* classname);
to 'TClass* cls'. This is much more efficient.
* g3d/inc/TPointSet3D.h:
* g3d/src/TPointSet3D.cxx:
Added support for per-point designations (one TObject* per point;
via casting it can be set to anything).
New virtual method 'void PointSelected(Int_t n)' that is called
back after successful secondary selection in TGLViewer (via
virtual TGLLogicalShape::ProcessSelection()).
* gl/inc/TPointSet3DGL.h:
* gl/src/TPointSet3DGL.cxx:
Added support for per-point selection. Point-sizes are taken into
account during selection (by modifying the projection
matrix).
Implemented 'virtual Bool_t TGLDrawable::ShouldCache()' to disable
caching when in primary selection (point-size improvements).
Cross-like marker types are now supported to some extent.
Improved structure of rendering code.
Override 'virtual Bool_t TGLLogicalShape::IgnoreSizeForOfInterest()'
to return true.
Multiply TAttMarker::GetMarkerSize() by 5 before applying.
* gl/inc/TGLPolyMarker.h:
Override 'virtual Bool_t TGLLogicalShape::IgnoreSizeForOfInterest()'
to return true.
Revision
14203 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Wed Mar 8 21:09:43 2006 UTC (8 years, 10 months ago) by
brun
Original Path:
trunk/base/inc/TVirtualViewer3D.h
File length: 3291 byte(s)
Diff to
previous 13954
From Timur Pocheptsov:
-TGLPixmap - removed and replaced by TGLViewer (most of the TGLViewer
functionality is available in pad now);
-TGLHistPainter - zooming/panning added for legoes/surfaces;
-TGLViewerEditor - TGLViewer's editor for pad (lights/clipping/guides
manipulation).
-TRootCanvas :
minor changes to support mouse wheel event in gl viewer in a pad
-TCanvas :
a)changes to process keyboard events correctly
b)changes to process mouse will events
-TVirtualViewer3D :
changes in interface for TGLManager (win32 implementation of TGLManager
requires some functions and cannot be dependant from TGLViewer)
-Added class TVirtualGLManipulator - base for TGLManip - again, required
mostly by TGWin32GL.
Revision
12495 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Wed Aug 17 09:10:44 2005 UTC (9 years, 5 months ago) by
brun
Original Path:
trunk/base/inc/TVirtualViewer3D.h
File length: 3147 byte(s)
Diff to
previous 12459
From Timur:
In view of the coming GL-in-TPad new features, I have changes in
several modules and want to add them step by step. This is the first
update, these classes are auxiliary stuff. I'm planning to add other stuff
tomorrow (and modification in pad and canvas, which will enable
gl-in-pad).
TGLManager is a base abstract class, responsible for
window creation, gl-context/glpixmap and context creation,
manipulation with gl-context and gl-pixmap.
TGWin32GLManager - concrete implementation for Win32
TGX11GLManager - concrete implementation for X11.
Revision
12459 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Wed Aug 10 16:26:36 2005 UTC (9 years, 5 months ago) by
brun
Original Path:
trunk/base/inc/TVirtualViewer3D.h
File length: 3055 byte(s)
Diff to
previous 11866
From Richard:
make TVirtualViewer TObject derv. so TPad can use without modifications.
Also removed last parts of TVirtualGL unrelated to context/draws so it
can be replaced with new TGLManager.
Added:
TGLSAViewer & TGLSAFrame - standalone viewer + GUI main frame.
TGLOutput for containing capture (pdf/eps output).
TX3DFrame (x3d mod) to avoid diamond TObject inheritance from GUI +
TVV3D interface
Removed: TViewerOpenGL
Revision
11866 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Wed May 25 14:25:17 2005 UTC (9 years, 8 months ago) by
brun
Original Path:
trunk/base/inc/TVirtualViewer3D.h
File length: 2933 byte(s)
Diff to
previous 11473
From Richard Maunder:
Major changes to GL viewer to support:
i) Logical/Physical shape pairings
ii) Level of detail (LOD) scheme (TGLSphere only using at present)
iii) Common display list cache
iv) Scene rebuilds for large geometries
v) Some basic interactivity improvements - draw timeouts, drop low LOD
shapes etc
vi) New camara interactions:
Left Mouse: Rotate
Middle Mouse: Truck (pan parallel to camera film plane)
Right Mouse: Side-side drag dolly/zoom
Double click any button to reset the camera.
The previous pan with arrow keys, and zoom on mouse wheel are still
supported.
Camera interaction is default in viewer. These extra camera modes mean
there are not enough mouse buttons for previous right context/select.
To select / invoke context menu use Shift+Left Button and Shift+Right
Button respectively.
Revision
11272 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Wed Mar 9 18:19:27 2005 UTC (9 years, 10 months ago) by
brun
Original Path:
trunk/base/inc/TVirtualViewer3D.h
File length: 2744 byte(s)
Diff to
previous 9718
From Richard Maunder:
Changes to viewer infrastructure (TBuffer3D,TVirtualViewer3D) to
support:
i) Proper shape specific (sphere, tube, etc) descriptions in TBuffer3D
derived classes - c.f. abuse of raw tesselation blocks before.
ii) On demand filling of buffer sections as required by viewer.
iii) Support for local/master frame shapes descriptions & child object
rejection.
iv) Template/placed shapes ids - enabling viewer to detect/receive
common shapes once and just obtain the new position and id of the
duplicate.
Cleans up all producer (g3d/geom) code so no longer has an viewer
specific knowledge - Paint() methods replaced with
GetBuffer3D/FillBuffer3D methods which complete requested sections of
the buffer.
All viewer specific code now sits on the viewer implementation side of
TVirtualViewer3D. Added a TViewer3DPad class for performing the 3D draws
into pad. In future this should be merged with TView/TView3D possibly.
TBuffer3D is now stripped of functional code (aside from memory
management) and various viewer passback options there previously.
Enforced one way passing a const & to viewer.
Buffers (various types) are held as single static inside producer
function e.g. TGeoShape::GetBuffer3D (c.f. single generic buffer type
fetched from pad previously).
For g3d and geom shapes the top level geometry painter (TNode /
TGeoPainter) controlls painting process, requesting shapes to fill
buffer and passing to 3D viewer.
Exceptions are g3d's TPolyLine3D, TPolyMarker3D & TMarker3DBox. These
are 'standalone' shapes - no controlling 'painter' object. They still
implement Paint(), fill buffer and add to viewer directly.
3D viewer still held / created by pad - and pad has it's own viewer
object (TViewer3DPad).
NOTE:
1. Current scheme supports one 3D viewer only - pad, x3d or OpenGL. This
means that pad goes blank when x3d/OGL is spawned, and is updated again
when it is closed. To be revisited - need to support multiple viewers,
of multiple types - which implies explicit naming or pad controlling
enumeration.
2. OGL viewer now responds correct to modifications in pad, without
having to be reinvoked (as previously). x3d is still decoupled (as
previously) so does not rebuild - too difficult to get working.
Revision
9665 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Added
Tue Aug 3 16:01:19 2004 UTC (10 years, 5 months ago) by
brun
Original Path:
trunk/base/inc/TVirtualViewer3D.h
File length: 1932 byte(s)
From Olivier, Timur Pocheptsov , Andrei Gheata and Rene
Mega patch to introduce the new 3-d interface (to be described later).
The new interface has been tested with both X3D and OpenGL under Linux.
Being tested under Windows.
Note that several changes are expected in these classes (OpenGL in particular)
in the coming days.
This form allows you to request diffs between any two revisions of this file.
For each of the two "sides" of the diff,
enter a numeric revision.