Thread: [Plib-users] Semi-transparent plane
Brought to you by:
sjbaker
From: Martin H. <how...@os...> - 2001-01-17 00:36:06
|
I've been struggling for about a week trying to get a semi-transparent plane to show using SSG. First off, I'm primarily an HCI guy with programming skills which I use for prototype production, and not primarily a programmer. I took the Tux demo and transmogrified it into a display where there is a textured ground plane, a camera at a certain altitude above that plane, and a number of objects scattered at different heights in the field of view. What I want to achieve is a semi-transparent plane just under the camera's altitude, parallel to the ground plane, with a slight colour tint: everything under that plane would be slightly dimmer and slightly colour tinted (as if viewed through tinted glass), everything above would be unobstructed. Objects cut in half by the translucent plane would be rendered accordingly. (I'm doing this as part of my research on 3D displays, so I'm not really interested in the prototype itself beyond being able to run experiments with it as a stimulus.) I have the Red Book, and the OpenGL Superbible and I've read the PLIB documentation on the web site. From what I can tell, you need to draw everything else before you draw the translucent plane, but I don't know how to achive this with SSG (I tried adding the plane as the last child to the scene, but it doens't seem to work). Also, it would appear that ssgSimpleState cannot achieve the effects on its own: I need callbacks that call 'glBlendFunc()' and 'glDepthMask()'. So, please, excuse a dumb beginner, but am I on the right track with callbacks? How do I control drawing order? And am I missing anything obvious? As it is, my transluscent plane isn't being drawn at all. M. -- Martin Howard | Visiting Scholar, CSEL, OSU | 53 kB/s and nothing on. email: how...@os... | www: http://mvhoward.i.am/ +---------------------------------------- |
From: Ben D. <be...@wa...> - 2001-01-17 01:19:26
|
> -----Original Message----- > From: Martin Howard > > I've been struggling for about a week trying to get a > semi-transparent plane to show using SSG. [...] > > it would appear that ssgSimpleState cannot achieve the > effects on its own: I need callbacks that > call 'glBlendFunc()' and 'glDepthMask()'. ssgSimpleState would be just fine for your translucent object, if it worked. That class, and material properties in general, are not actually functional in PLIB/SSG. If you look at the applications using SSG, you'll see that the majority of them use entirely textured objects - the underlying material usually being a solid white per-vertex color, the only kind of color supported by SSG. For actual use of material properties, including translucency, you may want to look at other scene graph APIs, such as OSG, http://www.openscenegraph.org/ -Ben http://vterrain.org/ |
From: Steve B. <sjb...@ai...> - 2001-01-17 05:29:49
|
Ben Discoe wrote: > > > -----Original Message----- > > From: Martin Howard > > > > I've been struggling for about a week trying to get a > > semi-transparent plane to show using SSG. [...] > > > > it would appear that ssgSimpleState cannot achieve the > > effects on its own: I need callbacks that > > call 'glBlendFunc()' and 'glDepthMask()'. > > ssgSimpleState would be just fine for your translucent object, if it worked. > That class, and material properties in general, are not actually functional > in PLIB/SSG. Well, if that's true then it's something someone has broken quite recently. I use this stuff all the time and it works OK for me. > If you look at the applications using SSG, you'll see that the majority of > them use entirely textured objects - the underlying material usually being a > solid white per-vertex color, the only kind of color supported by SSG. That's not true. Look at TuxAQFH for example. The spaceship on the 'moon' level, the waterfall in the training level, the glass cube on the race level, etc all work just fine. > For actual use of material properties, including translucency, you may want > to look at other scene graph APIs, such as OSG, > http://www.openscenegraph.org/ Ben: Please check your facts before advising people to use other libraries. If you hate PLIB that much - get the heck off the mailing list. -- Steve Baker HomeEmail: <sjb...@ai...> WorkEmail: <sj...@li...> HomePage : http://web2.airmail.net/sjbaker1 Projects : http://plib.sourceforge.net http://tuxaqfh.sourceforge.net http://tuxkart.sourceforge.net http://prettypoly.sourceforge.net http://freeglut.sourceforge.net |
From: Wolfram K. <w_...@rz...> - 2001-01-17 09:42:56
|
"Ben Discoe" <be...@wa...> wrote: >ssgSimpleState would be just fine for your translucent object, if it = worked. >That class, and material properties in general, are not actually = functional >in PLIB/SSG. Wrong. >If you look at the applications using SSG, you'll see that the majority = of >them use entirely textured objects - the underlying material usually = being a >solid white per-vertex color,=20 That is indeed true for the majority of things, but the minority of faces that are untextured, coloured work. I "played" with lots of planes from Micro$oft Flight Simulator. They use much white, textured faces as well. But several have, for example, untextured, coloured spinners. These work. The only problem I know of is that .ASE loader and/or writer doesnt work with this and the same is true for .AC, as I found out just yesterday evening :-(. We are working on the loaders/writers. Apart from that, ssgSimpleState works. Regarding transparency: Quite a lot of the airplanes have transparent cockpits. This works as well. >For actual use of material properties, including translucency, you may = want >to look at other scene graph APIs, such as OSG, >http://www.openscenegraph.org/ Why? If you really know of a bug apart from .ASE and .AC, then please tell it to us, since we are working towards PLIB 1.4.0, that is, a stable version. > >-Ben >http://vterrain.org/ Bye bye, Wolfram. |
From: Norman V. <nh...@ca...> - 2001-01-17 02:36:38
|
Martin Howard writes: > >I've been struggling for about a week trying to get a semi-transparent plane >to show using SSG. Mark Valleland posted some code showing one way of doing this by adding translucent polgons on top of the track in Steve's tuxkart game http://tuxkart.sourceforge.net Here is a link to Mark's message describing this http://www.geocrawler.com/archives/3/3037/2000/7/0/4033334/ there is a link to the actual code in the archived message Cheers Norman |
From: Sam S. <sa...@sp...> - 2001-01-17 05:06:55
|
Hi, I'm having some difficultly scaling loaded models in SSG. I have an model in AC3D format that I wish to draw in various sizes about the scene. So my first thought is to load the model, and then stick relevant scaling transforms above it. a 0 0 0 0 a 0 0 0 0 a 0 0 0 0 1 to scale by a in all three axis. But I get clipping problems when I do this. It appears that SSG isn't updating the bounding sphere? (I've tried calling recalcBSphere() on the returned entity from ssgLoadAC). Am I doing anything obviously wrong here? Sam |
From: Steve B. <sjb...@ai...> - 2001-01-17 05:43:49
|
Sam Stickland wrote: > > Hi, > > I'm having some difficultly scaling loaded models in SSG. I have an model > in AC3D format that I wish to draw in various sizes about the scene. So my > first thought is to load the model, and then stick relevant scaling > transforms above it. > > a 0 0 0 > 0 a 0 0 > 0 0 a 0 > 0 0 0 1 > > to scale by a in all three axis. But I get clipping problems when I do > this. It appears that SSG isn't updating the bounding sphere? (I've tried > calling recalcBSphere() on the returned entity from ssgLoadAC). Am I doing > anything obviously wrong here? Yeah - scaling is kinda *broken* in SSG. It turns out to be a real pain to implement because there isn't an easy way to maintain the bounding spheres during scaling without clobbering the performance of non-scaled models. I suggest running the ssgFlatten command which multiplies out transforms... or better still, just write a little tree walk that visits all the leaf nodes and multiplies all the vertices by 'a'. Scaling is generally a bad idea in OpenGL anyway because your vertex normals are scaled by the matrix too - that screws up your lighting. You can glEnable the renormalize flag (I forget the token name) - but that incurs an extra sqrt per vertex - which is pretty serious in itself - and in many OpenGL implementations, this throws you off the 'optimised path' and your program runs 50x slower or something awful. We should really remove scaling from the SSG API - but then you wouldn't be able to pass us an arbitary matrix - and that's too useful. This needs to be mentioned in the manual. -- Steve Baker HomeEmail: <sjb...@ai...> WorkEmail: <sj...@li...> HomePage : http://web2.airmail.net/sjbaker1 Projects : http://plib.sourceforge.net http://tuxaqfh.sourceforge.net http://tuxkart.sourceforge.net http://prettypoly.sourceforge.net http://freeglut.sourceforge.net |
From: Per L. <li...@ho...> - 2001-01-17 22:52:27
|
On Wednesday 17 January 2001 13:52, Sam Stickland wrote: > Hi, > > I'm having some difficultly scaling loaded models in SSG. I have an model > in AC3D format that I wish to draw in various sizes about the scene. So my > first thought is to load the model, and then stick relevant scaling > transforms above it. > > a 0 0 0 > 0 a 0 0 > 0 0 a 0 > 0 0 0 1 > > to scale by a in all three axis. But I get clipping problems when I do > this. It appears that SSG isn't updating the bounding sphere? (I've tried > calling recalcBSphere() on the returned entity from ssgLoadAC). Am I doing > anything obviously wrong here? What I did when I needed a scaled version of a model, was that I loaded it, scaled it (and presumably got the same clip-problems that you do), but just saved the scaled model as an ASE model. This format doesn't store normals or bounding spheres, so these will be recalculated when you load the model the next time, and it will work as expected. Works all right, if you can live with that the scaling is done off-line. I'm not sure it will work in your application, since I don't know what you want to do with the model. Regards, Per -- / Per Liedman / li...@ho... / www.mdstud.chalmers.se/~md6pl / 031-825659 / 0705-520455 |
From: Steve B. <sjb...@ai...> - 2001-01-17 05:26:10
|
Martin Howard wrote: > I have the Red Book, and the OpenGL Superbible and I've read the PLIB > documentation on the web site. From what I can tell, you need to draw > everything else before you draw the translucent plane, but I don't know how > to achive this with SSG (I tried adding the plane as the last child to the > scene, but it doens't seem to work). SSG knows that translucent things have to be drawn last...and it does it automatically on your behalf. > Also, it would appear that > ssgSimpleState cannot achieve the effects on its own: I need callbacks that > call 'glBlendFunc()' and 'glDepthMask()'. glBlendFunc is set to a 'sensible' value by default - you shouldn't need to tough glDepthMask in this application. > So, please, excuse a dumb beginner, but am I on the right track with > callbacks? How do I control drawing order? You don't need to do that. SSG does it for you...just sit back and enjoy the ride! > And am I missing anything > obvious? As it is, my transluscent plane isn't being drawn at all. Then I *suspect* you have something else wrong. Maybe it's back-facing? Maybe it's alpha is too low to show up? It's hard to tell without seeing the code. -- Steve Baker HomeEmail: <sjb...@ai...> WorkEmail: <sj...@li...> HomePage : http://web2.airmail.net/sjbaker1 Projects : http://plib.sourceforge.net http://tuxaqfh.sourceforge.net http://tuxkart.sourceforge.net http://prettypoly.sourceforge.net http://freeglut.sourceforge.net |
From: Martin H. <how...@os...> - 2001-01-18 01:29:47
|
Steve Baker jotted down the following: > Martin Howard wrote: >> So, please, excuse a dumb beginner, but am I on the right track with >> callbacks? How do I control drawing order? > > You don't need to do that. SSG does it for you...just sit back and enjoy > the ride! Quick summary: ssgSimpleState does indeed work for materials other than solid white, or textures. I downloaded the source for TuxKart and TuxAQFH. They both use material.cxx and material.h to define materials. Translucent objects do: state->setTranlucent(); state->enable(GL_ALPHA_TEST); state->setAlphaClamp(alpha_ref); state->enable(GL_BLEND); I do the same in my code now, but I either get a plane which is opaque, or not rendered at all, depending upon the value of the vertex colours to 'alpha_ref' (alpha <= alpha_ref doesn't render). If I don't call setAlphaClamp() at all, then I get an opaque plane. Also, I'm no longer fiddling around with glBlendFunc() or glDepthMask(), but leaving them at whatever defaults SSG sets them to. Drawing order appears to be correct, but I still don't get any translucency. Anyone got any other ideas? M. -- Martin Howard | "Why do I think that MacOS is better than Visiting Scholar, CSEL, OSU | Windows? Well, you can put sideburns and email: how...@os... | shades on a 50-year old guy...but that still www: http://mvhoward.i.am/ | don't make him Elvis" -- Unknown +-------------------------------------------- |
From: Norman V. <nh...@ca...> - 2001-01-18 04:27:34
|
Martin Howard writes: > >Quick summary: ssgSimpleState does indeed work for materials other than >solid white, or textures. I downloaded the source for TuxKart and TuxAQFH. >They both use material.cxx and material.h to define materials. > Translucent >objects do: > > state->setTranlucent(); > state->enable(GL_ALPHA_TEST); > state->setAlphaClamp(alpha_ref); > state->enable(GL_BLEND); > >I do the same in my code now, but I either get a plane which is opaque, or >not rendered at all, depending upon the value of the vertex colours to >'alpha_ref' (alpha <= alpha_ref doesn't render). If I don't call >setAlphaClamp() at all, then I get an opaque plane. Also, I'm no longer >fiddling around with glBlendFunc() or glDepthMask(), but leaving them at >whatever defaults SSG sets them to. Drawing order appears to be correct, >but I still don't get any translucency. > >Anyone got any other ideas? -- untested -- state->enable( GL_LIGHTING ) ; state->setShadeModel( GL_SMOOTH ) ; state->enable( GL_COLOR_MATERIAL ) ; state->setColourMaterial( GL_AMBIENT_AND_DIFFUSE ) ; state->setMaterial( GL_EMISSION, 0.1, 0.31, 0.71, .4 ) ; state->setMaterial( GL_SPECULAR, 0.31, 0.51, 0.91, .4 ) ; state->setShininess( 0.8 ) ; state->setTranslucent() ; state->enable( GL_BLEND ) ; state->enable ( GL_ALPHA_TEST ) ; state->setAlphaClamp ( 0.0f ) ; Norman |
From: Wolfram K. <w_...@rz...> - 2001-01-18 08:18:26
|
What you can try is: Get a model with transparency, for example, on http://home.t-online.de/home/Wolfram.Kuss goto Misc Panes and download the optica. Put Model (*.ac) and textures into the same dir. =46rom your app, call ssgLoad, leaving the second parameter at NULL. Put the model into your scene graph. IMHO this should then work, without further code. If it does, you can either load a model for your Semi-transparent plane too, or, if you want to do everything via code and not files, then extract the necessary code from the loader. Bye bye, Wolfram. |
From: Martin H. <how...@os...> - 2001-01-18 23:18:14
|
Wolfram Kuss jotted down the following: > Get a model with transparency, OK, I tried this. The cockpit of the Optica model is a solid grey, it is *not* transparent. The glass looks like shiny grey plastic. This is despite having the lines: glEnable(GL_BLEND); glEnable(GL_DEPTH_TEST); glEnable(GL_ALPHA_TEST); in the global set-up portion of my code (just after ssgInit() is called). I also tried Norman Vine's suggestion, using the state/material properties he posted here. Again, no transparency, but I can alter the appearance of the (flat) plane by modifying the GL_EMISSION and GL_SPECULAR properties. But no transparency. What's my next move? I'm sorry to be harking on like this guys, but I can't make any sense of this and I really *need* this transparency thing working. M. -- Martin Howard | Visiting Scholar, CSEL, OSU | It is essentially contestable. email: how...@os... | www: http://mvhoward.i.am/ +--------------------------------------- |
From: Steve B. <sjb...@ai...> - 2001-01-19 02:28:36
|
Martin Howard wrote: > > Wolfram Kuss jotted down the following: > > > Get a model with transparency, > > OK, I tried this. The cockpit of the Optica model is a solid grey, it is > *not* transparent. The glass looks like shiny grey plastic. This is > despite having the lines: > > glEnable(GL_BLEND); > glEnable(GL_DEPTH_TEST); > glEnable(GL_ALPHA_TEST); > > in the global set-up portion of my code (just after ssgInit() is called). > > I also tried Norman Vine's suggestion, using the state/material properties > he posted here. Again, no transparency, but I can alter the appearance of > the (flat) plane by modifying the GL_EMISSION and GL_SPECULAR properties. > But no transparency. What's my next move? I'm sorry to be harking on like > this guys, but I can't make any sense of this and I really *need* this > transparency thing working. Running the models/flying_saucer.ac model from my TuxAQFH game (URL below) in the examples/src/ssg/viewer program from the PLIB examples suite on CVS DEFINITELY shows transparency. One possiblity though is that some of the old RIVA graphics cards don't do polygon alpha correctly (or at all in some cases) - if you have one of those old clunkers then the fault is in OpenGL. What graphics card and OpenGL library are you using BTW? -- Steve Baker HomeEmail: <sjb...@ai...> WorkEmail: <sj...@li...> HomePage : http://web2.airmail.net/sjbaker1 Projects : http://plib.sourceforge.net http://tuxaqfh.sourceforge.net http://tuxkart.sourceforge.net http://prettypoly.sourceforge.net http://freeglut.sourceforge.net |