Logo ROOT  
Reference Guide
 
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Loading...
Searching...
No Matches
glViewerExercise.C File Reference

Detailed Description

Script showing how to use the GL viewer API to animate a picture.

#include "TGLViewer.h"
#include "TGLOrthoCamera.h"
#include "TTimer.h"
#include "TRandom.h"
#include "TVirtualPad.h"
{
// initialization
static Double_t fov = 30;
static Double_t zoom = 0.78;
static Double_t dolly = 1500.0;
static Double_t center[3] = {-164.0, -164.0, -180.0};
static Double_t hRotate = 0.0;
static Double_t vRotate = 0.0;
// steps
static Double_t fovStep = randGen.Rndm() * 3.0 - 0.5;
static Double_t zoomStep = (20 - randGen.Rndm()) / 1000.;
static Double_t dollyStep = randGen.Rndm() * 5.0 - 1.0;
static Double_t centerStep[3] = {randGen.Rndm() * 4, randGen.Rndm() * 4, randGen.Rndm() * 4};
static Double_t hRotateStep = randGen.Rndm() * 0.025;
static Double_t vRotateStep = randGen.Rndm() * 0.05;
// move center
center[0] += centerStep[0];
center[1] += centerStep[1];
center[2] += centerStep[2];
Double_t mag = TMath::Sqrt(center[0] * center[0] + center[1] * center[1] + center[2] * center[2]);
if (mag > 500) {
}
// rotate
if (vRotate >= TMath::TwoPi() || vRotate <= 0.0)
if (hRotate >= (TMath::PiOver2() - 0.02f) || hRotate <= (0.07f - TMath::PiOver2())) {
}
// dolly
if (dolly >= 2000.0 || dolly <= 1500.0)
// modify frustum
TGLViewer *v = (TGLViewer *)gPad->GetViewer3D();
if (camera < 3) {
if (fov > 130.0 || fov < 5.0)
} else {
if (zoom > 4.0 || zoom < 0.25)
}
// apply
if (camera < 3)
v->SetPerspectiveCamera(camera, fov, dollyStep, center, hRotateStep, vRotateStep);
else
v->SetOrthoCamera(camera, zoom, dollyStep, center, hRotateStep, vRotateStep);
if (++moveCount % 10 == 0)
v->RefreshPadEditor(v);
}
{
gROOT->ProcessLine(".x nucleus.C");
TGLViewer *v = (TGLViewer *)gPad->GetViewer3D();
// Random draw style
Int_t style = randGen.Integer(3);
switch (style) {
case 0: v->SetStyle(TGLRnrCtx::kFill); break;
case 1: v->SetStyle(TGLRnrCtx::kOutline); break;
case 2: v->SetStyle(TGLRnrCtx::kWireFrame); break;
}
// Lights - turn some off randomly
TGLLightSet *ls = v->GetLightSet();
if (randGen.Integer(2) == 0)
if (randGen.Integer(2) == 0)
if (randGen.Integer(2) == 0)
if (randGen.Integer(2) == 0)
// Random camera type
Int_t id = randGen.Integer(6);
v->SetCurrentCamera(camera);
v->CurrentCamera().SetExternalCenter(kTRUE);
if (id > 2) {
// 0, 1, and 2 - are different 'perspective' camers.
TGLOrthoCamera &o = static_cast<TGLOrthoCamera &>(v->CurrentCamera());
}
// Now animate the camera
TGLSAViewer *sav = dynamic_cast<TGLSAViewer *>(v);
if (sav)
sav->GetFrame()->Connect("CloseWindow()", "TTimer", &timer, "TurnOff()");
timer.SetCommand("AnimateCamera()");
timer.TurnOn();
}
int Int_t
Definition RtypesCore.h:45
constexpr Bool_t kFALSE
Definition RtypesCore.h:94
double Double_t
Definition RtypesCore.h:59
constexpr Bool_t kTRUE
Definition RtypesCore.h:93
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t style
#define gROOT
Definition TROOT.h:406
#define gPad
Encapsulates a set of lights for OpenGL.
Definition TGLLightSet.h:22
void SetLight(ELight light, Bool_t on)
Set a light on/off.
Orthographic projection camera.
void SetEnableRotate(Bool_t x)
The top level standalone GL-viewer - created via plugin manager.
Definition TGLSAViewer.h:38
Base GL viewer object - used by both standalone and embedded (in pad) GL.
Definition TGLViewer.h:55
This is the base class for the ROOT Random number generators.
Definition TRandom.h:27
Handles synchronous and a-synchronous timer events.
Definition TTimer.h:51
constexpr Double_t PiOver2()
Definition TMath.h:51
Double_t Sqrt(Double_t x)
Returns the square root of x.
Definition TMath.h:666
constexpr Double_t TwoPi()
Definition TMath.h:44
Author
Richard Maunder

Definition in file glViewerExercise.C.