Jump to content

  • Log In with Google      Sign In   
  • Create Account


Semi Transparent front edges


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
4 replies to this topic

#1 PaulP   Members   -  Reputation: 122

Like
Likes
Like

Posted 08 July 2001 - 03:39 AM

***WARNING OpenGL NEWBIE WARNING*** I have a small problem with my simple pyramid, after tyding up my code, i have now find that the nearest face of my test pyramid as become semi transpaent. I have switched on culling, but it is set to GL_BACK so the rearmost faces should be invisible so iam sure this is not the problem Any ideas as to why??? Thanks

Sponsor:

#2 grady   Members   -  Reputation: 122

Like
Likes
Like

Posted 08 July 2001 - 04:14 AM

Can you post the code?

#3 PaulP   Members   -  Reputation: 122

Like
Likes
Like

Posted 08 July 2001 - 06:32 AM

There is quite a bit as it is class based!!

This is a striped down version

But all of my Projection matrice and modelview matrices are within these 3 functions.

void CCamera::UpdateLocation(void)
{
CVector look;
look = m_vPos - m_vLook;
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(m_vPos.m_fX, m_vPos.m_fY, m_vPos.m_fZ,
look.m_fX, look.m_fY, look.m_fZ,
m_vUp.m_fX, m_vUp.m_fY, m_vUp.m_fZ);
}

void CCamera::UpdateLens(void)
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(m_fFov, m_fAspect, m_fNear, m_fFar);
glMatrixMode(GL_MODELVIEW);
}

void CCamera::SetViewPort(UINT width, UINT height)
{
if(height == 0)
height = 1;
m_fAspect = float(width)/float(height);
glViewport(0, 0, width, height);
}

and the initialisation code is in the following 2 functions

void CWinMain::OneTimeInit()
{
//Set the shading system to smooth
glShadeModel(GL_SMOOTH);

//set the backgraound colour to black
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

//prepare the depth buffer
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);

//set the perspective correction to best
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

//enable back face culling
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
}

bool CWinMain::InitOpenGLWindow(void)
{
//get the windows device context
m_hDC = GetDC(m_hWnd);
if(!m_hDC)
return false;

//setup the desired pixelformat structure
PIXELFORMATDESCRIPTOR pfd;
memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR));
pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
pfd.nVersion = 1;
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 16;
pfd.cDepthBits = 16;
pfd.iLayerType = PFD_MAIN_PLANE;

//test the Desired pixel format
GLuint pixelformat = ChoosePixelFormat(m_hDC, &pfd);
if(!pixelformat)
return false;

//set the desired pixel format
if(!SetPixelFormat(m_hDC, pixelformat, &pfd))
return false;

//create the render context
m_hRC = wglCreateContext(m_hDC);
if(!m_hRC)
return false;

//set it to the window
if(!wglMakeCurrent(m_hDC, m_hRC))
return false;

return true;
}

The code initialisation is in the following order

CreateCamera() //pseudocode
CreateWindow() //pseudocode
OneTimeInit();
InitOpenGLWindow();
m_pCamera->SetViewPort(m_uWidth, m_uHeight);
m_pCamera->UpdateLens();


in the message loop i call the following code

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
m_pCamera->UpdateLocation();
glTranslatef(0.0f, 0.0f, -6.0f);
glBegin(GL_TRIANGLES);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3f( 0.0f, 1.0f, 0.0f);
glColor3f(0.0f, 1.0f, 0.0f);
glVertex3f(-1.0f,-1.0f, 1.0f);
glColor3f(0.0f, 0.0f, 1.0f);
glVertex3f( 1.0f,-1.0f, 1.0f);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3f( 0.0f, 1.0f, 0.0f);
glColor3f(0.0f, 0.0f, 1.0f);
glVertex3f( 1.0f,-1.0f, 1.0f);
glColor3f(0.0f, 1.0f, 0.0f);
glVertex3f( 1.0f,-1.0f, -1.0f);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3f( 0.0f, 1.0f, 0.0f);
glColor3f(0.0f, 1.0f, 0.0f);
glVertex3f( 1.0f,-1.0f, -1.0f);
glColor3f(0.0f, 0.0f, 1.0f);
glVertex3f(-1.0f,-1.0f, -1.0f);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3f( 0.0f, 1.0f, 0.0f);
glColor3f(0.0f, 0.0f, 1.0f);
glVertex3f(-1.0f,-1.0f,-1.0f);
glColor3f(0.0f, 1.0f, 0.0f);
glVertex3f(-1.0f,-1.0f, 1.0f);
glEnd();
SwapBuffers(m_hDC);

If anyone is willing to look at the whole lot (ony 2 classes) then email mne i will send them over

Thanks


#4 zedzeek   Members   -  Reputation: 528

Like
Likes
Like

Posted 09 July 2001 - 11:01 AM

by semitransparent do u mean a piece of the front triangle has been ''cut away'' if so try making your near clipplane smaller or move the camera further away from the pyramid

http://members.xoom.com/myBollux

#5 PaulP   Members   -  Reputation: 122

Like
Likes
Like

Posted 10 July 2001 - 12:25 AM

No, i was getting a really weird effect, the certain triangles in the scene where being draw semi transaprent, lietraly!!

But i fixed it so thanks anyway, and no matter!!

for reference i was calling my one time scene init function before preparing the window for OpenGL, and it appears that it did not like being done this way. When i switched the function calls around so the render cotntext ect was initialised before the OpenGL preferences (such as GL_SMOOTH, and depth test stuff was set up it worked just fine!

But thanks anyway guys!!




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS