void C09AphInterfaceGL::AphBeginFrame(bool clearcolor)
/*
<=============================================================================>
DESCRIPTION:
Prepares everything to start drawing. Calculates the view frustum.
HISTORY:
December 2001 - Implemented by MI.
<=============================================================================>
/
{
//------------------------- SELECT HANDLE -------------------------
//wglMakeCurrent(WinDC,RC);
//------------------------- LOAD BASEMATRIX -------------------------
glLoadIdentity();
//------------------------- BACK IT UP -------------------------
glPushMatrix();
//------------------------- SET CLEARCOLOR TO BLACK -------------------------
glClearColor(0,0,0,1);
//------------------------- CLEAR Z AND IF WANTED ALSO COLORBUFFER -------------------------
glClear((clearcolorGL_COLOR_BUFFER_BIT) | GL_DEPTH_BUFFER_BIT);
//------------------------- SET MATRIX-MODE -------------------------
glMatrixMode(GL_MODELVIEW);
//------------------------- SET DISPLAYREGION IN COLORBUFFER -------------------------
glViewport(0,0,mdwClientWidth,mdwClientHeight);
//------------------------- ENABLE DEPTHTEST -------------------------
glEnable(GL_DEPTH_TEST);
//------------------------- CALCULATE AND SET FRUSTUM -------------------------
mfFrTop = mfClipNear*(float)tan((mfAugYAngle/2.f)(pi/180.f));
mfFrRight = mfFrTop(mfAugXAngle/mfAugYAngle);
mfFrBottom = -mfFrTop;
mfFrLeft = -mfFrRight;
glFrustum(mfFrLeft,mfFrRight,mfFrBottom,mfFrTop,mfClipNear,mfClipFar);
};
int C09AphInterfaceGL::AphSelectMaterial(C09AphMaterial material)
/
<=============================================================================>
DESCRIPTION:
Selects a material, does the selection of textures, loads the needed scripts,
sets the material lighting properties and so on.
HISTORY:
31.03.02 - Implemented by MI
<=============================================================================>
*/
{
int i;
//do texture settings
for(i=0; i<4; i++)
{
if(mdwActTextures[i]!=material->mTextures[i].mdwTexture)
{
AphSetTexSlot(i);
AphSelectTexture(material->mTextures[i].mdwTexture);
};
AphSetBlendMode(i,material->mTextures[i].BlendMode);
};
//if ambient = 255, the object is totally self lighting and the lighting will be disabled
if(material->mcAmbient.mc[3]==255)
{
if(mdwActualFlags&afLighting)
AphSetFlags(mdwActualFlags-afLighting);
}
else
{
if(!(mdwActualFlags&afLighting))
AphSetFlags(mdwActualFlags|afLighting);
float t[4];
int i;
//ambient
for(i=0;i<4;i++)
t[i]=(material->mcAmbient.mc[i]-((i==3)*127))/(128.0*(1+(i!=3)));
glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT,t);
//diffuse
for(i=0;i<4;i++)
t[i]=(material->mcDiffuse.mc[i]-((i==3)*127))/(128.0*(1+(i!=3)));
glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,t);
//specular
for(i=0;i<4;i++)
t[i]=(material->mcSpecular.mc[i]-((i==3)*127))/(128.0*(1+(i!=3)));
glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,t);
//emission
for(i=0;i<4;i++)
t[i]=(material->mcEmission.mc[i]-((i==3)*127))/(128.0*(1+(i!=3)));
glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,t);
//shininess
t[0]=(material->mucShininess)/512;
glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,t[0]);
};
return 0;
};
The light is enabled for sure and I also didn’t change the observers or objects position, there’s not any single translate or rotate call before the light is set, also not after. To be exactly, here the properties the material is set with:
Ambient : 0.31,0.31,0.31,0.992
Diffuse : 0.99,0.99,0.99,1.0
Specular : 0,0,0,0
Emission : 0,0,0,1
Shininess : 0
Well, if I shouldn’t find it out myself or with help from here within the next days, I’ll post here a little demo about it… mysterious…
Michael
[This message has been edited by BlackJack (edited 04-14-2002).]