3 #include "TriangleSetGL.h"
4 #include "TriangleSet.h"
7 #include <TGLIncludes.h>
9 //______________________________________________________________________
12 // GL-renderer for TriangleSet class.
14 // See also: TGLObject, TGLLogicalShape.
18 ClassImp(TriangleSetGL)
20 TriangleSetGL::TriangleSetGL() : TGLObject(), fM(0)
24 // fDLCache = false; // Disable display list.
27 TriangleSetGL::~TriangleSetGL()
32 /**************************************************************************/
34 Bool_t TriangleSetGL::SetModel(TObject* obj, const Option_t* /*opt*/)
38 if(SetModelCheckClass(obj, TriangleSet::Class())) {
39 fM = dynamic_cast<TriangleSet*>(obj);
45 void TriangleSetGL::SetBBox()
47 // Set bounding-box from the model.
49 // !! This ok if master sub-classed from TAttBBox
50 SetAxisAlignedBBox(((TriangleSet*)fExternalObj)->AssertBBox());
53 /**************************************************************************/
55 void TriangleSetGL::DirectDraw(TGLRnrCtx & /*rnrCtx*/) const
57 // Low-level GL rendering.
59 TriangleSet& TS = *fM;
60 Bool_t isScaled = TS.fHMTrans.IsScale();
63 glGetIntegerv(GL_SHADE_MODEL, &ex_shade_model);
64 glShadeModel(GL_FLAT);
66 glPushAttrib(GL_ENABLE_BIT | GL_POLYGON_BIT);
68 glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
69 glEnable(GL_COLOR_MATERIAL);
70 glPolygonMode(GL_FRONT, GL_FILL);
71 glPolygonMode(GL_BACK, GL_LINE);
72 glDisable(GL_CULL_FACE);
73 if (isScaled) glEnable(GL_NORMALIZE);
74 glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT);
75 glVertexPointer(3, GL_FLOAT, 0, TS.fVerts);
76 glEnableClientState(GL_VERTEX_ARRAY);
78 Int_t* T = TS.fTrings;
79 Float_t* N = TS.fTringNorms;
80 UChar_t* C = TS.fTringCols;
84 glBegin(GL_TRIANGLES);
85 for(Int_t t=0; t<TS.fNTrings; ++t) {
87 glNormal3fv(N); N += 3;
89 Float_t* v0 = TS.Vertex(T[0]);
90 Float_t* v1 = TS.Vertex(T[1]);
91 Float_t* v2 = TS.Vertex(T[2]);
92 e1.SetXYZ(v1[0]-v0[0], v1[1]-v0[1], v1[2]-v0[2]);
93 e2.SetXYZ(v2[0]-v0[0], v2[1]-v0[1], v2[2]-v0[2]);
95 if (!isScaled) n.SetMag(1);
96 glNormal3d(n.x(), n.y(), n.z());
99 glColor3ubv(C); C += 3;
101 glArrayElement(T[0]);
102 glArrayElement(T[1]);
103 glArrayElement(T[2]);
110 glShadeModel(ex_shade_model);