Jump to content
  • Advertisement
Sign in to follow this  
cutovoi

OpenGL Transparency problems in 3D models inOpenGL

This topic is 4275 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi fellows I'm writing a program that loads 3ds files. I want to add transparent in some 3ds. My code to init the OpenGL is this
void InitializeGL()
{
   glCullFace(GL_BACK);
   glEnable(GL_CULL_FACE);
   glEnable(GL_DEPTH_TEST);
   glShadeModel(GL_SMOOTH);
   glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
   glClearColor(0.0, 0.0, 0.0, 0.0);
   glClearDepth(1.0f);
   glDepthFunc(GL_LEQUAL);
   glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
   glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
   glLightfv(GL_LIGHT1, GL_AMBIENT, fAmbientLight);
   glLightfv(GL_LIGHT1, GL_DIFFUSE, fDiffuseLight);
   glLightfv(GL_LIGHT1, GL_POSITION, fPositionLight);
   glEnable(GL_LIGHT1);
   glEnable(GL_LIGHTING);
   glBlendFunc(GL_SRC_ALPHA, GL_ONE);
   glColor4f(1.0, 1.0, 1.0, fAlphaFactor); //fAlphaFactor is 0.5
}

My code for draw the 3ds in screen is this:
/*Desenha na tela*/
void Object3DS::DrawObject3DS()
{
   glPushMatrix();
	  glPushAttrib(GL_CURRENT_BIT|GL_ENABLE_BIT);
	     glEnable(GL_BLEND);
	     glDisable(GL_DEPTH_TEST);
		 if(m_bTranslate)
		 {
		    TranslationMatrix(&this->model.Objects[0].TranslationMatrix, fTransX, fTransY, fTransZ);
		    glMultMatrixf(&this->model.Objects[0].TranslationMatrix.theMatrix[0][0]);
			fTransX = fTransY = fTransZ = 0.0f;
		 }
		 if(m_bRotate)
		 {
		    RotationMatrix(&this->model.Objects[0].RotationMatrix, fRotX, fRotY, fRotZ);
            glMultMatrixf(&this->model.Objects[0].RotationMatrix.theMatrix[0][0]);
			fRotX =fRotY = fRotZ = 0.0f;
		 }
         glCallList(m_uiIDDisplayList);
	     glEnable(GL_DEPTH_TEST);
	     glDisable(GL_BLEND);
      glPopAttrib();
   glPopMatrix();

   
}

//Below this is my function that creates a display list
void Object3DS::GenObjectDisplayList()
{
   m_uiIDDisplayList = glGenLists(1);
   glNewList(m_uiIDDisplayList, GL_COMPILE);
      this->model.Draw();  //function that does the calcs to draw the 3ds file
   glEndList();
}

My code works fine. When I add transparency in my 3ds models, some parts receives light. Look at the picture below: Image Hosted by ImageShack.us Like you've seen in my code, the light source is in my InitializeGL, not in the object. I just want that my object stay transparent without light. If I moves the object in the place where are other object the transparency are being VERY strange. It seems the objects have a light. Look at this picture: Image Hosted by ImageShack.us I don't understand this thing too. Someone can explains how can I solve this?

Share this post


Link to post
Share on other sites
Advertisement
You're using additive blending, so whatever you draw is added to the color value already in the frame buffer. I assume you want interpolation, so change the second blend function parameter to GL_ONE_MINUS_SRC_ALPHA.

However, you then make the primitives drawing order dependent, as interpolation blending depends on what primitive is drawn first. The primitives further away must be drawn first. So display lists, which is for static geometry, is not a possible tool anymore.

Share this post


Link to post
Share on other sites
Brother Bob, what I exactly want is shown in the image below:

Image Hosted by ImageShack.us

You've noticed that there are any "lighting points" in this cube, in my human model there are some(see the ears, armpits and other parts). What I want is a uniform transparency like in the cube. I use GL_ONE_MINUS_SRC_ALPHA in the 2nd parameter, but, in the first? I made some tests and all of them remains with this problem("lighting points" in some place of the model).

Share this post


Link to post
Share on other sites
u need SRC_ALPHA + ONE_MINUS_SRC_ALPHA
u also need depth writes off ie glDepthMask(0);
and draw the polygons in the right order ie from furtherest to closest

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!