25 ClassImp(TEveTriangleSetGL);
30 TEveTriangleSetGL::TEveTriangleSetGL() : TGLObject(), fM(0)
39 TEveTriangleSetGL::~TEveTriangleSetGL()
46 Bool_t TEveTriangleSetGL::SetModel(TObject* obj,
const Option_t* )
48 fM = SetModelDynCast<TEveTriangleSet>(obj);
55 void TEveTriangleSetGL::SetBBox()
58 SetAxisAlignedBBox(((TEveTriangleSet*)fExternalObj)->AssertBBox());
65 void TEveTriangleSetGL::DirectDraw(TGLRnrCtx & )
const
67 TEveTriangleSet& refTS = *fM;
68 Bool_t isScaled = refTS.RefMainTrans().IsScale();
71 glGetIntegerv(GL_SHADE_MODEL, &ex_shade_model);
72 glShadeModel(GL_FLAT);
74 glPushAttrib(GL_ENABLE_BIT | GL_POLYGON_BIT);
76 glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
77 glEnable(GL_COLOR_MATERIAL);
78 glDisable(GL_CULL_FACE);
79 if (isScaled) glEnable(GL_NORMALIZE);
80 glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT);
81 glVertexPointer(3, GL_FLOAT, 0, refTS.fVerts);
82 glEnableClientState(GL_VERTEX_ARRAY);
84 Int_t* tng = refTS.fTrings;
85 Float_t* nrm = refTS.fTringNorms;
86 UChar_t* col = refTS.fTringCols;
90 glBegin(GL_TRIANGLES);
91 for(Int_t t=0; t<refTS.fNTrings; ++t) {
93 glNormal3fv(nrm); nrm += 3;
95 Float_t* v0 = refTS.Vertex(tng[0]);
96 Float_t* v1 = refTS.Vertex(tng[1]);
97 Float_t* v2 = refTS.Vertex(tng[2]);
98 e1.SetXYZ(v1[0]-v0[0], v1[1]-v0[1], v1[2]-v0[2]);
99 e2.SetXYZ(v2[0]-v0[0], v2[1]-v0[1], v2[2]-v0[2]);
101 if (!isScaled) n.SetMag(1);
102 glNormal3d(n.x(), n.y(), n.z());
105 TGLUtil::Color3ubv(col); col += 3;
107 glArrayElement(tng[0]);
108 glArrayElement(tng[1]);
109 glArrayElement(tng[2]);
116 glShadeModel(ex_shade_model);