[osg-users] Is the Z-Buffer linear or non-linear?

2011-08-24 Thread Martin Großer
Hello,

I am completely confused about the Z-Buffer. I thought it is non-linear but now 
I read a lot in forums and now I am not sure about that. The reason about this 
question is I want render linear depth values into a texture. I think, I can do 
it with this shader:

varying float depth;
uniform float near;
uniform float far;
void main(void)
{
  vec4 viewPos = gl_ModelViewMatrix * gl_Vertex;
  depth = (-viewPos.z-near)/(far-near);
  gl_Position = ftransform();
};


varying float depth;
void main(void)
{
gl_FragDepth = depth;
}

But the poor think is all other shader will be overwritten.

Now I use this:

_rendertarget-setInternalFormat(GL_DEPTH_COMPONENT);
_cam-setClearMask(GL_DEPTH_BUFFER_BIT);
_cam-setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT);
_cam-attach(osg::Camera::DEPTH_BUFFER, _rendertarget);
_cam-setRenderOrder(::osg::Camera::PRE_RENDER, 0);

But this is nonlinear, isn't it?

I hope someone can help me about this.

Thanke you very much.

Martin
-- 
NEU: FreePhone - 0ct/min Handyspartarif mit Geld-zurück-Garantie!   
Jetzt informieren: http://www.gmx.net/de/go/freephone
___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] Is the Z-Buffer linear or non-linear?

2011-08-24 Thread Martin Großer
Hello,

I think I got it. Correct me if I am wrong, if I use an orthogonal projection I 
get linear Z-Buffer values. If I use a perspective projection I get non-linear 
values.

The Z-Buffer value (z') of a perspective projection is:
z' = (far + near) / (far - near) + 1/z ((-2 * far * near)/(far-near))

The Z-Buffer value (z') of a orthogonal projection is:
z' = 2 * ((z-near)/(far-near))-1

So, I use a orthogonal projection therefore I get a linear Z-Buffer.

I hope that is right.

Cheers

Martin

 Original-Nachricht 
 Datum: Wed, 24 Aug 2011 10:01:23 +0200
 Von: Martin Großer grosser.mar...@gmx.de
 An: osg-users@lists.openscenegraph.org
 Betreff: [osg-users] Is the Z-Buffer linear or non-linear?

 Hello,
 
 I am completely confused about the Z-Buffer. I thought it is non-linear
 but now I read a lot in forums and now I am not sure about that. The reason
 about this question is I want render linear depth values into a texture. I
 think, I can do it with this shader:
 
 varying float depth;
 uniform float near;
 uniform float far;
 void main(void)
 {
   vec4 viewPos = gl_ModelViewMatrix * gl_Vertex;
   depth = (-viewPos.z-near)/(far-near);
   gl_Position = ftransform();
 };
 
 
 varying float depth;
 void main(void)
 {
 gl_FragDepth = depth;
 }
 
 But the poor think is all other shader will be overwritten.
 
 Now I use this:
 
 _rendertarget-setInternalFormat(GL_DEPTH_COMPONENT);
 _cam-setClearMask(GL_DEPTH_BUFFER_BIT);
 _cam-setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT);
 _cam-attach(osg::Camera::DEPTH_BUFFER, _rendertarget);
 _cam-setRenderOrder(::osg::Camera::PRE_RENDER, 0);
 
 But this is nonlinear, isn't it?
 
 I hope someone can help me about this.
 
 Thanke you very much.
 
 Martin
 -- 
 NEU: FreePhone - 0ct/min Handyspartarif mit Geld-zurück-Garantie! 
 Jetzt informieren: http://www.gmx.net/de/go/freephone
 ___
 osg-users mailing list
 osg-users@lists.openscenegraph.org
 http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

-- 
Empfehlen Sie GMX DSL Ihren Freunden und Bekannten und wir
belohnen Sie mit bis zu 50,- Euro! https://freundschaftswerbung.gmx.de
___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] Is the Z-Buffer linear or non-linear?

2011-08-24 Thread Tomlinson, Gordon
Hi

The z-buffer is not linear ( in my experience)  its weighted to give higher 
resolution closer to the near clip plane 

See

http://www.sjbaker.org/steve/omniv/love_your_z_buffer.html



Gordon Tomlinson
3D Technical Product Manager 
Overwatch®
An Operating Unit of Textron Systems
__


-Original Message-
From: osg-users-boun...@lists.openscenegraph.org 
[mailto:osg-users-boun...@lists.openscenegraph.org] On Behalf Of Martin Großer
Sent: Wednesday, August 24, 2011 7:58 AM
To: OpenSceneGraph Users
Subject: Re: [osg-users] Is the Z-Buffer linear or non-linear?

Hello,

I think I got it. Correct me if I am wrong, if I use an orthogonal projection I 
get linear Z-Buffer values. If I use a perspective projection I get non-linear 
values.

The Z-Buffer value (z') of a perspective projection is:
z' = (far + near) / (far - near) + 1/z ((-2 * far * near)/(far-near))

The Z-Buffer value (z') of a orthogonal projection is:
z' = 2 * ((z-near)/(far-near))-1

So, I use a orthogonal projection therefore I get a linear Z-Buffer.

I hope that is right.

Cheers

Martin

 Original-Nachricht 
 Datum: Wed, 24 Aug 2011 10:01:23 +0200
 Von: Martin Großer grosser.mar...@gmx.de
 An: osg-users@lists.openscenegraph.org
 Betreff: [osg-users] Is the Z-Buffer linear or non-linear?

 Hello,
 
 I am completely confused about the Z-Buffer. I thought it is non-linear
 but now I read a lot in forums and now I am not sure about that. The reason
 about this question is I want render linear depth values into a texture. I
 think, I can do it with this shader:
 
 varying float depth;
 uniform float near;
 uniform float far;
 void main(void)
 {
   vec4 viewPos = gl_ModelViewMatrix * gl_Vertex;
   depth = (-viewPos.z-near)/(far-near);
   gl_Position = ftransform();
 };
 
 
 varying float depth;
 void main(void)
 {
 gl_FragDepth = depth;
 }
 
 But the poor think is all other shader will be overwritten.
 
 Now I use this:
 
 _rendertarget-setInternalFormat(GL_DEPTH_COMPONENT);
 _cam-setClearMask(GL_DEPTH_BUFFER_BIT);
 _cam-setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT);
 _cam-attach(osg::Camera::DEPTH_BUFFER, _rendertarget);
 _cam-setRenderOrder(::osg::Camera::PRE_RENDER, 0);
 
 But this is nonlinear, isn't it?
 
 I hope someone can help me about this.
 
 Thanke you very much.
 
 Martin
 -- 
 NEU: FreePhone - 0ct/min Handyspartarif mit Geld-zurück-Garantie! 
 Jetzt informieren: http://www.gmx.net/de/go/freephone
 ___
 osg-users mailing list
 osg-users@lists.openscenegraph.org
 http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

-- 
Empfehlen Sie GMX DSL Ihren Freunden und Bekannten und wir
belohnen Sie mit bis zu 50,- Euro! https://freundschaftswerbung.gmx.de
___
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


Re: [osg-users] Is the Z-Buffer linear or non-linear?

2011-08-24 Thread Tueller, Shayne R Civ USAF AFMC 519 SMXS/MXDEC
The transform below for the orthogonal projection is indeed linear, mapping 
[n,f] to [-1,1] in linear fashion. 

If you want to linearize depth with a perspective projection (i.e. survive the 
perspective divide between the vertex and fragment shader), here's a way to do 
that. The example uses HLSL but it gets the point across...

http://www.mvps.org/directx/articles/linear_z/linearz.htm

Another interesting discussion related to linear depth using W-buffers can be 
found at

http://www.mvps.org/directx/articles/using_w-buffers.htm

Just make sure you have support for W buffers...

-Shayne

-Original Message-
From: osg-users-boun...@lists.openscenegraph.org 
[mailto:osg-users-boun...@lists.openscenegraph.org] On Behalf Of Martin Großer
Sent: Wednesday, August 24, 2011 5:58 AM
To: OpenSceneGraph Users
Subject: Re: [osg-users] Is the Z-Buffer linear or non-linear?

Hello,

I think I got it. Correct me if I am wrong, if I use an orthogonal projection I 
get linear Z-Buffer values. If I use a perspective projection I get non-linear 
values.

The Z-Buffer value (z') of a perspective projection is:
z' = (far + near) / (far - near) + 1/z ((-2 * far * near)/(far-near))

The Z-Buffer value (z') of a orthogonal projection is:
z' = 2 * ((z-near)/(far-near))-1

So, I use a orthogonal projection therefore I get a linear Z-Buffer.

I hope that is right.

Cheers

Martin

 Original-Nachricht 
 Datum: Wed, 24 Aug 2011 10:01:23 +0200
 Von: Martin Großer grosser.mar...@gmx.de
 An: osg-users@lists.openscenegraph.org
 Betreff: [osg-users] Is the Z-Buffer linear or non-linear?

 Hello,
 
 I am completely confused about the Z-Buffer. I thought it is non-linear
 but now I read a lot in forums and now I am not sure about that. The reason
 about this question is I want render linear depth values into a texture. I
 think, I can do it with this shader:
 
 varying float depth;
 uniform float near;
 uniform float far;
 void main(void)
 {
   vec4 viewPos = gl_ModelViewMatrix * gl_Vertex;
   depth = (-viewPos.z-near)/(far-near);
   gl_Position = ftransform();
 };
 
 
 varying float depth;
 void main(void)
 {
 gl_FragDepth = depth;
 }
 
 But the poor think is all other shader will be overwritten.
 
 Now I use this:
 
 _rendertarget-setInternalFormat(GL_DEPTH_COMPONENT);
 _cam-setClearMask(GL_DEPTH_BUFFER_BIT);
 _cam-setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT);
 _cam-attach(osg::Camera::DEPTH_BUFFER, _rendertarget);
 _cam-setRenderOrder(::osg::Camera::PRE_RENDER, 0);
 
 But this is nonlinear, isn't it?
 
 I hope someone can help me about this.
 
 Thanke you very much.
 
 Martin
 -- 
 NEU: FreePhone - 0ct/min Handyspartarif mit Geld-zurück-Garantie! 
 Jetzt informieren: http://www.gmx.net/de/go/freephone
 ___
 osg-users mailing list
 osg-users@lists.openscenegraph.org
 http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

-- 
Empfehlen Sie GMX DSL Ihren Freunden und Bekannten und wir
belohnen Sie mit bis zu 50,- Euro! https://freundschaftswerbung.gmx.de
___
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