Beispiel #1
0
void
GlfSimpleMaterial::Bind()
{
    glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, GetAmbient().GetArray());
    glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, GetDiffuse().GetArray());
    glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, GetSpecular().GetArray());
    glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, GetEmission().GetArray());
    glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, GetShininess());
}
Beispiel #2
0
void Light::SetupLight(int lightIndex){
    glEnable(GL_LIGHT0+lightIndex);
    // Setup and enable light 0
    glLightfv(GL_LIGHT0+lightIndex,GL_AMBIENT, glm::value_ptr(GetAmbient()));
    glLightfv(GL_LIGHT0+lightIndex,GL_DIFFUSE, glm::value_ptr(GetDiffuse()));
    glLightfv(GL_LIGHT0+lightIndex,GL_SPECULAR, glm::value_ptr(GetSpecular()));
	glLighti(GL_LIGHT0+lightIndex, GL_SPOT_CUTOFF, spotCutoff); 
	glLightfv(GL_LIGHT0+lightIndex,GL_SPOT_DIRECTION, glm::value_ptr(spotDirection));
    float w = 0;
    if (GetLightType()==PointLight){
        w = 1;
    } else if (GetLightType()==DirectionalLight){
        w = 0;
    }
    SceneObject *sceneObject = GetOwner();
    assert(sceneObject != NULL);
    glm::vec4 lightPos(sceneObject->GetTransform()->GetPosition(), w);

    glLightfv(GL_LIGHT0+lightIndex,GL_POSITION, glm::value_ptr(lightPos));
}
Beispiel #3
0
//????????????????????????????????????????????????????????????????????????
// The stdID parameter doesn't really have a meaning in this case.
// 
bool Matte::EvalMonoStdChannel
( 
   ShadeContext& sc, // describes context of evaluation
   int stdID,           // must be ID_AM, ect
   float& outVal        // output var
)
{
   switch ( stdID )
   {
      case ID_BU: // Bump (value 8)
      case ID_RR: // Refraction (value 10)
      case ID_DP: // Displacement (value 11)
      case ID_SI: // Self-illumination (value 5)
      case ID_FI: // Filter color (value 7)
         return false;
         break;

      case ID_RL: // Reflection (value 9)
         if ( sc.doMaps &&
                reflmap && 
                useReflMap && 
                reflmap->IsOutputMeaningful(sc) ) 
         {
            if ( reflmap->HandleOwnViewPerturb() ) 
            {
               sc.TossCache(reflmap);
               outVal = reflmap->EvalMono(sc);
            }
            else 
            {
               AColor rcol;
               rcol = sc.EvalEnvironMap( reflmap, sc.ReflectVector() );
               Color rc;
               rc = Color(rcol.r,rcol.g,rcol.b)*reflAmt;
               outVal = Intens(rc);
            }
         }
         else
            return false;
      break;

      case ID_AM: // Ambient (value 0)
         outVal = Intens( GetAmbient() );
         break;
      
      case ID_DI: // Diffuse (value 1)
         outVal = Intens( GetDiffuse() );
         break;
      
      case ID_SP: // Specular (value 2)
         outVal = Intens( GetSpecular() );
         break;
      
      case ID_SH: // Shininess (value 3).  In R3 and later this is called Glossiness.
         outVal = GetShininess();
         break;

      case ID_SS: // Shininess strength (value 4).  In R3 and later this is called Specular Level.
         outVal = GetShinStr();
         break;

      case ID_OP: // Opacity (value 6)
         outVal = GetXParency();
         break;

      default:
         // Should never happen
         //DbgAssert( false );
         return false;
         break;
   }
   return true;
}
void MaterialHandler::ProcessData(FbxSurfaceMaterial* pMaterial, unsigned int materialCount, MaterialExport* outputMat, SceneMap* sceneMap)
{
	MaterialHeader materialStruct;
	
	
	//diffuse property
	FbxProperty diffProp = pMaterial->FindProperty(FbxSurfaceMaterial::sDiffuse);
	unsigned int diffMapCount = diffProp.GetSrcObjectCount<FbxFileTexture>();
	
	memcpy(materialStruct.matName, pMaterial->GetName(), sizeof(char) * 256);

	materialStruct.Id = sceneMap->materialHash[pMaterial->GetName()];
	//check if there are texturemaps
	if (diffMapCount > 0)
	{
		memcpy(materialStruct.diffMap, GetTextureMap(diffProp), sizeof(char) * 256);
		materialStruct.diffuseVal[0] = 0.0f;
		materialStruct.diffuseVal[1] = 0.0f;
		materialStruct.diffuseVal[2] = 0.0f;
	}
	else
	{
		GetDiffuse(pMaterial, materialStruct.diffuseVal);
		memcpy(materialStruct.diffMap, "", sizeof(char) * 256);
	}

	//SpecularProperty
	FbxProperty specProp = pMaterial->FindProperty(FbxSurfaceMaterial::sSpecular);
	unsigned int specMapCount = specProp.GetSrcObjectCount<FbxFileTexture>();
	FbxSurfacePhong* tmpCompare = (FbxSurfacePhong*)pMaterial;
	if (specMapCount > 0)
	{
		memcpy(materialStruct.specMap, GetSpecularMap(specProp), sizeof(char) * 256);
		materialStruct.specularVal[0] = 0.0f;
		materialStruct.specularVal[1] = 0.0f;
		materialStruct.specularVal[2] = 0.0f;
		
	}
	else
	{
		if (pMaterial->GetClassId().Is(FbxSurfacePhong::ClassId))
		{
			GetSpecular(pMaterial, materialStruct.specularVal);
			memcpy(materialStruct.specMap, "", sizeof(char) * 256);
		}
		else
		{
			materialStruct.specularVal[0] = 0.0f;
			materialStruct.specularVal[1] = 0.0f;
			materialStruct.specularVal[2] = 0.0f;
			memcpy(materialStruct.specMap, "", sizeof(char) * 256);
		}

	}

	//NormalMap properties
	FbxProperty normMapProp = pMaterial->FindProperty(FbxSurfaceMaterial::sNormalMap);
	unsigned int normMapCount = normMapProp.GetSrcObjectCount<FbxFileTexture>();

	if (normMapCount > 0)
	{
		memcpy(materialStruct.normalMap, GetNormalMap(normMapProp), sizeof(char) * 256);
	}
	else
	{

		memcpy(materialStruct.normalMap, "", sizeof(char) * 256);
	}

	//GlowMap proporties
	
	FbxProperty glowMapProp = pMaterial->FindProperty(FbxSurfaceMaterial::sEmissive);
	unsigned int glowMapCount = glowMapProp.GetSrcObjectCount<FbxFileTexture>();

	if (glowMapCount > 0)
	{
		memcpy(materialStruct.glowMap, GetGlowMap(glowMapProp), sizeof(char) * 256);
	}
	else
	{
		memcpy(materialStruct.glowMap, "", sizeof(char) * 256);
	}

	outputMat->materials->push_back(materialStruct);
	std::cout << "";
	
}