Re: [osg-users] Grabbing depth buffer from pre-render camera?

2008-05-06 Thread Jason Ziglar
I actually managed to get this to work, luckily. I'm not entirely 
certain what fixed it - I know the final error was having removed the 
line setting the ABSOLUTE_RF.


Thanks,


Robert Osfield wrote:

Hi Jason,

On a quick pass I can't spot why the image isn't getting updated.  The
osgprerender example has usage of
a colour buffer being grabbed once per frame and this certainly works try:

  osgprerender cow.osg --image

Perhaps this example can help you.

Robert.

On Mon, Apr 28, 2008 at 8:06 PM, Jason Ziglar <[EMAIL PROTECTED]> wrote:
  

I've got a camera set up to perform a pre-render pass, so I can generate
 a shadow map for the scene of interest. I have verified that the camera
 is running via the PostDrawCallback, but the resulting image is the same
 even though the scene is changing between images. The PostDrawCallback
 merely calls dirty() on the image - this code results in a static image.
 Anyone have any clues what is wrong with this code?

 Thanks in advance,


 ref_ptr m_prerenderCamera;
 ref_ptr m_shadowImage;
 ref_ptr m_shadowMap;
 const int TextureSize = 1024;
 m_prerenderCamera->setRenderTargetImplementation(Camera::FRAME_BUFFER_OBJECT);
 m_prerenderCamera->setClearColor(Vec4(1.0f, 0.0f, 1.0f, 1.0f));
 m_prerenderCamera->setClearMask(GL_DEPTH_BUFFER_BIT  | GL_COLOR_BUFFER_BIT);
  m_prerenderCamera->setComputeNearFarMode(Camera::DO_NOT_COMPUTE_NEAR_FAR);

 m_prerenderCamera->setReferenceFrame(Transform::ABSOLUTE_RF);
 m_prerenderCamera->setProjectionMatrixAsPerspective(90.0, 1024.0/768.0,
 1.0, 100.0);
 m_prerenderCamera->setViewMatrix(Matrix::identity());
 m_prerenderCamera->setViewport(0, 0, TextureSize, TextureSize);
 m_prerenderCamera->setRenderOrder(Camera::PRE_RENDER);

  {
StateSet* ss = m_prerenderCamera->getOrCreateStateSet();

osg::Depth* depth = new osg::Depth;
ss->setAttributeAndModes(depth, StateAttribute::ON);
  }

 m_shadowImage->allocateImage(TextureSize, TextureSize, 1,
 GL_DEPTH_COMPONENT, GL_FLOAT);

 m_prerenderCamera->attach(Camera::DEPTH_BUFFER, m_shadowImage.get());
 m_prerenderCamera->addChild(m_maskingScene.get());

 m_shadowMap->setImage(m_shadowImage.get());
 m_prerenderCamera->setPostDrawCallback(new CameraCallback(m_shadowImage));

 m_shadowMap->setWrap(osg::Texture::WRAP_S, osg::Texture::CLAMP_TO_BORDER);
 m_shadowMap->setWrap(osg::Texture::WRAP_T, osg::Texture::CLAMP_TO_BORDER);
 m_shadowMap->setWrap(osg::Texture::WRAP_R, osg::Texture::CLAMP_TO_BORDER);
 {
  StateSet* ss = m_projectedScene->getOrCreateStateSet();
  ss->setTextureAttributeAndModes(m_shadowUnit, m_shadowMap.get(),
 StateAttrib
  ss->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
  ss->setMode(GL_BLEND, osg::StateAttribute::ON);
 }
 ___
 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 mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] Grabbing depth buffer from pre-render camera?

2008-05-06 Thread Robert Osfield
Hi Jason,

On a quick pass I can't spot why the image isn't getting updated.  The
osgprerender example has usage of
a colour buffer being grabbed once per frame and this certainly works try:

  osgprerender cow.osg --image

Perhaps this example can help you.

Robert.

On Mon, Apr 28, 2008 at 8:06 PM, Jason Ziglar <[EMAIL PROTECTED]> wrote:
> I've got a camera set up to perform a pre-render pass, so I can generate
>  a shadow map for the scene of interest. I have verified that the camera
>  is running via the PostDrawCallback, but the resulting image is the same
>  even though the scene is changing between images. The PostDrawCallback
>  merely calls dirty() on the image - this code results in a static image.
>  Anyone have any clues what is wrong with this code?
>
>  Thanks in advance,
>
>
>  ref_ptr m_prerenderCamera;
>  ref_ptr m_shadowImage;
>  ref_ptr m_shadowMap;
>  const int TextureSize = 1024;
>  
> m_prerenderCamera->setRenderTargetImplementation(Camera::FRAME_BUFFER_OBJECT);
>  m_prerenderCamera->setClearColor(Vec4(1.0f, 0.0f, 1.0f, 1.0f));
>  m_prerenderCamera->setClearMask(GL_DEPTH_BUFFER_BIT  | GL_COLOR_BUFFER_BIT);
>   m_prerenderCamera->setComputeNearFarMode(Camera::DO_NOT_COMPUTE_NEAR_FAR);
>
>  m_prerenderCamera->setReferenceFrame(Transform::ABSOLUTE_RF);
>  m_prerenderCamera->setProjectionMatrixAsPerspective(90.0, 1024.0/768.0,
>  1.0, 100.0);
>  m_prerenderCamera->setViewMatrix(Matrix::identity());
>  m_prerenderCamera->setViewport(0, 0, TextureSize, TextureSize);
>  m_prerenderCamera->setRenderOrder(Camera::PRE_RENDER);
>
>   {
> StateSet* ss = m_prerenderCamera->getOrCreateStateSet();
>
> osg::Depth* depth = new osg::Depth;
> ss->setAttributeAndModes(depth, StateAttribute::ON);
>   }
>
>  m_shadowImage->allocateImage(TextureSize, TextureSize, 1,
>  GL_DEPTH_COMPONENT, GL_FLOAT);
>
>  m_prerenderCamera->attach(Camera::DEPTH_BUFFER, m_shadowImage.get());
>  m_prerenderCamera->addChild(m_maskingScene.get());
>
>  m_shadowMap->setImage(m_shadowImage.get());
>  m_prerenderCamera->setPostDrawCallback(new CameraCallback(m_shadowImage));
>
>  m_shadowMap->setWrap(osg::Texture::WRAP_S, osg::Texture::CLAMP_TO_BORDER);
>  m_shadowMap->setWrap(osg::Texture::WRAP_T, osg::Texture::CLAMP_TO_BORDER);
>  m_shadowMap->setWrap(osg::Texture::WRAP_R, osg::Texture::CLAMP_TO_BORDER);
>  {
>   StateSet* ss = m_projectedScene->getOrCreateStateSet();
>   ss->setTextureAttributeAndModes(m_shadowUnit, m_shadowMap.get(),
>  StateAttrib
>   ss->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
>   ss->setMode(GL_BLEND, osg::StateAttribute::ON);
>  }
>  ___
>  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] Grabbing depth buffer from pre-render camera?

2008-04-28 Thread Jason Ziglar
I've got a camera set up to perform a pre-render pass, so I can generate 
a shadow map for the scene of interest. I have verified that the camera 
is running via the PostDrawCallback, but the resulting image is the same 
even though the scene is changing between images. The PostDrawCallback 
merely calls dirty() on the image - this code results in a static image. 
Anyone have any clues what is wrong with this code?

Thanks in advance,


ref_ptr m_prerenderCamera;
ref_ptr m_shadowImage;
ref_ptr m_shadowMap;
const int TextureSize = 1024; 
m_prerenderCamera->setRenderTargetImplementation(Camera::FRAME_BUFFER_OBJECT);
m_prerenderCamera->setClearColor(Vec4(1.0f, 0.0f, 1.0f, 1.0f));
m_prerenderCamera->setClearMask(GL_DEPTH_BUFFER_BIT  | GL_COLOR_BUFFER_BIT);
  m_prerenderCamera->setComputeNearFarMode(Camera::DO_NOT_COMPUTE_NEAR_FAR);

m_prerenderCamera->setReferenceFrame(Transform::ABSOLUTE_RF);
m_prerenderCamera->setProjectionMatrixAsPerspective(90.0, 1024.0/768.0, 
1.0, 100.0);
m_prerenderCamera->setViewMatrix(Matrix::identity());
m_prerenderCamera->setViewport(0, 0, TextureSize, TextureSize);
m_prerenderCamera->setRenderOrder(Camera::PRE_RENDER);

  {
StateSet* ss = m_prerenderCamera->getOrCreateStateSet();

osg::Depth* depth = new osg::Depth;
ss->setAttributeAndModes(depth, StateAttribute::ON);
  }

m_shadowImage->allocateImage(TextureSize, TextureSize, 1, 
GL_DEPTH_COMPONENT, GL_FLOAT);

m_prerenderCamera->attach(Camera::DEPTH_BUFFER, m_shadowImage.get());
m_prerenderCamera->addChild(m_maskingScene.get());

m_shadowMap->setImage(m_shadowImage.get());
m_prerenderCamera->setPostDrawCallback(new CameraCallback(m_shadowImage));

m_shadowMap->setWrap(osg::Texture::WRAP_S, osg::Texture::CLAMP_TO_BORDER);
m_shadowMap->setWrap(osg::Texture::WRAP_T, osg::Texture::CLAMP_TO_BORDER);
m_shadowMap->setWrap(osg::Texture::WRAP_R, osg::Texture::CLAMP_TO_BORDER);
{
  StateSet* ss = m_projectedScene->getOrCreateStateSet();
  ss->setTextureAttributeAndModes(m_shadowUnit, m_shadowMap.get(), 
StateAttrib
  ss->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
  ss->setMode(GL_BLEND, osg::StateAttribute::ON);
}
___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org