コード例 #1
0
ファイル: world_renderer.cpp プロジェクト: Haris07/zooshi
void WorldRenderer::CreateShadowMap(const corgi::CameraInterface& camera,
                                    fplbase::Renderer& renderer, World* world) {
  float shadow_map_resolution = static_cast<float>(
        world->config->rendering_config()->shadow_map_resolution());
  float shadow_map_zoom = world->config->rendering_config()->shadow_map_zoom();
  float shadow_map_offset =
      world->config->rendering_config()->shadow_map_offset();
  vec3 light_position =
      LoadVec3(world->config->rendering_config()->light_position());
  SetLightPosition(light_position);
  light_camera_.set_viewport_angle(kShadowMapViewportAngle / shadow_map_zoom);
  light_camera_.set_viewport_resolution(
      vec2(shadow_map_resolution, shadow_map_resolution));
  vec3 light_camera_focus =
      camera.position() + camera.facing() * shadow_map_offset;
  light_camera_focus.z() = 0;
  vec3 light_facing = light_camera_focus - light_camera_.position();
  light_camera_.set_facing(light_facing.Normalized());

  // Shadow map needs to be cleared to near-white, since that's
  // the maximum (furthest) depth.
  shadow_map_.SetAsRenderTarget();
  renderer.ClearFrameBuffer(kShadowMapClearColor);
  renderer.SetCulling(fplbase::Renderer::kCullBack);

  depth_shader_->Set(renderer);
  // Generate the shadow map:
  // TODO - modify this so that shadowcast is its own render pass
  for (int pass = 0; pass < corgi::RenderPass_Count; pass++) {
    world->render_mesh_component.RenderPass(pass, light_camera_,
                                            renderer, depth_shader_);
  }
}
コード例 #2
0
ファイル: DirectionalLight.cpp プロジェクト: alanly/comp371
DirectionalLight::DirectionalLight(glm::vec3 position)
{
	SetLightPosition(
		position.x,
		position.y,
		position.z
		);
}
コード例 #3
0
void Environment::NewState()
{
	envStates.push_back( new EnvironmentState );

	// If the states are greater than 2 copy the previous last element
	if( envStates.size() > 1 )
	{
		SetDuration( envStates[envStates.size()-2]->duration );
		SetSkyColor( envStates[envStates.size()-2]->skyColor );
		SetFogColor( envStates[envStates.size()-2]->fogColor );
		SetFogExponent( envStates[envStates.size()-2]->fogExp );
		SetLightColor( envStates[envStates.size()-2]->lightColor );
		SetLightPosition( envStates[envStates.size()-2]->lightPosition );
	}
}
コード例 #4
0
ファイル: GameWindow.cpp プロジェクト: Sp3ct3r2k11/raindrop
bool GameWindow::SetupShaders()
{
	Log::Printf("Setting up shaders...");

	if (glGenVertexArrays && glBindVertexArray)
	{
		glGenVertexArrays(1, &defaultVao);
		glBindVertexArray(defaultVao);
	}


	defaultVertexShader = glCreateShader(GL_VERTEX_SHADER);
	glShaderSource(defaultVertexShader, 1, &vertShader, NULL);
	glCompileShader(defaultVertexShader);

	defaultFragShader = glCreateShader(GL_FRAGMENT_SHADER);
	glShaderSource(defaultFragShader, 1, &fragShader, NULL);
	glCompileShader(defaultFragShader);


	GLint status;
	char buffer[512];

	glGetShaderiv(defaultVertexShader, GL_COMPILE_STATUS, &status);

	glGetShaderInfoLog(defaultVertexShader, 512, NULL, buffer);

	if (status != GL_TRUE)
	{
		Log::Logf("Vertex Shader Error: %s\n", buffer);
		return false;
	}
	else
		Log::Logf("Vertex Shader Status: %s\n", buffer);

	glGetShaderiv(defaultFragShader, GL_COMPILE_STATUS, &status);

	glGetShaderInfoLog(defaultFragShader, 512, NULL, buffer);

	if (status != GL_TRUE)
	{
		Log::Logf("Fragment Shader Error: %s\n", buffer);
		return false;
	}
	else Log::Logf("Fragment Shader Status: %s\n", buffer);

	defaultShaderProgram = glCreateProgram();
	glAttachShader(defaultShaderProgram, defaultVertexShader);
	glAttachShader(defaultShaderProgram, defaultFragShader);

	// glBindFragDataLocation( defaultShaderProgram, 0, "outColor" );

	glLinkProgram(defaultShaderProgram);

	// Use our recently compiled program.
	glUseProgram(defaultShaderProgram);

	// setup our projection matrix
	GLuint MatrixID = glGetUniformLocation(defaultShaderProgram, "projection");
	glUniformMatrix4fv(MatrixID, 1, GL_FALSE, &projection[0][0]);

	// Clean up..
	glDeleteShader(defaultVertexShader);
	glDeleteShader(defaultFragShader);


	// Set up the uniform constants we'll be using in the program.
	uniforms[A_POSITION] = glGetAttribLocation(defaultShaderProgram, "position");
	uniforms[A_UV] = glGetAttribLocation(defaultShaderProgram, "vertexUV");
	uniforms[A_COLOR] = glGetAttribLocation(defaultShaderProgram, "colorvert");
	uniforms[U_TRANM] = glGetUniformLocation(defaultShaderProgram, "tranM");
	uniforms[U_MVP] = glGetUniformLocation(defaultShaderProgram, "mvp");
	uniforms[U_SIM] = glGetUniformLocation(defaultShaderProgram, "siM");
	uniforms[U_TRANSL] = glGetUniformLocation(defaultShaderProgram, "useTranslate");
	uniforms[U_SMULT] = glGetUniformLocation(defaultShaderProgram, "sMult");
	uniforms[U_CENTERED] = glGetUniformLocation(defaultShaderProgram, "Centered");
	uniforms[U_COLOR] = glGetUniformLocation(defaultShaderProgram, "Color");
	uniforms[U_LMUL] = glGetUniformLocation(defaultShaderProgram, "lMul");
	uniforms[U_LPOS] = glGetUniformLocation(defaultShaderProgram, "lPos");
	uniforms[U_INVERT] = glGetUniformLocation(defaultShaderProgram, "inverted");
	uniforms[U_LIGHT] = glGetUniformLocation(defaultShaderProgram, "AffectedByLightning");
	uniforms[U_HIDDEN] = glGetUniformLocation(defaultShaderProgram, "HiddenLightning");
	uniforms[U_HIDLOW] = glGetUniformLocation(defaultShaderProgram, "clampHSUnder");
	uniforms[U_HIDHIGH] = glGetUniformLocation(defaultShaderProgram, "clampHSOver");
	uniforms[U_HIDFAC] = glGetUniformLocation(defaultShaderProgram, "HFactor");
	uniforms[U_HIDSUM] = glGetUniformLocation(defaultShaderProgram, "clampFLSum");
	uniforms[U_REPCOLOR] = glGetUniformLocation(defaultShaderProgram, "replaceColor");
	uniforms[U_BTRANSP] = glGetUniformLocation(defaultShaderProgram, "BlackToTransparent");

	SetLightPosition(glm::vec3(0, 0, 1));
	SetLightMultiplier(1);
	return true;
}
コード例 #5
0
ファイル: Light.cpp プロジェクト: Phillip-Stevens/RayTracing
void Light::InitDefaultLight()
{
	//set default position and colour for a light
	SetLightColour(1.0, 1.0, 1.0);
	SetLightPosition(0.0, 20.0, 0.0);
}
コード例 #6
0
bool TMD5Renderer::Create()
{
    
    shaderProgram = glCreateProgram();
    assert( 0!=shaderProgram );
    
    vertexShader = glCreateShader(GL_VERTEX_SHADER);
    assert( 0!=vertexShader );
    
    fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
    assert( 0!=fragmentShader );
    
    const std::string& root = TGremlinsFramework::GetInstance()->GetAssetRoot();
    
    
    
    char vertexShaderPath[1024];
    char fragmentShaderPath[1024];
    
#ifdef GL_ES_VERSION_2_0
    sprintf(vertexShaderPath, "%s%s",root.c_str(), "media/shaders/FlatShading.vs");
    sprintf(fragmentShaderPath, "%s%s",root.c_str(), "media/shaders/FlatShading.fs");
#else
    sprintf(vertexShaderPath, "%s%s",root.c_str(), "media/shaders/SkinnedMeshGL4.vs");
    sprintf(fragmentShaderPath, "%s%s",root.c_str(), "media/shaders/SkinnedMeshGL4.fs");
    
  //  sprintf(vertexShaderPath, "%s%s",root.c_str(), "EngineMedia/Shaders/SkinnedMeshGL4.vs");
   // sprintf(fragmentShaderPath, "%s%s",root.c_str(), "EngineMedia/Shaders/SkinnedMeshGL4.fs");
    
#endif
    
    
    bool loadVSOK = TGraphicsUtils::LoadShaderSource(vertexShader, vertexShaderPath);
    assert(loadVSOK);
    
    
    
    bool loadFSOK = TGraphicsUtils::LoadShaderSource(fragmentShader, fragmentShaderPath);
    assert(loadFSOK);
    
    glCompileShader(vertexShader);
    GLint status;
    glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &status);
    
    
    glCompileShader(fragmentShader);
    
    
    
    
    glAttachShader(shaderProgram, vertexShader);
    
    glAttachShader(shaderProgram, fragmentShader);
    assert( glGetError() == GL_NO_ERROR);
    
    
    glBindAttribLocation(shaderProgram, 0, "vertex");
    glBindAttribLocation(shaderProgram, 1, "normal");
    glBindAttribLocation(shaderProgram, 2, "tangent");
    glBindAttribLocation(shaderProgram, 3, "uv");
    glBindAttribLocation(shaderProgram, 4, "boneIndices");
    glBindAttribLocation(shaderProgram, 5, "weights");
    
    assert( glGetError() == GL_NO_ERROR);
    
    glLinkProgram(shaderProgram);
    
    if( ! TGraphicsUtils::CheckProgramStatus(shaderProgram, GL_LINK_STATUS))
    {
        TGraphicsUtils::DumpProgramInfoLog(shaderProgram);
    }

    assert( glGetError() == GL_NO_ERROR);
    
    
    assert( glGetError() == GL_NO_ERROR);
    
    
#ifdef GL_ES_VERSION_2_0
    glEnableVertexAttribArray(0);
    glEnableVertexAttribArray(1);
    glEnableVertexAttribArray(2);
    glEnableVertexAttribArray(3);
    glEnableVertexAttribArray(4);
    glEnableVertexAttribArray(5);
  
#else
    // use VAO and VBO in GLSL 4.1
    
       
   
    PrepareBuffers(md5Model);
    
    
    
    
    
    
#endif
    
    
    
    diffuseLocation = glGetUniformLocation(shaderProgram, "diffuse");
    assert( diffuseLocation != -1 );
    
    
    
    
    glValidateProgram(shaderProgram);
    
    if( ! TGraphicsUtils::CheckProgramStatus(shaderProgram, GL_VALIDATE_STATUS) )
    {
        TGraphicsUtils::DumpProgramInfoLog(shaderProgram);
    }
    else
    {
        TGraphicsUtils::PrintInBlock("Shader validation OK!");
    }

    assert( glGetError() == GL_NO_ERROR);
    
    
  
    
    glBindTexture(GL_TEXTURE_2D, 0);
    glUseProgram(0);
    
    viewMatrix = Matrix4::IDENTITY;
    projectionMatrix = Matrix4::IDENTITY;
    worldMatrix = Matrix4::IDENTITY;
    
    UpdateMatrix();
    SetLightPosition(Vector3(1.0f, 1.0f, 1.0f));
    SetEyePosition(Vector3(0.0f, 0.0f, 100.0f));
    nearPlane = 0.1f;
    farPlane = 1000.0f;
    
    
    return true;
}
コード例 #7
0
void ObjMeshGPUDeformer::Init(ObjMesh * mesh_, ObjMeshRender * meshRender_, int renderingMode_) 
{
  mesh = mesh_;
  meshRender = meshRender_;
  renderingMode = renderingMode_;

  printf("Initializing ObjMeshGPUDeformer...\n");

  #ifdef OBJMESHGPUDEFORMER_USING_VBOS
    // init the GL_ARB_vertex_buffer_object extension
    if (!InitializeVBOs())
    {
      printf("Unable to load the GL_ARB_vertex_buffer_object extension\n");
      throw 31;
    }
    printf("Detected extension: GL_ARB_vertex_buffer_object\n");
  #endif

  // default lighting: single light of intensity 1 at the origin
  // set the other lights away from the object 
  // (to avoid a vertex accidentally coinciding with a light source (which will cause a division by zero in the shader when normalizing the light vector))
  memset(lightPos, 0, sizeof(float) * 16);
  memset(lightIntensity, 0, sizeof(float) * 4);
  lightIntensity[0] = 1.0;
  ambientIntensity = 0.0;

  // set the other three lights to be far away and of zero intensity
  float vtx_max[4] = { FLT_MAX, FLT_MAX, FLT_MAX, 1.0 };

  SetLightPosition(1, vtx_max);
  SetLightPosition(2, vtx_max);
  SetLightPosition(3, vtx_max);

  ambientEnabled = true;
  diffuseEnabled = true;
  specularEnabled = true;

  numVertices = mesh->getNumVertices();
  numGroups = mesh->getNumGroups();
  numGroupTriangles = (int*) malloc (sizeof(int) * numGroups);

  // count num mesh triangles
  numTriangles = 0;
  for(int groupNo=0; groupNo<numGroups; groupNo++)
  {
    const ObjMesh::Group * groupHandle = mesh->getGroupHandle(groupNo);

    // count num triangles
    numGroupTriangles[groupNo] = 0;
    for(unsigned int iFace = 0; iFace < groupHandle->getNumFaces(); iFace++)
    {
      const ObjMesh::Face * faceHandle = groupHandle->getFaceHandle(iFace);
      numGroupTriangles[groupNo] += faceHandle->getNumVertices() - 2;
    }
    numTriangles += numGroupTriangles[groupNo];
  }

  InitVertexDeformationTexture();

  printf ("ObjMeshGPUDeformer initialization complete.\n");
}