[vtkusers] how to mask depth buffer correctly?

刘卓 polinzhuo at 163.com
Mon Dec 18 22:07:46 EST 2006


Hi all:

         I’m working for an arithmetic, in which depth buffer must be
masked and an object is rendered on stencil buffer at the same time.

I have overloaded the function vtkOpenGLActor:: Render(vtkRenderer *ren,
vtkMapper *mapper) like codes below. But after running the function, the
content of depth buffer is clear by 1(there are some values which is not 1
in depth buffer ). Why? And how to mask depth buffer correctly?

void vtkMyActor::SetDepthMask(bool bmask)

{

         this->m_bDepthMask = bmask;

}

bool vtkMyActor::GetDepthMask()

{

         return this->m_bDepthMask;

}

 

// Actual actor render method.

void vtkMyActor::Render(vtkRenderer *ren, vtkMapper *mapper)

{

//  float opacity;

//

//  // get opacity

//  opacity = this->GetProperty()->GetOpacity();

//  if (opacity == 1.0)

//    {

//    glDepthMask (GL_TRUE);

//    }

//  else

//    {

//    // add this check here for GL_SELECT mode

//    // If we are not picking, then don't write to the zbuffer

//    // because we probably haven't sorted the polygons. If we

//    // are picking, then translucency doesn't matter - we want to

//    // pick the thing closest to us.

//    GLint param[1];

//    glGetIntegerv(GL_RENDER_MODE, param);

//    if(param[0] == GL_SELECT )

//      {

//      glDepthMask(GL_TRUE);

//      }

//    else

//      {

//      glDepthMask (GL_FALSE);

//      }

//    }

         if(!m_bDepthMask)

               glDepthMask (GL_FALSE);

 

  // build transformation 

  if (!this->IsIdentity)

    {

    double *mat = this->GetMatrix()->Element[0];

    double mat2[16];

    mat2[0] = mat[0];

    mat2[1] = mat[4];

    mat2[2] = mat[8];

    mat2[3] = mat[12];

    mat2[4] = mat[1];

    mat2[5] = mat[5];

    mat2[6] = mat[9];

    mat2[7] = mat[13];

    mat2[8] = mat[2];

    mat2[9] = mat[6];

    mat2[10] = mat[10];

    mat2[11] = mat[14];

    mat2[12] = mat[3];

    mat2[13] = mat[7];

    mat2[14] = mat[11];

    mat2[15] = mat[15];

    

    // insert model transformation 

    glMatrixMode( GL_MODELVIEW );

    glPushMatrix();

    glMultMatrixd(mat2);

    }

  

  // send a render to the mapper; update pipeline

  mapper->Render(ren,this);

 

  // pop transformation matrix

  if (!this->IsIdentity)

    {

    glMatrixMode( GL_MODELVIEW );

    glPopMatrix();

    }

  

//  if (opacity != 1.0)

//    {

//    glDepthMask (GL_TRUE);

//    }

       if(!m_bDepthMask)

               glDepthMask (GL_TRUE);

 

}

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20061219/a8550056/attachment.htm>


More information about the vtkusers mailing list