R: [Plib-users] callbacks
Brought to you by:
sjbaker
From: Paolo L. <p.l...@ci...> - 2005-09-29 09:01:34
|
IMHO as far as the setWireframe pre-draw callback returns 1 (true), the actual wireframe drawing done by drawHighlight would be hidden (i.e. "covered") by the ordinary leaf drawing following just after. Returning False you can prevent the ordinary flat drawing to occur instead. This dowsn't explain why just 7 leaves over that many get interested by = the pre-draw setting. However updating to isAKindOf( ssgTypeLeaf() makes wire_update more correct. Greetings - Paolo -----Messaggio originale----- Da: pli...@li... [mailto:pli...@li...] Per conto di Tinoshi Kitazawa Inviato: gioved=EC 4 agosto 2005 1.42 A: PLIB USERS Oggetto: [Plib-users] callbacks Hello!!! I want to draw an object (loaded from an .ac file) in wireframe. I want = this to be the only object in wireframe of the scene. How can I do? I've = tried to use setCallback and stuff, but even if it seems to set up the callback properly, nothing happens... In my callback I've first called just glPoligonMode(GL_CULL_FACE,GL_LINE), then following the viewer example, = I used: static int setWireframe(ssgEntity *e) { //glPolygonMode ( GL_FRONT_AND_BACK, GL_LINE); if ( e -> isAKindOf ( ssgTypeLeaf() ) ) { ssgLeaf* leaf =3D (ssgLeaf*) e ; leaf -> drawHighlight ( red ) ; } return 1 ; } static int setFlat(ssgEntity *e) { //glPolygonMode ( GL_FRONT_AND_BACK, GL_FILL); return TRUE; } void Aeroplane::wire_update ( ssgEntity *e) { if ( e -> isAKindOf ( ssgTypeBranch() ) ) { ssgBranch *br =3D (ssgBranch *) e ; =20 for ( int i =3D 0 ; i < br -> getNumKids () ; i++ ) wire_update ( br -> getKid ( i ) ) ; } else if ( e -> isA ( ssgTypeLeaf() ) ) { ssgLeaf* leaf =3D (ssgLeaf *) e ; leaf -> setCallback ( SSG_CALLBACK_PREDRAW, setWireframe) ; } } I'm programming in C++, and all the examples I've seen are projects with just main.cpp, so maybe I did a wrong initialization? in class Aeroplane.h: ssgCallback setWireframe; ssgCallback setFlat; void wire_update ( ssgEntity *e); The strange thing is that wire_update executes leaf -> setCallback ( SSG_CALLBACK_PREDRAW, setWireframe) ; just 7 times... My .ac model is = very big, I think that is not possibile... something's wrong isn't it? The Entity i pass to void Aeroplane::wire_update ( ssgEntity *e) is the = one returned by ssgLoadAC()... HELP!!! and thank you very much!!!! |