Re: [osg-users] Using custom shaders with osgParticle

2012-01-09 Thread Sergey Polischuk
Hi, Frank

With vertex arrays disabled your program ignored.
You should use setDefaultAttributesUsingShaders, and set your program with 
override flag. If you use vertex shaders - set mode 
GL_VERTEX_PROGRAM_POINT_SIZE on, mode GL_POINT_SPRITE on,  and in vertex shader 
write to gl_PointSize  - value in pixels. Cant say if this even works without 
them. Particles size will be different from what you getting without shaders 
and depending on screen resolution so you need to use some uniforms with screen 
size etc to sort this out.

If you dont see anything try to change particles size (i'd say raise in 1-2 
orders of magnitude) just to see if problem here.
example shaders that should draw something:

char vertexShaderSource[] =
#version 120\n
uniform float visibilityDistance;\n
varying vec3 basic_prop;\n
\n
void main(void)\n
{\n
basic_prop = gl_MultiTexCoord0.xyz;\n
vec4 ecPos = gl_ModelViewMatrix * gl_Vertex;\n
gl_Position = ftransform();\n
gl_PointSize = basic_prop.y/length(ecPos.xyz);\n
gl_ClipVertex = ecPos;\n
}\n;
char fragmentShaderSource[] =
#version 120\n
\n
void main(void)\n
{\n
vec4 color = vec4(abs(gl_PointCoord.xy), 1.0, 1.0);\n
gl_FragColor = color;\n
}\n;

Cheers.

06.01.2012, 04:55, Frank Sullivan knarf.navil...@gmail.com:
 Hi,

 I need to render the particles using a custom shader that includes a special 
 lighting system that I'm using. If I can just get the Particle System to pay 
 attention to the shader that I wrote, I think everything will be dandy. 
 However, I am having some trouble with this, and I am hoping for some insight.

 In order to test this, I wrote a simple shader program with a fragment shader 
 that outputs the color red. There is no vertex or geometry shader. This way, 
 if I'm using the shader program correctly, I should see flat red particles. 
 If I'm using the shader program incorrectly, depending on the problem, I'll 
 either see black particles, or invisible particles, or perhaps particles that 
 look as if they're being rendered without shaders (i.e., how they looked 
 before I embarked on this task).

 The first thing I tried is to simply follow the osgparticleshader example, 
 without using my red shader at all, just to see if I could get particles 
 working with shaders. Unfortunately, if I call 
 setDefaultAttributesUsingShaders, the result is invisible particles. After 
 much debugging, I discovered that I can get the particles to come back if I 
 call setUseVertexArray(false). So, I think there is something that it doesn't 
 like about using vertex arrays (at least in the context of my program).

 With vertex arrays disabled, the particle system seems to be using immediate 
 mode draw calls, which I don't mind. However, I can't tell if it's actually 
 using the shader or not, because the particles look the same either way.

 So, I tried adding my red shader program to the state set, and that did not 
 help. The particles drew normally, as if it was ignoring my program and using 
 the fixed function pipeline instead.

 I suppose it's possible that the particle system now had two programs -- the 
 one set by setDefaultAttributesUsingShaders and the one set by me. So, to 
 rule out such a conflict, I omitted the call to 
 setDefaultAttributesUsingShaders and instead replaced it with everything the 
 method does (essentially inlining the method myself), with the exception that 
 it uses my red shader program instead of the stock one. Still, however, it 
 seemed to ignore my shader.

 Can anyone think of what I might be doing wrong? My next step will be to try 
 to accomplish this in isolation in a stand-alone program, but I just wanted 
 to check and see if there are any ideas.

 Thank you!

 Cheers,
 Frank

 --
 Read this topic online here:
 http://forum.openscenegraph.org/viewtopic.php?p=44648#44648

 ___
 osg-users mailing list
 osg-users@lists.openscenegraph.org
 http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


[osg-users] Using custom shaders with osgParticle

2012-01-05 Thread Frank Sullivan
Hi,

I need to render the particles using a custom shader that includes a special 
lighting system that I'm using. If I can just get the Particle System to pay 
attention to the shader that I wrote, I think everything will be dandy. 
However, I am having some trouble with this, and I am hoping for some insight.

In order to test this, I wrote a simple shader program with a fragment shader 
that outputs the color red. There is no vertex or geometry shader. This way, if 
I'm using the shader program correctly, I should see flat red particles. If I'm 
using the shader program incorrectly, depending on the problem, I'll either see 
black particles, or invisible particles, or perhaps particles that look as if 
they're being rendered without shaders (i.e., how they looked before I embarked 
on this task).

The first thing I tried is to simply follow the osgparticleshader example, 
without using my red shader at all, just to see if I could get particles 
working with shaders. Unfortunately, if I call 
setDefaultAttributesUsingShaders, the result is invisible particles. After much 
debugging, I discovered that I can get the particles to come back if I call 
setUseVertexArray(false). So, I think there is something that it doesn't like 
about using vertex arrays (at least in the context of my program).

With vertex arrays disabled, the particle system seems to be using immediate 
mode draw calls, which I don't mind. However, I can't tell if it's actually 
using the shader or not, because the particles look the same either way.

So, I tried adding my red shader program to the state set, and that did not 
help. The particles drew normally, as if it was ignoring my program and using 
the fixed function pipeline instead.

I suppose it's possible that the particle system now had two programs -- the 
one set by setDefaultAttributesUsingShaders and the one set by me. So, to rule 
out such a conflict, I omitted the call to setDefaultAttributesUsingShaders and 
instead replaced it with everything the method does (essentially inlining the 
method myself), with the exception that it uses my red shader program instead 
of the stock one. Still, however, it seemed to ignore my shader.

Can anyone think of what I might be doing wrong? My next step will be to try to 
accomplish this in isolation in a stand-alone program, but I just wanted to 
check and see if there are any ideas.

Thank you!

Cheers,
Frank

--
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=44648#44648





___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] Using custom shaders with osgParticle

2012-01-05 Thread Chris 'Xenon' Hanson
On 1/5/2012 5:55 PM, Frank Sullivan wrote:
 Can anyone think of what I might be doing wrong? My next step will be to try 
 to accomplish this in isolation in a stand-alone program, but I just wanted 
 to check and see if there are any ideas.

  gDebugger might help you halt at the draw command and snoop on the state to 
see if your
shader is installed.

-- 
Chris 'Xenon' Hanson, omo sanza lettere. xe...@alphapixel.com 
http://www.alphapixel.com/
  Digital Imaging. OpenGL. Scene Graphs. GIS. GPS. Training. Consulting. 
Contracting.
There is no Truth. There is only Perception. To Perceive is to Exist. - 
Xen
___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org