예제 #1
0
파일: Cg.cpp 프로젝트: EwgB/frontier-net
static void fshader_select (int select_in)
{
  
  FShader*      s;
  Env*          e;
   
  fshader_selected = select_in - FSHADER_BASE;
  if (fshader_selected == -1 || !CVarUtils::GetCVar<bool> ("render.textured")) {
    cgGLDisableProfile (cgp_fragment);
    return;
  }
  if (!CVarUtils::GetCVar<bool> ("render.shaders"))
    return;
  s = &fshader_list[fshader_selected];
  e = EnvGet ();
  cgGLEnableProfile (cgp_fragment);
  cgGLBindProgram (s->program);
  if (select_in == FSHADER_CLOUDS) {
    GLrgba c = (e->color[ENV_COLOR_SKY] + e->color[ENV_COLOR_HORIZON]) / 2.0f;
    cgGLSetParameter3f (s->fogcolor, c.red, c.green, c.blue);
  } else
    cgGLSetParameter3f (s->fogcolor, e->color[ENV_COLOR_FOG].red, e->color[ENV_COLOR_FOG].green, e->color[ENV_COLOR_FOG].blue);
  cgGLSetTextureParameter (s->texture, TextureIdFromName ("clouds.png"));
  cgGLSetParameter4f (s->data, wind, e->cloud_cover, 1 - e->star_fade, 0);
  cgGLEnableTextureParameter (s->texture);

}
void OpenMDLmodel::EnableMaterial( OpenMDL::Material* material )
{
	OpenMDL::String fullname;

	if( material->HasDiffuseMap() )
	{
		glActiveTextureARB( GL_TEXTURE0_ARB );
		glEnable( GL_TEXTURE_2D );
		char tmps[256];
		sprintf( tmps, "Textures/%s",  material->GetDiffuseMap().GetBuffer() );
		BindTextureByName( tmps );
	}

	glActiveTextureARB( GL_TEXTURE1_ARB );
	if( material->HasSpecularMap() )
	{
		glEnable( GL_TEXTURE_2D );
		fullname = OpenMDL::String("Textures/") + material->GetSpecularMap();
		BindTextureByName( fullname.GetBuffer() );
		cgSetParameter1i( m_UberShader_bSpecularMapping, 1 );
	}
	else
	{
		glDisable( GL_TEXTURE_2D );
		cgSetParameter1i( m_UberShader_bSpecularMapping, 0 );
	}

/*
	glActiveTextureARB( GL_TEXTURE2_ARB );
	if( material->HasNormalMap() )
	{
		glEnable( GL_TEXTURE_2D );
		fullname = OpenMDL::String("Textures/") + material->GetNormalMap();
		BindTextureByName( fullname.GetBuffer() );
		cgSetParameter1i( m_UberShader_bNormalMapping, 1 );
	}
	else
	{
		glDisable( GL_TEXTURE_2D );
		cgSetParameter1i( m_UberShader_bNormalMapping, 0 );
	}
*/

	glActiveTextureARB( GL_TEXTURE0_ARB );

	cgGLSetStateMatrixParameter( m_UberShader_ModelCamProj, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY );
	cgGLSetStateMatrixParameter( m_UberShader_ModelCam, CG_GL_MODELVIEW_MATRIX, CG_GL_MATRIX_IDENTITY );
	cgGLSetParameter3f( m_UberShader_Lightpos_Pixel, m_LightInWorldSpace.x, m_LightInWorldSpace.y, m_LightInWorldSpace.z );
	cgGLSetParameter1f( m_UberShader_Ambient, m_Ambient );
	cgGLSetParameter3f( m_UberShader_CamPos, m_CamPos.x, m_CamPos.y, m_CamPos.z );
	cgGLSetParameter3f( m_UberShader_LightColor, m_LightColor.x, m_LightColor.y, m_LightColor.z );
	cgGLSetMatrixParameterfc( m_UberShader_WorldCam, m_WorldCam );
	cgGLSetParameter1f( m_UberShader_SpecularPower, material->GetSpecularCoeff() );
	cgGLSetParameter3f( m_UberShader_ClipPlane_Point, m_ClipPlane_Point.x, m_ClipPlane_Point.y, m_ClipPlane_Point.z );
	cgGLSetParameter3f( m_UberShader_ClipPlane_Normal, m_ClipPlane_Normal.x, m_ClipPlane_Normal.y, m_ClipPlane_Normal.z );

	m_UberShader.EnablePrograms();
}
예제 #3
0
void Cg::SetParameter(CGparameter param,double* f){
	if (param != NULL)
		cgGLSetParameter3f(param, (float)f[0],(float)f[1],(float)f[2]);
	else
	{
		cout<<"CGparameter is null"<<endl;
		abort();
	}
	CheckCgError();
}
예제 #4
0
파일: Cg.cpp 프로젝트: EwgB/frontier-net
void CgSetOffset (GLvector p)
{

  VShader*    s;


  if (vshader_selected == VSHADER_NONE)
    return;
  s = &vshader_list[vshader_selected];
  cgGLSetParameter3f (s->offset, p.x, p.y, p.z);

}
예제 #5
0
파일: Cg.cpp 프로젝트: EwgB/frontier-net
static void vshader_select (int select)
{
  
  VShader*      s;
  GLvector      p;
  Env*          e;
  GLrgba        c;
  float         val1, val2;
     
  vshader_selected = select;
  if (!CVarUtils::GetCVar<bool> ("render.shaders"))
    return;
  if (select == VSHADER_NONE) {
    cgGLDisableProfile (cgp_vertex);
    return;
  }
  val1 = val2 = 0.0f;
  if (select == VSHADER_TREES || select == VSHADER_GRASS) 
    val1 = wind;
  if (select == VSHADER_CLOUDS) 
    val1 = wind / 5;
  s = &vshader_list[select];
  e = EnvGet ();
  cgGLEnableProfile (cgp_vertex);
  cgGLBindProgram (s->program);
  cgGLSetParameter3f (s->lightpos, -e->light.x, -e->light.y, -e->light.z);
  c = e->color[ENV_COLOR_LIGHT];
  cgGLSetParameter3f (s->lightcol, c.red, c.green, c.blue);
  c = e->color[ENV_COLOR_AMBIENT] * glRgba (0.2f, 0.2f, 1.0f);
  cgGLSetParameter3f (s->ambientcol, c.red, c.green, c.blue);
  p = AvatarCameraPosition ();
  cgGLSetParameter3f (s->eyepos, p.x, p.y, p.z);
  cgGLSetStateMatrixParameter(s->matrix, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MODELVIEW_MATRIX);
  cgGLSetParameter2f (s->fog, e->fog.rmin, e->fog.rmax);
  cgGLSetParameter4f (s->data, SceneVisibleRange (), SceneVisibleRange () * 0.05, val1, val2);
  glColor3f (1,1,1);

}
예제 #6
0
void Material::bind()
{
	//bytt til egen shader
	if(m_shaderSys)
		m_shaderSys->enableProfiles();
	
	if(m_vertexShader) {
		m_vertexShader->bind();
		cgGLSetStateMatrixParameter(m_vertexShader->getParameter("worldViewProj"), CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);
		cgGLSetStateMatrixParameter(m_vertexShader->getParameter("worldView"), CG_GL_MODELVIEW_MATRIX, CG_GL_MATRIX_IDENTITY);
		cgGLSetParameter4f(m_vertexShader->getParameter("lightPos"), g_lightPos.x,g_lightPos.y,g_lightPos.z,1);
		cgGLSetMatrixParameterfc(m_vertexShader->getParameter("view"),g_viewMat);
		cgUpdateProgramParameters(m_vertexShader->getProgram());
	}
	if(m_fragmentShader) {
		m_fragmentShader->bind();
		cgGLSetParameter3f(m_fragmentShader->getParameter("col"),m_color.x,m_color.y,m_color.z);
		cgUpdateProgramParameters(m_fragmentShader->getProgram());
	}
}
void CG_initialize(void)
{
    cgVertexProfile		= cgGLGetLatestProfile(CG_GL_VERTEX);
	cgFragmentProfile	= cgGLGetLatestProfile(CG_GL_FRAGMENT);
	
    cgGLSetOptimalOptions(cgVertexProfile);
	cgGLSetOptimalOptions(cgFragmentProfile);
    
    cgContext           = cgCreateContext();
    
    cgVertexProgram = cgCreateProgramFromFile(cgContext,
                                              CG_SOURCE,
                                              "CG_ENVIRO_MAPPING/oglu_per_vertex_reflective_environment_mapping_vs.cg",
                                              cgVertexProfile, 
                                              NULL, 
                                              NULL);	
cgGLLoadProgram(cgVertexProgram);
enviroCgVertexParam_lightPosition =  cgGetNamedParameter(cgVertexProgram, "lightPosition");
enviroCgVertexParam_globalAmbient =  cgGetNamedParameter(cgVertexProgram, "globalAmbient");    
enviroCgVertexParam_lightColor    =  cgGetNamedParameter(cgVertexProgram, "lightColor");  
//enviroCgVertexParam_Ke            =  cgGetNamedParameter(cgVertexProgram, "Ke");
enviroCgVertexParam_Ka            =  cgGetNamedParameter(cgVertexProgram, "Ka");    
enviroCgVertexParam_Kd            =  cgGetNamedParameter(cgVertexProgram, "Kd");  
enviroCgVertexParam_Ks            =  cgGetNamedParameter(cgVertexProgram, "Ks");
enviroCgVertexParam_shininess     =  cgGetNamedParameter(cgVertexProgram, "shininess"); 
enviroCgVertexParam_time     =  cgGetNamedParameter(cgVertexProgram, "time"); 
    


    cgModelViewProj = cgGetNamedParameter(cgVertexProgram, "ModelViewProj");
	cgModelView		= cgGetNamedParameter(cgVertexProgram, "ModelView");
	cgModelViewI	= cgGetNamedParameter(cgVertexProgram, "ModelViewI");
	cgModelViewIT	= cgGetNamedParameter(cgVertexProgram, "ModelViewIT");
	cgPosition		= cgGetNamedParameter(cgVertexProgram, "position");
	cgNormal		= cgGetNamedParameter(cgVertexProgram, "N");
	cgTexcoords		= cgGetNamedParameter(cgVertexProgram, "texCoord");
	cgEyePosition	= cgGetNamedParameter(cgVertexProgram, "eyePosition");
	
	cgGLSetParameter3f(cgEyePosition, 0, 0, 0);
    

    
    
   




    cgFragmentProgram = cgCreateProgramFromFile(cgContext, 
                                                CG_SOURCE, 
                                                "CG_ENVIRO_MAPPING/oglu_per_vertex_reflective_environment_mapping_ps.cg",
											    cgFragmentProfile, 
                                                NULL, 
                                                NULL );
    cgGLLoadProgram(cgFragmentProgram);

    
    cgEnvironmentMap = cgGetNamedParameter(cgFragmentProgram, "environmentMap");
    loadCubeMap();
    cgGLSetTextureParameter(cgEnvironmentMap, cubemapTexture[0]);
}
예제 #8
0
static void gl_cg_set_uniform_parameter(
      void *data,
      struct uniform_info *param,
      void *uniform_data)
{
   CGparameter location;
   cg_shader_data_t *cg        = (cg_shader_data_t*)data;

   if (!param || !param->enabled)
      return;

   if (param->lookup.enable)
   {
      char ident[64];
      CGprogram prog = 0;

      switch (param->lookup.type)
      {
         case SHADER_PROGRAM_VERTEX:
            prog = cg->prg[param->lookup.idx].vprg;
            break;
         case SHADER_PROGRAM_FRAGMENT:
         default:
            prog = cg->prg[param->lookup.idx].fprg;
            break;
      }

      if (param->lookup.add_prefix)
         snprintf(ident, sizeof(ident), "IN.%s", param->lookup.ident);
      location = cgGetNamedParameter(prog, param->lookup.add_prefix ? ident : param->lookup.ident);
   }
   else
   {
      struct uniform_cg *cg_param = (struct uniform_cg*)uniform_data;
      location = cg_param->loc;
   }

   switch (param->type)
   {
      case UNIFORM_1F:
         cgGLSetParameter1f(location, param->result.f.v0);
         break;
      case UNIFORM_2F:
         cgGLSetParameter2f(location, param->result.f.v0, param->result.f.v1);
         break;
      case UNIFORM_3F:
         cgGLSetParameter3f(location, param->result.f.v0, param->result.f.v1,
               param->result.f.v2);
         break;
      case UNIFORM_4F:
         cgGLSetParameter4f(location, param->result.f.v0, param->result.f.v1,
               param->result.f.v2, param->result.f.v3);
         break;
      case UNIFORM_1FV:
         cgGLSetParameter1fv(location, param->result.floatv);
         break;
      case UNIFORM_2FV:
         cgGLSetParameter2fv(location, param->result.floatv);
         break;
      case UNIFORM_3FV:
         cgGLSetParameter3fv(location, param->result.floatv);
         break;
      case UNIFORM_4FV:
         cgGLSetParameter3fv(location, param->result.floatv);
         break;
      case UNIFORM_1I:
         /* Unimplemented - Cg limitation */
         break;
   }
}
void Effect::setParam( const char *_name, float _x, float _y, float _z ) {
  CGparameter param = cgGetNamedEffectParameter( effect, _name );
  cgGLSetParameter3f( param, _x, _y, _z );
}
예제 #10
0
	void	IOGLBaseShader::SetUniform(const CString& strName, const Math::CVector3D& vValue){
		cgGLSetParameter3f(this->GetParameter(strName), vValue.X, vValue.Y, vValue.Z);
	}
예제 #11
0
void Application::DrawGLScene ()
{
	int TimeDelta = GetTickCount () - gTime;
	gTime = GetTickCount ();

	// Do shaders
	static float wave_movement = 0.0f;
	wave_movement += 0.03f; // Increment our wave movement
	if (wave_movement > 6.2831853071) // Prevent crashing
		wave_movement = 0.0f;
	cgGLSetParameter3f(mWave, wave_movement, 1.0f, 1.0f);

	IVector SunDirection = mpEngine->GetSunlightVector ();
	cgGLSetParameter3f (mSunVector, SunDirection.GetX (), SunDirection.GetY (),
											SunDirection.GetZ ());

    mpFog->Draw ();

    mpEngine->Draw ();
		mpEngine->GetParticleManager ()->UpdateAndDrawAll ();
    mpSun->Draw ();

	// Press 'F' for cloud dissipation or 'G' for cloud formation
    if (Keys::FPressed == true)
    {
        mpCloudManager->Form (0.0f, 6000, 10000);
    }
    if (Keys::GPressed == true)
    {
        mpCloudManager->Form (100.0f, 6000, 10000);
    }
		
	// Turn wind on or off
    static bool MovedL = false;
    if (Keys::LeftPressed == true && MovedL == false)
    {
        mpSceneManager->mWind.MoveX (-2.0f);
        MovedL = true;
    }
    static bool MovedR = false;
    if (Keys::RightPressed == true && MovedR == false)
    {
        mpSceneManager->mWind.SetXYZ (0.0f, 0.0f, 0.0f);
        MovedR = true;
    }

	// Make our two boxes crash into each other
	if (mpPolyObj0->Collision (mpPolyObj1) == false)
    {
        mpPolyObj0->Translate (0.0f, 0.0f, -0.1f);
        mpPolyObj1->Translate (0.0f, 0.0f,  0.5f);
    }
	// Experimental - move some vertices around after the collision
	else
		mpPolyObj0->MoveVerticesByBoneId(static_cast<char> (0), 0.0f, 0.0f, 0.001f);

	IVector FountainPos = mpEngine->GetTerrain ()->GetWorldPositionAtCoord (134, 190);
	mpFountain->SetOrigin (FountainPos);
	
	// Watch the terrain rise like yeast!
	static float MaxTerrainHeight = -1.5f;
	static bool CloudsAdded = false;
	MaxTerrainHeight += 0.05f;

	if (MaxTerrainHeight < 20.0f)
    {
			mpEngine->GetTerrain ()->SetMaxHeight
				((MaxTerrainHeight >= 1.0f) ? MaxTerrainHeight : 1.0f);
    }
	else
		{
			mpEngine->GetLightManager ()->Translate (gLightNumber, 0.0f, 0.0f, 0.5f);
			if (!CloudsAdded)
				{
					mpCloudManager->AddCloudPuff (50, FountainPos, 1.0f);
					CloudsAdded = true;
				}
		}
	
    mpCloudManager->Draw (mpEngine->GetCamera ());

		// Make our pixmap fade away
    static unsigned char c = 255;
    if (c > 0) c--;
    mpPixmap->SetOpaqueness (c);
    //mpPixmap->Draw ();

		mpFpsCounter->Draw ();
		mpTimeOfDay->Update (TimeDelta);
		mpTimeOfDay->Draw ();
		mpEngine->UpdateProceduralSkybox (mpTimeOfDay);
		mpEngine->Update (TimeDelta);

		// Draw a frames per second counter
		mpFpsCounter->Update (TimeDelta);
		mpFpsCounter->Draw ();
}
예제 #12
0
void Sarge::Render() {
	
	
	
	cgGLBindProgram(vsSargeProgram);
	cgGLEnableProfile(vsSargeProfile);
	CheckForCgError("sarge", "enabling vertex program");
	
	
	cgGLBindProgram(psSargeProgram);
	cgGLEnableProfile(psSargeProfile);
	CheckForCgError("sarge", "enabling pixel program");

//	mSkydome->getSunPos()

	//Vector3 tmpsun = mWorldMode->getSkydome().getSunPos();

	cgGLSetParameter4f(lightPosition, 0.0, 20.0, 0.0, 1.0);
	//cgGLSetParameter4f(lightPosition, tmpsun.GetX(), tmpsun.GetY(), tmpsun.GetZ(), 1.0);
	cgGLSetParameter3f(eyevector, 0.0, 0.0, 5.0);

	cgGLEnableTextureParameter(normalmap);
	cgGLEnableTextureParameter(decalmap);

	/*
	glActiveTextureARB(GL_TEXTURE0_ARB);
	//glEnable(GL_TEXTURE_2D);
	//glBindTexture(GL_TEXTURE_2D, sargeNormalTexture.TextureID);
	glActiveTextureARB(GL_TEXTURE1_ARB);
	//glEnable(GL_TEXTURE_2D);
	//glBindTexture(GL_TEXTURE_2D, sargeColorTexture.TextureID);
	glActiveTextureARB(GL_TEXTURE2_ARB);
	glActiveTextureARB(GL_TEXTURE3_ARB);
	glActiveTextureARB(GL_TEXTURE4_ARB);
	*/

	glDisable(GL_LIGHTING);
	
	


	//Pixel Parameters
	//      cgGLEnableTextureParameter(text1);

	glPushMatrix();

	cgGLSetStateMatrixParameter(lightViewProj, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);

	glTranslatef(mPos.GetX(), mPos.GetY(), mPos.GetZ());
	glRotatef(-mTheta * 180/PI - 90, 0, 1, 0);
	glRotatef(90, 1, 0, 0);
	//glScalef(0.6,0.6,0.6);

	cgGLSetStateMatrixParameter(modelViewProj, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);

	
	
	
	mDriverParticleSystem.Render();
	if(burned) glColor3f(0, 0, 0);
	else glColor3f(1, 1, 1);
	mMeshObject.GLDraw();
	glColor3f(1, 1, 1);
	

	glPopMatrix();
	
	glEnable(GL_LIGHTING);

	
	cgGLDisableProfile(vsSargeProfile);
	cgGLDisableProfile(psSargeProfile);


	
	/*
	//glDisable(GL_TEXTURE_2D);
	glActiveTextureARB(GL_TEXTURE1_ARB);
	glDisable(GL_TEXTURE_2D);
	glActiveTextureARB(GL_TEXTURE2_ARB);
	glDisable(GL_TEXTURE_2D);
	glActiveTextureARB(GL_TEXTURE3_ARB);
	glDisable(GL_TEXTURE_2D);
	glActiveTextureARB(GL_TEXTURE4_ARB);
	glDisable(GL_TEXTURE_2D);
	*/
	
	glActiveTextureARB(GL_TEXTURE0_ARB);

	if(frozen)
	{	FreezeEffectBegin();
			glTranslatef(mPos.GetX(), mPos.GetY(), mPos.GetZ());
			glRotatef(-mTheta * 180/PI - 90, 0, 1, 0);
			glScalef(2.5,2.5,2.5);
			 cgGLSetStateMatrixParameter(vsFreezeEffectMVMatrix, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);
		FreezeEffectEnd(); 

		if(freezeCounter > (16.0f/3.0f) && freezeCounter <= 8.0f)
		{
			glPushMatrix();
				mFreezeParticleSystem.Render(mPos.GetX(), mPos.GetY(), mPos.GetZ(),-mTheta * 180/PI - 90, 0, 1, 0);
			glPopMatrix();
		}
	}
	
	
}