示例#1
0
//*************************************************************************************************************
void Star()
{
	tmpvert[6] = tmpvert[24] = tmpvert[30] = (float)screenwidth / 4.0f - 0.5f;
	tmpvert[13] = tmpvert[19] = tmpvert[31] = (float)screenheight / 4.0f - 0.5f;

	texelsize.x = 4.0f / (float)screenwidth;
	texelsize.y = 4.0f / (float)screenheight;

	hdreffect->SetTechnique("star");
	hdreffect->SetVector("texelsize", &texelsize);

	hdreffect->Begin(NULL, 0);
	hdreffect->BeginPass(0);

	for( int i = 0; i < 4; ++i )
	{
		hdreffect->SetInt("stardir", i);

		for( int j = 0; j < 3; ++j )
		{
			int ind = (j % 2);

			device->SetRenderTarget(0, starsurfaces[i][ind]);
			device->SetTexture(0, (j == 0 ? dstargets[1] : startargets[i][1 - ind]));

			hdreffect->SetInt("starpass", j);
			hdreffect->CommitChanges();

			device->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 2, tmpvert, sizeof(D3DXVECTOR4) + sizeof(D3DXVECTOR2));
		}
	}

	hdreffect->EndPass();
	hdreffect->End();

	// combine star textures
	hdreffect->SetTechnique("starcombine");

	device->SetRenderTarget(0, blursurfaces[1]);
	device->SetTexture(0, startargets[0][0]);
	device->SetTexture(1, startargets[1][0]);
	device->SetTexture(2, startargets[2][0]);
	device->SetTexture(3, startargets[3][0]);

	hdreffect->Begin(NULL, 0);
	hdreffect->BeginPass(0);
	{
		device->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 2, tmpvert, sizeof(D3DXVECTOR4) + sizeof(D3DXVECTOR2));
	}
	hdreffect->EndPass();
	hdreffect->End();
}
示例#2
0
void AutoExposure(void)
{
	LPDIRECT3DDEVICE9 device = GutGetGraphicsDeviceDX9();

	D3DXHANDLE shader = g_pExposureEffect->GetTechniqueByName("AutoExposure");
	g_pExposureEffect->SetTechnique(shader);

	Vector4 vMiddleGray(0.5f);
	Vector4 vMultiplierClamp(0.2f, 3.0f, 0.0f, 0.0f);

	D3DXHANDLE middlegray_var = g_pExposureEffect->GetParameterByName(NULL, "vMiddleGray");
	D3DXHANDLE clamp_var = g_pExposureEffect->GetParameterByName(NULL, "vMultiplierClamp");
	D3DXHANDLE image0_var = g_pExposureEffect->GetParameterByName(NULL, "Image");
	D3DXHANDLE image1_var = g_pExposureEffect->GetParameterByName(NULL, "Image2");

	g_pExposureEffect->SetVector(middlegray_var, (D3DXVECTOR4*)&vMiddleGray);
	g_pExposureEffect->SetVector(clamp_var, (D3DXVECTOR4*)&vMultiplierClamp);

	g_pExposureEffect->SetTexture(image0_var, g_pFrameBuffer[FULLSIZE]);
	g_pExposureEffect->SetTexture(image1_var, g_pFrameBuffer[LUMINANCE_TEMP]);

	g_pExposureEffect->Begin(NULL, 0);
	g_pExposureEffect->BeginPass(0);

	DrawFullScreenQuad(&g_ImageInfo);

	g_pExposureEffect->EndPass();
	g_pExposureEffect->End();
}
示例#3
0
void ConverToLogLuminance(LPDIRECT3DTEXTURE9 pSource, sImageInfo *pInfo)
{
	LPDIRECT3DDEVICE9 device = GutGetGraphicsDeviceDX9();

	device->SetRenderTarget(0, g_pFrameSurface[DOWNSAMPLED_256x256]);
	device->SetDepthStencilSurface(NULL);

	D3DXHANDLE shader = g_pExposureEffect->GetTechniqueByName("LogLuminance");
	g_pExposureEffect->SetTechnique(shader);

	D3DXHANDLE tablevar = g_pExposureEffect->GetParameterByName(NULL, "vLuminanceTable");
	D3DXHANDLE imagevar = g_pExposureEffect->GetParameterByName(NULL, "Image");

	Vector4 vTable(0.21f, 0.71f, 0.072f);
	g_pExposureEffect->SetVector(tablevar, (D3DXVECTOR4*)&vTable);
	g_pExposureEffect->SetTexture(imagevar, pSource);

	g_pExposureEffect->Begin(NULL, 0);
	g_pExposureEffect->BeginPass(0);

	DrawFullScreenQuad(pInfo);

	g_pExposureEffect->EndPass();
	g_pExposureEffect->End();
}
示例#4
0
static void WaterSimulation(void)
{
	LPDIRECT3DDEVICE9 device = GutGetGraphicsDeviceDX9();

	device->SetRenderTarget(0, g_pSurfaces[TEX_HEIGHT2]);
	device->SetDepthStencilSurface(NULL);

	D3DXHANDLE shader = g_pWaterEffect->GetTechniqueByName("WaterSimulation");
	D3DXHANDLE heightmap_current_var = g_pWaterEffect->GetParameterByName(NULL, "heightmap_current");
	D3DXHANDLE heightmap_prev_var = g_pWaterEffect->GetParameterByName(NULL, "heightmap_prev");
	D3DXHANDLE texturesize_var = g_pWaterEffect->GetParameterByName(NULL, "texture_size");
	D3DXHANDLE damping_var = g_pWaterEffect->GetParameterByName(NULL, "fDamping");
	
	Vector4 texturesize;
	texturesize[0] = 1.0f/(float)g_ImageInfo.m_iWidth;
	texturesize[1] = 1.0f/(float)g_ImageInfo.m_iHeight;
	texturesize[2] = (float)g_ImageInfo.m_iWidth;
	texturesize[3] = (float)g_ImageInfo.m_iHeight;

	g_pWaterEffect->SetTechnique(shader);
	g_pWaterEffect->SetTexture(heightmap_prev_var, g_pTextures[TEX_HEIGHT0]);
	g_pWaterEffect->SetTexture(heightmap_current_var, g_pTextures[TEX_HEIGHT1]);
	g_pWaterEffect->SetFloat(damping_var, 0.99f);
	g_pWaterEffect->SetVector(texturesize_var, (D3DXVECTOR4*)&texturesize);

	g_pWaterEffect->Begin(NULL,0);
	g_pWaterEffect->BeginPass(0);
		GutDrawFullScreenQuad_DX9(&g_ImageInfo);
	g_pWaterEffect->EndPass();
	g_pWaterEffect->End();
}
示例#5
0
//*************************************************************************************************************
void LensFlare()
{
	texelsize.x = 2.0f / (float)screenwidth;
	texelsize.y = 2.0f / (float)screenheight;

	hdreffect->SetTechnique("ghost");
	hdreffect->SetVector("texelsize", &texelsize);

	device->SetRenderTarget(0, ghostsurfaces[0]);
	device->SetTexture(0, dstargets[0]);
	device->SetTexture(1, dstargets[1]);
	device->SetTexture(2, dstargets[2]);

	device->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_BORDER);
	device->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_BORDER);

	tmpvert[6] = tmpvert[24] = tmpvert[30] = (float)screenwidth / 2.0f - 0.5f;
	tmpvert[13] = tmpvert[19] = tmpvert[31] = (float)screenheight / 2.0f - 0.5f;

	// 1 iteration only (not too spectatular...)
	hdreffect->Begin(NULL, 0);
	hdreffect->BeginPass(0);
	{
		device->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 2, tmpvert, sizeof(D3DXVECTOR4) + sizeof(D3DXVECTOR2));
	}
	hdreffect->EndPass();
	hdreffect->End();
}
void CShaderManager::Render( )
{
	if( m_pD3DDevice == NULL || m_pObject == NULL )
		return;

	LPD3DXEFFECT fxShader = GetShader( m_pObject->m_hShader );

	if( fxShader == NULL )
	{
		m_pObject->Render();
		return;
	}

	UINT uiNumPasses = 0;

	fxShader->Begin( &uiNumPasses, 0 );

	for( UINT iPass = 0; iPass < uiNumPasses; ++iPass )
	{
		fxShader->BeginPass( iPass );

		m_pObject->Render();

		fxShader->EndPass();
	}

	fxShader->End();
}
示例#7
0
//*************************************************************************************************************
void DownSample()
{
	hdreffect->SetTechnique("downsample");
	hdreffect->Begin(NULL, 0);
	hdreffect->BeginPass(0);

	for( int i = 1; i < 5; ++i )
	{
		device->SetRenderTarget(0, dssurfaces[i]);
		device->SetTexture(0, dstargets[i - 1]);

		texelsize.x = (float)(2 << i) / (float)screenwidth;
		texelsize.y = (float)(2 << i) / (float)screenheight;

		tmpvert[6] = tmpvert[24] = tmpvert[30] = (float)screenwidth / ((float)(2 << i)) - 0.5f;
		tmpvert[13] = tmpvert[19] = tmpvert[31] = (float)screenheight / ((float)(2 << i)) - 0.5f;

		hdreffect->SetVector("texelsize", &texelsize);
		hdreffect->CommitChanges();

		device->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 2, tmpvert, sizeof(D3DXVECTOR4) + sizeof(D3DXVECTOR2));
	}

	hdreffect->EndPass();
	hdreffect->End();
}
示例#8
0
static void AddImpulse(void)
{
	static Vector4 vPosition(0.0f, 0.0f, 0.0f, 0.0f);
	//Vector4 vDiff = vPosition - g_vPosition;
	Vector4 vDiff = g_vPosition - vPosition;
	Vector4 vLength = vDiff.Length();

	if ( vLength[0]<2.0f )
		return;

	Vector4 vDir = vDiff / vLength;
	Vector4 vVec0(vDir[1],-vDir[0], 0.0f, 0.0f);
	Vector4 vVec1(vDir[0], vDir[1], 0.0f, 0.0f);

	vPosition = g_vPosition;

	Vector4 vVec0_old = g_orient_matrix[0];
	Vector4 vVec1_old = g_orient_matrix[1];

	Vector4 vVec0_new = VectorLerp(vVec0_old, vVec0, 0.2f);
	Vector4 vVec1_new = VectorLerp(vVec1_old, vVec1, 0.2f);
	vVec0_new.Normalize();
	vVec1_new.Normalize();
	Vector4 vVec2_new = Vector3CrossProduct(vVec0_new, vVec1_new);

	g_orient_matrix.Identity();
	g_orient_matrix[0] = vVec0_new;
	g_orient_matrix[1] = vVec1_new;
	g_orient_matrix[2] = vVec2_new;

	LPDIRECT3DDEVICE9 device = GutGetGraphicsDeviceDX9();

	device->SetRenderTarget(0, g_pSurfaces[TEX_HEIGHT1]);
	device->SetDepthStencilSurface(NULL);

	Matrix4x4 view_matrix = g_Control.GetViewMatrix();
	
	Matrix4x4 world_matrix; 
	world_matrix.Scale_Replace(g_fRippleSize, g_fRippleSize, 1.0f);
	world_matrix[3] = g_vPosition;

	Matrix4x4 wvp_matrix = g_orient_matrix * world_matrix * view_matrix * g_proj_matrix;

	D3DXHANDLE shader = g_pWaterEffect->GetTechniqueByName("AddImpulse");
	D3DXHANDLE wvp_matrix_var = g_pWaterEffect->GetParameterByName(NULL, "wvp_matrix");
	D3DXHANDLE force_var = g_pWaterEffect->GetParameterByName(NULL, "fForce");

	g_pWaterEffect->SetTechnique(shader);
	g_pWaterEffect->SetMatrix(wvp_matrix_var, (D3DXMATRIX *)&wvp_matrix);
	g_pWaterEffect->SetFloat(force_var, 0.05f);

	g_pWaterEffect->Begin(NULL, 0);
	g_pWaterEffect->BeginPass(0);
		g_Model_DX9.Render(0);
	g_pWaterEffect->EndPass();
	g_pWaterEffect->End();

	vPosition = g_vPosition;
}
/**-----------------------------------------------------------------------------
 * 화면 그리기
 *------------------------------------------------------------------------------
 */
VOID Render()
{
	UINT nPass;

    /// 후면버퍼와 Z버퍼 초기화
    g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(200,200,200), 1.0f, 0 );
	g_pd3dDevice->SetRenderState( D3DRS_FILLMODE, g_bWireframe ? D3DFILL_WIREFRAME : D3DFILL_SOLID );

	/// 애니메이션 행렬설정
	Animate();
    /// 렌더링 시작
    if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
    {
		if( g_bUseVS )	// 정점 쉐이더를 사용하여 출력?
		{
			g_pEffect->SetFloat( "g_fTime", (float)(timeGetTime()) / 100 );

			/// 정점선언값과 정점 설정
			g_pd3dDevice->SetVertexDeclaration( g_pDecl );
			g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(MYVERTEX) );

			/// fx출력에 사용할 테크닉 선정
			g_pEffect->SetTechnique( "MyShader" );
			
			/// fx를 사용한 출력개시
			g_pEffect->Begin( &nPass, D3DXFX_DONOTSAVESTATE );

			/// PASS 개수만큼 출력
			for( int i = 0; i < nPass ; i++ )
			{
				g_pEffect->BeginPass( i );
				g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 1 );
				g_pEffect->EndPass();
			}

			/// fx를 사용한 출력종료
			g_pEffect->End();
		}
		else
		{
			// fx를 사용한뒤에는 이 값을 NULL로 해야 D3D고정 파이프라인을 사용할 수 있다.
			g_pd3dDevice->SetVertexShader( NULL );
			g_pd3dDevice->SetPixelShader( NULL );
			g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(MYVERTEX) );
			g_pd3dDevice->SetFVF( MYVERTEX::FVF );
			g_pd3dDevice->SetTexture( 0, g_pTexture );
			g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_MODULATE );	/// MODULATE연산으로 색깔을 섞음
			g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );	/// 첫번째 섞을색은 텍스쳐 색
			g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );	/// 두번째 섞을색은 정점 색
			g_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP,   D3DTOP_DISABLE );	/// alpha연산은 사용하지 않음
			g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 1 );
		}

		g_pd3dDevice->EndScene();
    }

    /// 후면버퍼를 보이는 화면으로!
    g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}
示例#10
0
// 3D 물체등을 그린다.
void RenderScene()
{
	// 뷰 행렬을 만든다.
	D3DXMATRIXA16 matView;
	D3DXVECTOR3 vEyePt(gWorldCameraPosition.x, gWorldCameraPosition.y, gWorldCameraPosition.z);
	D3DXVECTOR3 vLookatPt(0.0f, 0.0f, 0.0f);
	D3DXVECTOR3 vUpVec(0.0f, 1.0f, 0.0f);
	D3DXMatrixLookAtLH(&matView, &vEyePt, &vLookatPt, &vUpVec);

	// 투영행렬을 만든다.
	D3DXMATRIXA16			matProjection;
	D3DXMatrixPerspectiveFovLH(&matProjection, FOV, ASPECT_RATIO, NEAR_PLANE, FAR_PLANE);

	// 프레임마다 0.4도씩 회전을 시킨다.
	gRotationY += 0.4f * PI / 180.0f;
	if (gRotationY > 2 * PI)
	{
		gRotationY -= 2 * PI;
	}

	// 월드행렬을 만든다.
	D3DXMATRIXA16			matWorld;
	D3DXMatrixRotationY(&matWorld, gRotationY);

	// 월드/뷰/투영행렬을 미리 곱한다.
	D3DXMATRIXA16 matWorldView;
	D3DXMATRIXA16 matWorldViewProjection;
	D3DXMatrixMultiply(&matWorldView, &matWorld, &matView);
	D3DXMatrixMultiply(&matWorldViewProjection, &matWorldView, &matProjection);

	// 쉐이더 전역변수들을 설정
	gpEnvironmentMappingShader->SetMatrix("gWorldMatrix", &matWorld);
	gpEnvironmentMappingShader->SetMatrix("gWorldViewProjectionMatrix", &matWorldViewProjection);

	gpEnvironmentMappingShader->SetVector("gWorldLightPosition", &gWorldLightPosition);
	gpEnvironmentMappingShader->SetVector("gWorldCameraPosition", &gWorldCameraPosition);

	gpEnvironmentMappingShader->SetVector("gLightColor", &gLightColor);
	gpEnvironmentMappingShader->SetTexture("DiffuseMap_Tex", gpStoneDM);
	gpEnvironmentMappingShader->SetTexture("SpecularMap_Tex", gpStoneSM);
	gpEnvironmentMappingShader->SetTexture("NormalMap_Tex", gpStoneNM);
	gpEnvironmentMappingShader->SetTexture("EnvironmentMap_Tex", gpSnowENV);

	// 쉐이더를 시작한다.
	UINT numPasses = 0;
	gpEnvironmentMappingShader->Begin(&numPasses, NULL);
	{
		for (UINT i = 0; i < numPasses; ++i)
		{
			gpEnvironmentMappingShader->BeginPass(i);
			{
				// 구체를 그린다.
				gpTeapot->DrawSubset(0);
			}
			gpEnvironmentMappingShader->EndPass();
		}
	}
	gpEnvironmentMappingShader->End();
}
示例#11
0
HRESULT KG3DPointLightShadow::ExportToCubeSurface(KG3DRenderTargetTool* pTool,LPDIRECT3DSURFACE9 pDestSurface,BOOL bOutputDepth)
{
	HRESULT hr = E_FAIL;

	KGLOG_PROCESS_ERROR(pTool);

	pTool->BeginNewRenderTarget(NULL,NULL,NULL);
	//////////////////////////////////////////////////////////////////////////
	hr = g_pd3dDevice->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER | D3DCLEAR_STENCIL, 0x00808080, 1, 0);
	KGLOG_COM_PROCESS_ERROR(hr);

	{
		D3DXVECTOR2 A(0,0);
		D3DXVECTOR2 C(m_vShadowMap.m_dwShadowmapSize,m_vShadowMap.m_dwShadowmapSize);

		if(bOutputDepth)
		{
			D3DXMATRIX matInv;
			D3DXMatrixInverse(&matInv,NULL,&m_vShadowMap.m_vCameraLight.GetProjectionMatrix());

			LPD3DXEFFECT pShader = g_cGraphicsTool.GetDefaultShader(DEFST_LINEARDEPTHOUTPUT);

			pShader->SetMatrix("invProj",&matInv);

			pShader->SetTechnique("tec0");
			UINT uPass = 0;
			pShader->Begin(&uPass,0);
			pShader->BeginPass(0);

			hr = g_pd3dDevice->BeginScene();
			KGLOG_COM_PROCESS_ERROR(hr);

			g_cGraphicsTool.DrawScreenRect(&A,&C,0,0xFFFFFFFF,m_vShadowMap.m_lpSMShadowMap);

			hr = g_pd3dDevice->EndScene();
			KGLOG_COM_PROCESS_ERROR(hr);

			pShader->EndPass();
			pShader->End();
		}
		else
		{
			g_cGraphicsTool.DrawScreenRect(&A,&C,0,0xFFFFFFFF,m_vShadowMap.m_lpSMColorMap);
		}
	}

	hr = S_OK;

Exit0:

	pTool->EndNewRenderTarget();

	pTool->ExportRenderData(pDestSurface,FALSE);

	return hr;
}
示例#12
0
void RenderFrameDX9(void)
{
	LPDIRECT3DDEVICE9 device = GutGetGraphicsDeviceDX9();
	
	device->BeginScene(); 

	AddImpulse();
	WaterSimulation();
	HeightmapToNormal();

	device->SetRenderTarget(0, g_pMainFramebuffer);
	device->SetDepthStencilSurface(g_pMainDepthbuffer);
	device->Clear(0, NULL, D3DCLEAR_ZBUFFER, 0x0, 1.0f, 0);

	RenderWater();
	DrawObject();

	SwapHeightmaps();

	float x = -1.0f;
	float y = -1.0f;
	float w = 0.4f;
	float h = 0.4f;

	if ( g_iMode & 0x01 )
	{
		DrawImage(g_pTextures[TEX_HEIGHT2], x, y, w, h, &g_ImageInfo);
		x+=w;
	}

	if ( g_iMode & 0x02 )
	{
		D3DXHANDLE shader = g_pWaterEffect->GetTechniqueByName("Heightmap");
		D3DXHANDLE heightmap_var = g_pWaterEffect->GetTechniqueByName("heightmap_current");

		g_pWaterEffect->SetTechnique(shader);
		g_pWaterEffect->SetTexture(heightmap_var, g_pTextures[TEX_HEIGHT2]);

		g_pWaterEffect->Begin(NULL, 0);
		g_pWaterEffect->BeginPass(0);
			GutDrawScreenQuad_DX9(x, y, w, h, &g_ImageInfo);
		g_pWaterEffect->EndPass();
		g_pWaterEffect->End();

		x+=w;
	}

	if ( g_iMode & 0x04 )
	{
		DrawImage(g_pTextures[TEX_NORMAL], x, y, w, h, &g_ImageInfo);
		x+=w;
	}

	device->EndScene(); 
    device->Present( NULL, NULL, NULL, NULL );
}
//---------------------------------------------------------------------------------------
// シェーダ開始
//---------------------------------------------------------------------------------------
void BeginShader(int nTechnique)
{
	if (nTechnique < 0 || nTechnique >= MAX_TECHNIQUE) {
		nTechnique = 0;
	}
	// テクニック設定
	g_pFX->SetTechnique(g_hTech[nTechnique]);
	g_pFX->Begin(NULL, 0);
	// パス開始
	g_pFX->BeginPass(0);
}
示例#14
0
// 3D 물체등을 그린다.
void RenderScene()
{
	
	// 뷰행렬 초기화.
	D3DXMATRIXA16 matView;
	// D3DXVECTOR3 vEyePt(0.0f, 0.0f, -200.0f);
	D3DXVECTOR3 vEyePt(gWorldCameraPosition.x, gWorldCameraPosition.y, gWorldCameraPosition.z);

	D3DXVECTOR3 vLookatPt(0.0f, 0.0f, 0.0f);
	D3DXVECTOR3 vUpVec(0.0f, 1.0f, 0.0f);
	D3DXMatrixLookAtLH(&matView, &vEyePt, &vLookatPt, &vUpVec);


	// 투영행렬 초기화.
	D3DXMATRIXA16 matProjection;
	D3DXMatrixPerspectiveFovLH(&matProjection, FOV, ASPECT_RATIO, NEAR_PLANE, FAR_PLANE);

	
	// 회전.
	gRotationY += ((0.4f * PI) / 180.0f);
	if (gRotationY > 2 * PI)
		gRotationY -= 2 * PI;


	// 월드행렬 초기화.
	D3DXMATRIXA16 matWorld;
	// D3DXMatrixIdentity(&matWorld);
	D3DXMatrixRotationY(&matWorld, gRotationY);


	// 쉐이더에 전달.
	gpTextureMappingShader->SetMatrix("gWorldMatrix", &matWorld);
	gpTextureMappingShader->SetMatrix("gViewMatrix", &matView);
	gpTextureMappingShader->SetMatrix("gProjectionMatrix", &matProjection);


	gpTextureMappingShader->SetVector("gWorldLightPosition", &gWorldLightPosition);
	gpTextureMappingShader->SetVector("gWorldCameraPosition", &gWorldCameraPosition);
	// gpTextureMappingShader->SetTexture("DiffuseMap_Tex", gpEarthDM);

	// 쉐이더 적용.
	UINT numPasses = 0;
	gpTextureMappingShader->Begin(&numPasses, NULL);
	for (UINT i = 0; i < numPasses; ++i) {
		gpTextureMappingShader->BeginPass(i);

		gpSphere->DrawSubset(0);

		gpTextureMappingShader->EndPass();
	}
	gpTextureMappingShader->End();


}
示例#15
0
//*************************************************************************************************************
void BrightPass()
{
	device->SetRenderTarget(0, dssurfaces[0]);
	device->SetTexture(0, scenetarget);

	tmpvert[6] = tmpvert[24] = tmpvert[30] = (float)screenwidth * 0.5f - 0.5f;
	tmpvert[13] = tmpvert[19] = tmpvert[31] = (float)screenheight * 0.5f - 0.5f;

	hdreffect->SetTechnique("brightpass");

	hdreffect->Begin(NULL, 0);
	hdreffect->BeginPass(0);
	{
		device->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 2, tmpvert, sizeof(D3DXVECTOR4) + sizeof(D3DXVECTOR2));
	}
	hdreffect->EndPass();
	hdreffect->End();

	// generate afterimage now
	device->SetRenderTarget(0, aftersurfaces[afterimagetex]);

	if( afterimage )
	{
		device->SetTexture(0, afterimages[1 - afterimagetex]);
		device->SetTexture(1, dstargets[0]);

		hdreffect->SetTechnique("afterimage");

		hdreffect->Begin(NULL, 0);
		hdreffect->BeginPass(0);
		{
			device->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 2, tmpvert, sizeof(D3DXVECTOR4) + sizeof(D3DXVECTOR2));
		}
		hdreffect->EndPass();
		hdreffect->End();
	}
	else
		device->Clear(0, NULL, D3DCLEAR_TARGET, 0, 1, 0);

	afterimagetex = 1 - afterimagetex;
}
示例#16
0
void DrawImage(LPDIRECT3DTEXTURE9 pSource1, sImageInfo *pInfo, float x0, float y0, float width, float height)
{
	LPDIRECT3DDEVICE9 device = GutGetGraphicsDeviceDX9();

	g_pEffect->SetTechnique(g_pAddImageShader);
	D3DXHANDLE pTexture1Var = g_pEffect->GetParameterByName(NULL, "Image");

	g_pEffect->SetTexture(pTexture1Var, pSource1);

	g_pEffect->Begin(NULL, 0);
	g_pEffect->BeginPass(0);

	DrawScreenQuad(pInfo, x0, y0, width, height);

	g_pEffect->EndPass();
	g_pEffect->End();
}
示例#17
0
void Manipulator::RenderSphere(LPD3DXEFFECT effect,
    const Matrix& projection, const Matrix& view,
    const D3DXVECTOR3& color, const Transform& world)
{
    D3DXMATRIX wvp = world.GetMatrix() * view.GetMatrix() * projection.GetMatrix();
    effect->SetMatrix(DxConstant::WordViewProjection, &wvp);
    effect->SetFloatArray(DxConstant::VertexColor, &color.x, 3);

    UINT nPasses = 0;
    effect->Begin(&nPasses, 0);
    for(UINT iPass = 0; iPass < nPasses; iPass++)
    {
        effect->BeginPass(iPass);
        m_sphere->DrawSubset(0);
        effect->EndPass();
    }
    effect->End();
}
示例#18
0
//*************************************************************************************************************
void BlurTexture(LPDIRECT3DTEXTURE9 tex)
{
	LPDIRECT3DSURFACE9 surface = NULL;
	LPDIRECT3DSURFACE9 blursurface = NULL;
	LPDIRECT3DTEXTURE9 blurtex = NULL;

	D3DXVECTOR4 texelsize(1.0f / SHADOWMAP_SIZE, 0, 0, 0);
	D3DSURFACE_DESC desc;

	tex->GetLevelDesc(0, &desc);

	if( desc.Format == D3DFMT_A8R8G8B8 )
		blurtex = blurARGB8; // for convolution
	else
		blurtex = blurRGBA32F; // for others

	blurtex->GetSurfaceLevel(0, &blursurface);
	tex->GetSurfaceLevel(0, &surface);

	device->SetRenderTarget(0, blursurface);
	device->SetTexture(0, tex);
	device->SetVertexDeclaration(vertexdecl);

	boxblur5x5->SetVector("texelSize", &texelsize);

	boxblur5x5->Begin(NULL, 0);
	boxblur5x5->BeginPass(0);
	{
		device->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 2, &vertices[0], 6 * sizeof(float));
		std::swap(texelsize.x, texelsize.y);

		boxblur5x5->SetVector("texelSize", &texelsize);
		boxblur5x5->CommitChanges();

		device->SetRenderTarget(0, surface);
		device->SetTexture(0, blurtex);
		device->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 2, &vertices[0], 6 * sizeof(float));
	}
	boxblur5x5->EndPass();
	boxblur5x5->End();

	surface->Release();
	blursurface->Release();
}
示例#19
0
static void RenderParticle(void)
{
	LPDIRECT3DDEVICE9 device = GutGetGraphicsDeviceDX9();
	int w, h; GutGetWindowSize(w, h);

	Matrix4x4 wvp_matrix = g_Control.GetObjectMatrix() * g_Control.GetViewMatrix() * g_proj_matrix;
	Vector4 ScreenSize( (float)w, (float)h, 0.0f, 0.0f);
	float fTanW = FastMath::Tan( FastMath::DegToRad(g_fFOV) );

	device->SetRenderTarget(0, g_pMainFramebuffer);
	device->SetDepthStencilSurface(g_pMainDepthbuffer);
	device->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER|D3DCLEAR_STENCIL, 0x0, 1.0f, 0);

	D3DXHANDLE shader = g_pParticleRenderFX->GetTechniqueByName("RenderParticle");
	D3DXHANDLE positiontex_var = g_pParticleRenderFX->GetParameterByName(NULL, "PositionTex");
	D3DXHANDLE velocitytex_var = g_pParticleRenderFX->GetParameterByName(NULL, "VelocityTex");
	D3DXHANDLE wvp_matrix_var = g_pParticleRenderFX->GetParameterByName(NULL, "wvp_matrix");
	D3DXHANDLE tan_fov_var = g_pParticleRenderFX->GetParameterByName(NULL, "fTanW");
	D3DXHANDLE screensize_var = g_pParticleRenderFX->GetParameterByName(NULL, "ScreenSize");
	D3DXHANDLE diffusetex_var = g_pParticleRenderFX->GetParameterByName(NULL, "DiffuseTex");

	g_pParticleRenderFX->SetTechnique(shader);
	g_pParticleRenderFX->SetTexture(positiontex_var, g_pTextures[TEX_POSITION1]);
	g_pParticleRenderFX->SetTexture(velocitytex_var, g_pTextures[TEX_VELOCITY1]);
	g_pParticleRenderFX->SetMatrix(wvp_matrix_var, (D3DXMATRIX*)&wvp_matrix);
	g_pParticleRenderFX->SetVector(screensize_var, (D3DXVECTOR4*)&ScreenSize);
	g_pParticleRenderFX->SetFloat(tan_fov_var, fTanW);
	g_pParticleRenderFX->SetTexture(diffusetex_var, g_pParticleTexture);
	
	int num_processed_particles = (g_num_particles / g_texture_width) * g_texture_width;

	if ( num_processed_particles )
	{
		device->SetFVF(D3DFVF_TEX1);

		g_pParticleRenderFX->Begin(NULL,0);
		g_pParticleRenderFX->BeginPass(0);
			//device->SetRenderState(D3DRS_POINTSPRITEENABLE, TRUE);
			device->DrawPrimitiveUP(D3DPT_POINTLIST, num_processed_particles, g_pParticleArray, sizeof(sParticle));
			//device->SetRenderState(D3DRS_POINTSPRITEENABLE, FALSE);
		g_pParticleRenderFX->EndPass();
		g_pParticleRenderFX->End();
	}
}
示例#20
0
void ExpLuminance(LPDIRECT3DSURFACE9 pSurace, LPDIRECT3DTEXTURE9 pTexture, sImageInfo *pInfo)
{
	LPDIRECT3DDEVICE9 device = GutGetGraphicsDeviceDX9();

	device->SetRenderTarget(0, pSurace);

	D3DXHANDLE shader = g_pExposureEffect->GetTechniqueByName("ExpLuminance");
	D3DXHANDLE image_var = g_pExposureEffect->GetParameterByName(NULL, "Image");

	g_pExposureEffect->SetTechnique(shader);
	g_pExposureEffect->SetTexture(image_var, pTexture);

	g_pExposureEffect->Begin(NULL, 0);
	g_pExposureEffect->BeginPass(0);

	DrawFullScreenQuad(pInfo);

	g_pExposureEffect->EndPass();
	g_pExposureEffect->End();
}
示例#21
0
static void RenderWater(void)
{
	LPDIRECT3DDEVICE9 device = GutGetGraphicsDeviceDX9();

	D3DXHANDLE shader = g_pWaterEffect->GetTechniqueByName("Water");
	D3DXHANDLE normalmap_var = g_pWaterEffect->GetParameterByName(NULL, "NormalmapTex");
	D3DXHANDLE watermap_var = g_pWaterEffect->GetParameterByName(NULL, "WaterTex");
	D3DXHANDLE texcoordscale_var = g_pWaterEffect->GetParameterByName(NULL, "fTexcoordScale");
	
	g_pWaterEffect->SetTechnique(shader);
	g_pWaterEffect->SetTexture(normalmap_var, g_pTextures[TEX_NORMAL]);
	g_pWaterEffect->SetTexture(watermap_var, g_pWaterTexture);
	g_pWaterEffect->SetFloat(texcoordscale_var, 0.2f);

	g_pWaterEffect->Begin(NULL,0);
	g_pWaterEffect->BeginPass(0);
		GutDrawFullScreenQuad_DX9(&g_ImageInfo);
	g_pWaterEffect->EndPass();
	g_pWaterEffect->End();
}
示例#22
0
//*************************************************************************************************************
void DrawScene(LPD3DXEFFECT effect)
{
	D3DXMATRIX	world;
	D3DXMATRIX	inv;
	D3DXVECTOR4	uv(3, 3, 0, 0);

	D3DXMatrixScaling(&world, 5, 0.1f, 5);
	D3DXMatrixInverse(&inv, NULL, &world);

	effect->SetMatrix("matWorld", &world);
	effect->SetMatrix("matWorldInv", &inv);
	effect->SetVector("uv", &uv);

	effect->Begin(0, 0);
	effect->BeginPass(0);
	{
		device->SetTexture(0, texture2);
		shadowreceiver->DrawSubset(0);

		if( !drawsilhouette )
		{
			device->SetTexture(0, texture1);

			uv.x = uv.y = 1;
			effect->SetVector("uv", &uv);

			for( int i = 0; i < NUM_OBJECTS; ++i )
			{
				D3DXMatrixInverse(&inv, NULL, &objects[i].world);

				effect->SetMatrix("matWorld", &objects[i].world);
				effect->SetMatrix("matWorldInv", &inv);
				effect->CommitChanges();

				objects[i].object->DrawSubset(0);
			}
		}
	}
	effect->EndPass();
	effect->End();
}
示例#23
0
void DrawImage(LPDIRECT3DTEXTURE9 pSource, float x0, float y0, float w, float h, sImageInfo *pInfo, bool bRedOnly = false)
{
	LPDIRECT3DDEVICE9 device = GutGetGraphicsDeviceDX9();

	D3DXHANDLE shader = g_pPostEffect->GetTechniqueByName(bRedOnly ? "DrawImageRedChannel" : "DrawImage");
	D3DXHANDLE pTextureVar = g_pPostEffect->GetParameterByName(NULL, "Image");

	g_pPostEffect->SetTechnique(shader);
	g_pPostEffect->SetTexture(pTextureVar, pSource);

	// 設定頂點資料格式	
	device->SetFVF(D3DFVF_XYZ|D3DFVF_TEX1);

	g_pPostEffect->Begin(NULL, 0);
	g_pPostEffect->BeginPass(0);

	GutDrawScreenQuad_DX9(x0, y0, w, h, pInfo);

	g_pPostEffect->EndPass();
	g_pPostEffect->End();
}
示例#24
0
static void HeightmapToNormal(void)
{
	LPDIRECT3DDEVICE9 device = GutGetGraphicsDeviceDX9();

	device->SetRenderTarget(0, g_pSurfaces[TEX_NORMAL]);
	device->SetDepthStencilSurface(NULL);

	D3DXHANDLE shader = g_pWaterEffect->GetTechniqueByName("ConvertNormal");
	D3DXHANDLE heightmap_current_var = g_pWaterEffect->GetParameterByName(NULL, "heightmap_current");
	D3DXHANDLE normalscale_var = g_pWaterEffect->GetParameterByName(NULL, "fNormalScale");
	
	g_pWaterEffect->SetTechnique(shader);
	g_pWaterEffect->SetTexture(heightmap_current_var, g_pTextures[TEX_HEIGHT2]);
	g_pWaterEffect->SetFloat(normalscale_var, 1.0f);

	g_pWaterEffect->Begin(NULL,0);
	g_pWaterEffect->BeginPass(0);
		GutDrawFullScreenQuad_DX9(&g_ImageInfo);
	g_pWaterEffect->EndPass();
	g_pWaterEffect->End();
}
void CollisionMesh::DrawMesh(const Matrix& projection, const Matrix& view, const D3DXVECTOR3& color)
{
    if(m_draw && m_geometry)
    {
        LPD3DXEFFECT shader = m_geometry->GetShader();
        D3DXMATRIX wvp = m_world.GetMatrix() * view.GetMatrix() * projection.GetMatrix();
        shader->SetMatrix(DxConstant::WordViewProjection, &wvp);
        shader->SetTechnique(DxConstant::DefaultTechnique);
        shader->SetFloatArray(DxConstant::VertexColor, &(color.x), 3);

        UINT nPasses = 0;
        shader->Begin(&nPasses, 0);
        for(UINT pass = 0; pass < nPasses; ++pass)
        {
            shader->BeginPass(pass);
            m_geometry->GetMesh()->DrawSubset(0);
            shader->EndPass();
        }
        shader->End();
    }
}
示例#26
0
void DrawImage(LPDIRECT3DTEXTURE9 pSource, sImageInfo *pInfo)
{
	LPDIRECT3DDEVICE9 device = GutGetGraphicsDeviceDX9();

	// 計算貼圖像素的貼圖座標間距
	int w = pInfo->m_iWidth;
	int h = pInfo->m_iHeight;

	float fTexelW = 1.0f/(float)w;
	float fTexelH = 1.0f/(float)h;

	// Direct3D9會偏移半個像素, 從貼圖座標來把它修正回來
	Vector4 vTexoffset(fTexelW*0.5f, fTexelH*0.5f, 0.0f, 1.0f);

	Vertex_VT quad[4];
	memcpy(quad, g_FullScreenQuad, sizeof(quad));
	for ( int i=0; i<4; i++ )
	{
		quad[i].m_Texcoord[0] += vTexoffset[0];
		quad[i].m_Texcoord[1] += vTexoffset[1];
	}

	D3DXHANDLE shader = g_pEffect->GetTechniqueByName("DrawImage");
	D3DXHANDLE pTextureVar = g_pEffect->GetParameterByName(NULL, "Image");

	g_pEffect->SetTechnique(shader);
	g_pEffect->SetTexture(pTextureVar, pSource);

	// 設定頂點資料格式	
	device->SetFVF(D3DFVF_XYZ|D3DFVF_TEX1);

	g_pEffect->Begin(NULL, 0);
	g_pEffect->BeginPass(0);
	
	device->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, quad, sizeof(Vertex_VT));
	
	g_pEffect->EndPass();
	g_pEffect->End();
}
示例#27
0
void ExpLuminance(void)
{
	LPDIRECT3DDEVICE9 device = GutGetGraphicsDeviceDX9();

	device->SetRenderTarget(0, g_pFrameSurface[LUMINANCE_TEMP]);

	D3DXHANDLE shader = g_pExposureEffect->GetTechniqueByName("ExpLuminance");
	D3DXHANDLE image_var = g_pExposureEffect->GetParameterByName(NULL, "Image");
	
	g_pExposureEffect->SetTechnique(shader);
	g_pExposureEffect->SetTexture(image_var, g_pFrameBuffer[LUMINANCE_CURRENT]);

	g_pExposureEffect->Begin(NULL, 0);
	g_pExposureEffect->BeginPass(0);

	DrawFullScreenQuad(&g_Image1x1);

	g_pExposureEffect->EndPass();
	g_pExposureEffect->End();

	SwapRenderTarget(LUMINANCE_TEMP, LUMINANCE_CURRENT);
}
示例#28
0
void AdaptiveLuminance(void)
{
	static int count = 0;
	LPDIRECT3DDEVICE9 device = GutGetGraphicsDeviceDX9();

	if ( count )
	{
		device->SetRenderTarget(0, g_pFrameSurface[LUMINANCE_TEMP]);

		D3DXHANDLE shader = g_pExposureEffect->GetTechniqueByName("AdaptiveLuminance");
		g_pExposureEffect->SetTechnique(shader);

		Vector4 vSpeed(0.03f);

		D3DXHANDLE speed_var = g_pExposureEffect->GetParameterByName(NULL, "vAdaptiveSpeed");
		D3DXHANDLE image0_var = g_pExposureEffect->GetParameterByName(NULL, "Image");
		D3DXHANDLE image1_var = g_pExposureEffect->GetParameterByName(NULL, "Image2");

		g_pExposureEffect->SetVector(speed_var, (D3DXVECTOR4*)&vSpeed);
		g_pExposureEffect->SetTexture(image0_var, g_pFrameBuffer[LUMINANCE_PREVIOUS]);
		g_pExposureEffect->SetTexture(image1_var, g_pFrameBuffer[LUMINANCE_CURRENT]);

		g_pExposureEffect->Begin(NULL, 0);
		g_pExposureEffect->BeginPass(0);

		DrawFullScreenQuad(&g_Image1x1);

		g_pExposureEffect->EndPass();
		g_pExposureEffect->End();
	}
	else
	{
		device->StretchRect(g_pFrameSurface[LUMINANCE_CURRENT], NULL, g_pFrameSurface[LUMINANCE_TEMP], NULL, D3DTEXF_POINT);
	}
	// copy
	//device->StretchRect(g_pFrameSurface[LUMINANCE_TEMP], NULL, g_pFrameSurface[LUMINANCE_PREVIOUS], NULL, D3DTEXF_POINT);
	SwapRenderTarget(LUMINANCE_TEMP, LUMINANCE_PREVIOUS);
	count++;
}
示例#29
0
//*************************************************************************************************************
void AdaptLuminance(float dt)
{
	char othertex = 4 + (5 - adapttex);

	// adapt luminance with time into other 1x1 texture (ping-pong them)
	device->SetRenderTarget(0, avglumsurfaces[othertex]);
	device->SetTexture(0, avglumtargets[adapttex]);	// old adapted luminance
	device->SetTexture(1, avglumtargets[3]);		// result of MeasureLuminance()

	hdreffect->SetTechnique("adaptluminance");
	hdreffect->SetFloat("elapsedtime", dt);

	hdreffect->Begin(NULL, 0);
	hdreffect->BeginPass(0);
	{
		device->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 2, tmpvert, sizeof(D3DXVECTOR4) + sizeof(D3DXVECTOR2));
	}
	hdreffect->EndPass();
	hdreffect->End();

	device->SetTexture(5, avglumtargets[othertex]);
	adapttex = othertex;
}
示例#30
0
//*************************************************************************************************************
void Render(float alpha, float elapsedtime)
{
	D3DXMATRIX vp, inv;
	D3DXVECTOR3 axis(0, 1, 0);

	device->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, 0xff6694ed, 1.0f, 0);
	device->SetTexture(0, tex);
	device->SetTexture(1, normalmap);

	D3DXMatrixMultiply(&vp, &view, &proj);
	D3DXMatrixInverse(&inv, NULL, &view);

	effect->SetVector("eyePos", (D3DXVECTOR4*)inv.m[3]);

	D3DXMatrixRotationAxis(&world, &axis, timeGetTime() / 1000.0f);
	D3DXMatrixInverse(&inv, NULL, &world);

	effect->SetMatrix("matWorld", &world);
	effect->SetMatrix("matWorldInv", &inv);
	effect->SetMatrix("matViewProj", &vp);

	if( SUCCEEDED(device->BeginScene()) )
	{
		effect->Begin(NULL, 0);
		effect->BeginPass(0);
		{
			mesh->DrawSubset(0);
		}
		effect->EndPass();
		effect->End();

		device->EndScene();
	}

	device->Present(NULL, NULL, NULL, NULL);
}