3DS and Transparency

Started by
3 comments, last by cutovoi 17 years, 5 months ago
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? [Edited by - LessBread on November 7, 2006 1:17:41 PM]
Advertisement
This is the expected behavior.

With blending ("transparency") enabled, a particular fragment's (pixel's) color value is blended via some mathematical equation with the color already existing at that point in the framebuffer. The places where you are observing a "lightening" effect are places where the objects overlap from the point of view of the eye.

The armpits and ears of the human model display this, but the example image where the lungs are placed in front of the torso displays it the best. The torso was rendered first, so its color is in the framebuffer. When the pixels of the lungs are rendered overtop the torso, their reddish color is blended with the skin tones already in the framebuffer, perhaps yielding a net increase in luminance.

You can tweak the appearance of the blending by modifying the parameters to glBlendFunc. In particular, you pass GL_ONE as the destination factor currently; that will cause the the blending equation to use the full magnitude of the destination color, added to the alpha-scaled source color value. This will approach (and eventually exceed) 1.0 in all components very quickly. Try, for example, setting the second parameter to GL_ONE_MINUS_SRC_ALPHA, or any other value (detailed on the page I linked to) to experiment until you find the result you like.
well.. I'll try. If I don't get the results I'll post again. Tks
note: I added a title to the thread
"I thought what I'd do was, I'd pretend I was one of those deaf-mutes." - the Laughing Man
what I exatly want is this:

Image Hosted by ImageShack.us

all the shape is transparent not some parts... so how can I do this??

This topic is closed to new replies.

Advertisement