ROOT logo

From $ROOTSYS/tutorials/gl/glsurfaces.C

// Various surfaces rendered with GL.
// This example draws 6 surfaces using OpenGL in pad (one is remake
// of a classic surfaces.C, another contains 4 surfaces).
//
// The commands used are exactly the same as with a normal pad. 
// The only command to add is: gStyle->SetCanvasPreferGL(true);
// Authors: Rene Brun, Timur Pocheptsov

void glsurfaces()
{
   gStyle->SetPalette(0);
   
   // after this command all legos surfaces (surf/srf1/surf2/surf4/tf3
   // options) are automatically rendered with OpenGL.
   gStyle->SetCanvasPreferGL(kTRUE);

   TCanvas *c1 = new TCanvas("glc1","Surfaces Drawing Options",200,10,700,900);
   c1->SetFillColor(42);
   gStyle->SetFrameFillColor(42);
   title = new TPaveText(0.2, 0.96, 0.8, 0.995);
   title->SetFillColor(33);
   title->AddText("Examples of Surface options");
   title->Draw();

   TPad *pad1 = new TPad("pad1","Gouraud shading", 0.03, 0.50, 0.98, 0.95, 21);
   TPad *pad2 = new TPad("pad2","Color mesh", 0.03, 0.02, 0.98, 0.48, 21);
   pad1->Draw();
   pad2->Draw();
   // We generate a 2-D function
   TF2 *f2 = new TF2("f2","x**2 + y**2 - x**3 -8*x*y**4", -1., 1.2, -1.5, 1.5);
   // Draw this function in pad1 with Gouraud shading option
   pad1->cd();
   pad1->SetLogz();
   f2->SetFillColor(45);
   f2->Draw("glsurf4");

   TF2 *f2clone = new TF2("f2clone","x**2 + y**2 - x**3 -8*x*y**4",
                          -1., 1.2, -1.5, 1.5);
   // Draw this function in pad2 with color mesh option
   pad2->cd();
   pad2->SetLogz();
   f2clone->Draw("glsurf1");
   
   //add axis titles. The titles are set on the intermediate
   //histogram used for visualisation. We must force this histogram
   //to be created, then force the redrawing of the two pads
   pad2->Update();
   f2->GetHistogram()->GetXaxis()->SetTitle("x title");
   f2->GetHistogram()->GetYaxis()->SetTitle("y title");
   f2->GetHistogram()->GetXaxis()->SetTitleOffset(1.4);
   f2->GetHistogram()->GetYaxis()->SetTitleOffset(1.4);
   f2clone->GetHistogram()->GetXaxis()->SetTitle("x title");
   f2clone->GetHistogram()->GetYaxis()->SetTitle("y title");
   f2clone->GetHistogram()->GetXaxis()->SetTitleOffset(1.4);
   f2clone->GetHistogram()->GetYaxis()->SetTitleOffset(1.4);
   pad1->Modified();
   pad2->Modified();

   TCanvas *c2 = new TCanvas("glc2","Surfaces Drawing Options with gl",
                             700,10,700,700);
   c2->SetFillColor(42);
   gStyle->SetFrameFillColor(42);

   c2->Divide(2, 2);

   c2->cd(1);
   TF2 *fun1 = new TF2("fun1","1000*((sin(x)/x)*(sin(y)/y))+200",
                       -6., 6., -6., 6.);
   fun1->SetNpx(30);
   fun1->SetNpy(30);
   fun1->SetFillColor(kGreen);
   fun1->Draw("glsurf3");

   c2->cd(2);
   TF2 *fun2 = new TF2("fun2","cos(y)*sin(x)+cos(x)*sin(y)",
                       -6., 6., -6., 6.);
   fun2->Draw("glsurf1cyl");

   c2->cd(3);
   TF2 *fun3 = new TF2("fun3","sin(x) / x * cos(y) * y", -6., 6., -6., 6.);
   fun3->Draw("glsurfpol");

   c2->cd(4);
   TF3 *fun4 = new TF3("fun4","sin(x * x + y * y + z * z - 4)",
                       -2.5, 2.5, -2.5, 2.5, -2.5, 2.5);
   Int_t colInd = TColor::GetColor(1.f, 0.5f, 0.f);
   fun4->SetFillColor(colInd);
   fun4->Draw("gl");//tf3 option
}
 glsurfaces.C:1
 glsurfaces.C:2
 glsurfaces.C:3
 glsurfaces.C:4
 glsurfaces.C:5
 glsurfaces.C:6
 glsurfaces.C:7
 glsurfaces.C:8
 glsurfaces.C:9
 glsurfaces.C:10
 glsurfaces.C:11
 glsurfaces.C:12
 glsurfaces.C:13
 glsurfaces.C:14
 glsurfaces.C:15
 glsurfaces.C:16
 glsurfaces.C:17
 glsurfaces.C:18
 glsurfaces.C:19
 glsurfaces.C:20
 glsurfaces.C:21
 glsurfaces.C:22
 glsurfaces.C:23
 glsurfaces.C:24
 glsurfaces.C:25
 glsurfaces.C:26
 glsurfaces.C:27
 glsurfaces.C:28
 glsurfaces.C:29
 glsurfaces.C:30
 glsurfaces.C:31
 glsurfaces.C:32
 glsurfaces.C:33
 glsurfaces.C:34
 glsurfaces.C:35
 glsurfaces.C:36
 glsurfaces.C:37
 glsurfaces.C:38
 glsurfaces.C:39
 glsurfaces.C:40
 glsurfaces.C:41
 glsurfaces.C:42
 glsurfaces.C:43
 glsurfaces.C:44
 glsurfaces.C:45
 glsurfaces.C:46
 glsurfaces.C:47
 glsurfaces.C:48
 glsurfaces.C:49
 glsurfaces.C:50
 glsurfaces.C:51
 glsurfaces.C:52
 glsurfaces.C:53
 glsurfaces.C:54
 glsurfaces.C:55
 glsurfaces.C:56
 glsurfaces.C:57
 glsurfaces.C:58
 glsurfaces.C:59
 glsurfaces.C:60
 glsurfaces.C:61
 glsurfaces.C:62
 glsurfaces.C:63
 glsurfaces.C:64
 glsurfaces.C:65
 glsurfaces.C:66
 glsurfaces.C:67
 glsurfaces.C:68
 glsurfaces.C:69
 glsurfaces.C:70
 glsurfaces.C:71
 glsurfaces.C:72
 glsurfaces.C:73
 glsurfaces.C:74
 glsurfaces.C:75
 glsurfaces.C:76
 glsurfaces.C:77
 glsurfaces.C:78
 glsurfaces.C:79
 glsurfaces.C:80
 glsurfaces.C:81
 glsurfaces.C:82
 glsurfaces.C:83
 glsurfaces.C:84
 glsurfaces.C:85
 glsurfaces.C:86
 glsurfaces.C:87
 glsurfaces.C:88
 glsurfaces.C:89
 glsurfaces.C:90