コード例 #1
0
void LWPRender::QuietlyGetTransients()
{
	// get transients and don't complain if any failed (for layout-modeler plugins)
	backdropInfo = (LWBackdropInfo *)globalFunc(LWBACKDROPINFO_GLOBAL, GFUSE_TRANSIENT);
	compInfo = (LWCompInfo *)globalFunc(LWCOMPINFO_GLOBAL, GFUSE_TRANSIENT);
	fogInfo = (LWFogInfo *)globalFunc(LWFOGINFO_GLOBAL, GFUSE_TRANSIENT);
	sceneInfo = (LWSceneInfo *)globalFunc(LWSCENEINFO_GLOBAL, GFUSE_TRANSIENT);
	timeInfo = (LWTimeInfo *)globalFunc(LWTIMEINFO_GLOBAL, GFUSE_TRANSIENT);
	if (!systemIsScreamerNet) interfaceInfo = (LWInterfaceInfo *)globalFunc(LWINTERFACEINFO_GLOBAL, GFUSE_TRANSIENT);
#ifdef LW6
	// read light positions [NOTE] to work around wPosition bug in LW
	LightPosQ.clear();
	for (LWPLight l = LWPLight::first(); l; l = l.next())
	{
		Point v;
		l.param(LWIP_W_POSITION, timeInfo->time, v);
		LightPosQ << LightPos(l, v);
	}
#endif
}
コード例 #2
0
XCALL_(LWError) LWPRender::NewTime(void * inst, LWFrame f, LWTime t)
{
	// get transients each NewTime

	if (!(backdropInfo = (LWBackdropInfo *)globalFunc(LWBACKDROPINFO_GLOBAL, GFUSE_TRANSIENT)))
		return "Couldn't get Backdrop Info";
	
	if (!(compInfo = (LWCompInfo *)globalFunc(LWCOMPINFO_GLOBAL, GFUSE_TRANSIENT)))
		return "Couldn't get Compositing Info";

	if (!(fogInfo = (LWFogInfo *)globalFunc(LWFOGINFO_GLOBAL, GFUSE_TRANSIENT)))
		return "Couldn't get Fog Info";

	if (!(sceneInfo = (LWSceneInfo *)globalFunc(LWSCENEINFO_GLOBAL, GFUSE_TRANSIENT)))
		return "Couldn't get Scene Info";

	if (!(timeInfo = (LWTimeInfo *)globalFunc(LWTIMEINFO_GLOBAL, GFUSE_TRANSIENT)))
		return "Couldn't get Time Info";

	if (!systemIsScreamerNet)
	{
		if (!(interfaceInfo = (LWInterfaceInfo *)globalFunc(LWINTERFACEINFO_GLOBAL, GFUSE_TRANSIENT)))
			return "Couldn't get Interface Info";
	}

#ifdef LW6
	// read light positions [NOTE] to work around wPosition bug in LW
	LightPosQ.clear();
	for (LWPLight l = LWPLight::first(); l; l = l.next())
	{
		Point v;
		l.param(LWIP_W_POSITION, t, v);
		LightPosQ << LightPos(l, v);
	}
#endif
	// get world to screen matrix
	TransW2S = LWPCamera::renderCamera().w2sMatrix(t);

	return ((LWPRender *)inst)->newTime(f, t);
}
コード例 #3
0
ファイル: main.cpp プロジェクト: kevinbird61/cghw2
int main(int argc, char *argv[])
{
	GLFWwindow* window;
	glfwSetErrorCallback(error_callback);
	if (!glfwInit())
		exit(EXIT_FAILURE);
	// OpenGL 3.3, Mac OS X is reported to have some problem. However I don't have Mac to test
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
	// For Mac OS X
	glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
	glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
	int width = 1366;
	int height = 768;
	window = glfwCreateWindow(width, height, "Simple Example", NULL, NULL);
	if (!window)
	{
		glfwTerminate();
		return EXIT_FAILURE;
	}

	glfwMakeContextCurrent(window);

	// This line MUST put below glfwMakeContextCurrent
	glewExperimental = GL_TRUE;
	glewInit();

	// Enable vsync
	glfwSwapInterval(1);

	// Setup input callback
	glfwSetKeyCallback(window, key_callback);
	
	glProvokingVertex(GL_FIRST_VERTEX_CONVENTION);
	// load shader program - default is flat
	loadShader("Shader/flat_vertexShader.vs","Shader/flat_fragmentShader.frag");
	// Enable blend mode for billboard
	//glEnable(GL_BLEND);
	//glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

	float last, start;
	last = start = glfwGetTime();
	int fps=0;
	//objects[sun].model = glm::scale(glm::mat4(1.0f), glm::vec3(0.85f));
	
	std::cout<<"You can press the Key 1~4 to control the shader mode!"<<std::endl;
	std::cout<<"1 for flat"<<std::endl;
	std::cout<<"2 for Gouraud"<<std::endl;
	std::cout<<"3 for Phong"<<std::endl;
	std::cout<<"4 for Blinn-Phong"<<std::endl;
	
	while (!glfwWindowShouldClose(window))
	{//program will keep draw here until you close the window
		float delta = glfwGetTime() - start;
		// Require for the rotation of sun
		render();
		glfwSwapBuffers(window);
		glfwPollEvents();
		fps++;
		
		glm::vec3 camera = glm::vec3( 30.0f , 30.0f , 30.0f);
		
		// set matrix
		//glm::mat4 proj = glm::perspective(glm::radians(20.0f), 640.0f / 480, 1.0f, 100.f)*glm::lookAt(glm::vec3(25.0f), glm::vec3(), glm::vec3(0, 1, 0)) * glm::mat4(1.0f);
		glm::mat4 proj = glm::perspective(glm::radians(20.0f), 640.0f / 480, 1.0f, 100.f);
		glm::mat4 view = glm::mat4(1.0f)*glm::lookAt(camera, glm::vec3(), glm::vec3(0, 1, 0)) * glm::mat4(1.0f);
		glm::mat4 model = glm::scale(glm::mat4(1.0f), glm::vec3(0.85f))*glm::rotate(glm::mat4(), (GLfloat)glfwGetTime() * 0.1f, glm::vec3(0.0f, 1.0f, 0.0f));
		
		// Light Position
		glm::vec3 LightPos(5.0f,15.0f,5.0f);
		setColorAttr(program , LightPos , camera);
		
		// Set program
		setVS(program,proj,view,model);
		
		if(glfwGetTime() - last > 1.0)
		{
			// Every second
			// std::cout<<(double)fps/(glfwGetTime()-last)<<std::endl;
			fps = 0;
			last = glfwGetTime();
		}
	}

	releaseObjects();
	glfwDestroyWindow(window);
	glfwTerminate();
	return EXIT_SUCCESS;
}
コード例 #4
0
void D3DRenderPipeline::Render( void )
{ 
	auto itMatGroup = m_renderGroup.begin();
	while( itMatGroup != m_renderGroup.end() )
	{

		MaterialGroup& matGroup = itMatGroup->second; 
		Resource::Material* pMat = matGroup.m_pMaterial;

		if( NULL == pMat )
		{
			if( NULL == m_pEffect )
			{
				++itMatGroup;
				continue;
			}

			Resource::Material* pTerrainMat = 
				Resource::MaterialManager::GetInstance()->CreateOrRetrieveMaterial("TerrainMat");
			Resource::Texture2D* pTerrainColorTex = pTerrainMat->GetTexture(DIFFUSE_CH);

			//渲染地形
			m_pEffect->SetTechnique( "TerrainShading" );
			 
			Math::Vec3 LightPos( 2000.0f , 8000.0f , 3000.f ); 
			Math::Vec3 DirLightDir( 0.5f , -1.0f , 0.5f );
			DirLightDir.Normalize();
			m_pEffect->SetValue( "f3LightPos"  , &(LightPos) , sizeof(LightPos) );  
			m_pEffect->SetValue( "f3DirLightDir" , &DirLightDir , sizeof(DirLightDir) );
			D3DMATERIAL9 material;
			Math::Vec4 v4Ambient( 0.1f , 0.1f, 0.1f , 1.0f );
			Math::Vec4 v4Diffuse( 1.0f , 1.0f , 1.0f , 1.0f );
			Math::Vec4 v4Specular( 1.0f , 1.0f , 1.0f , 1.0f );
			float fShininess = 128.0f;

			//应用材质  
			memset( &material , 0 , sizeof( material ) ); 
			memcpy( &material.Ambient , &v4Ambient , sizeof(D3DCOLORVALUE) );
			memcpy( &material.Diffuse , &v4Diffuse , sizeof(D3DCOLORVALUE) );
			memcpy( &material.Specular , &v4Specular , sizeof(D3DCOLORVALUE) );
			material.Power = fShininess;     
			int size = sizeof(material);
			m_pEffect->SetValue( "g_Material" , (LPCVOID)&material , sizeof(material) ); 

			float fTerrainHeightRange = 
				( Terrain::ClipMapReader::GetInstance()->GetHeightMapMaxHeight() - 
				Terrain::ClipMapReader::GetInstance()->GetHeightMapMinHeight() ) * CLIPMAP_HEIGHT_SCALE ;
			m_pEffect->SetFloat("fTerrainHeightRange" , fTerrainHeightRange );
			if( pTerrainColorTex )
			{
				m_pEffect->SetTexture("terrainColorTex" , (IDirect3DTexture9*)pTerrainColorTex->GetUserPointer());
			}

			UINT uiPassCount = 0;  
			m_pEffect->Begin( &uiPassCount ,  0 );  

			for( UINT uiPass = 0 ; uiPass < uiPassCount ; uiPass++ )
			{  
				m_pEffect->BeginPass( uiPass );   
				auto itOp = matGroup.m_OpList.begin();
				while( itOp != matGroup.m_OpList.end() )
				{ 
					D3DRenderOperation* pOp = *itOp;   

					m_pEffect->SetMatrix( "m4World" , (D3DXMATRIX*)&( pOp->m_worldMat ) ); 
					m_pEffect->CommitChanges();

					m_pDevice->SetVertexDeclaration( pOp->m_pVertexDecl );
					m_pDevice->SetStreamSource( pOp->m_streamIndex , pOp->m_pVB , 0 , pOp->m_stride  );
					m_pDevice->SetIndices( pOp->m_pIB ); 
					m_pDevice->DrawIndexedPrimitive( pOp->m_primitiveType , 0 , 0 , pOp->m_vertexCount , 0 , pOp->m_primCount );   

					++itOp;
				}
				m_pEffect->EndPass();
			}
			m_pEffect->End();

			++itMatGroup;
			continue;
		}

		Resource::Texture2D* pDiffTex = pMat->GetTexture( DIFFUSE_CH );
		Resource::Texture2D* pNormTex = pMat->GetTexture( BUMPMAP_CH ); 
	 
		String techniqueName = "NormalMapShading";
	  
		if( m_pEffect )
		{ 
			UINT uiPassCount = 0;  
			HRESULT hRes = m_pEffect->SetTechnique( techniqueName.c_str() );
			
			Math::Vec3 LightPos( 30.f , 30.f , 30.f ); 
			m_pEffect->SetValue( "f3LightPos"  , &(LightPos) , sizeof(LightPos) );  

			D3DMATERIAL9 material;
			//应用材质 
			memset( &material , 0 , sizeof( material ) ); 
			memcpy( &material.Ambient , &pMat->GetAmbient() , sizeof(D3DCOLORVALUE) );
			memcpy( &material.Diffuse , &pMat->GetDiffuse() , sizeof(D3DCOLORVALUE) );
			memcpy( &material.Specular , &pMat->GetSpecular() , sizeof(D3DCOLORVALUE) );
			material.Power = pMat->GetShininess();     
			int size = sizeof(material);
			m_pEffect->SetValue( "g_Material" , (LPCVOID)&material , sizeof(material) );  
			if( pDiffTex )
			{
				m_pEffect->SetTexture( "diffuseTex" , (IDirect3DTexture9*)pDiffTex->GetUserPointer() );  
			}

			if( pNormTex )
			{
				m_pEffect->SetTexture( "normalTex" , (IDirect3DTexture9*)pNormTex->GetUserPointer() );  
			}
			  
			m_pEffect->Begin( &uiPassCount ,  0 );  
			for( UINT uiPass = 0 ; uiPass < uiPassCount ; uiPass++ )
			{ 
				m_pEffect->BeginPass( uiPass );   
				auto itOp = matGroup.m_OpList.begin();
				while( itOp != matGroup.m_OpList.end() )
				{ 
					D3DRenderOperation* pOp = *itOp;
					m_pEffect->SetMatrix( "m4World" , (D3DXMATRIX*)&( pOp->m_worldMat ) ); 
					m_pEffect->CommitChanges();

					m_pDevice->SetVertexDeclaration( pOp->m_pVertexDecl );
					m_pDevice->SetStreamSource( pOp->m_streamIndex , pOp->m_pVB , 0 , pOp->m_stride  );
					m_pDevice->SetIndices( pOp->m_pIB ); 
					m_pDevice->DrawIndexedPrimitive( pOp->m_primitiveType , 0 , 0 , pOp->m_vertexCount, 0 , pOp->m_primCount );   
					++itOp;
				}
					m_pEffect->EndPass();
			} 
			m_pEffect->End(); 
		}//if( m_pEffect )
  
		++itMatGroup;
	}
}