Ejemplo n.º 1
0
void RenderSquareShadow(LPDIRECT3DDEVICE7 lpDevice,float x,float y,float z,float w,float h)
{
    WORD wIndices[] = { 
		0,1,2,
		3,2,1,
		1,5,3,
		3,5,7, 
		0,4,1,
		1,4,5, 
		0,2,4,
		4,2,6, 
		2,3,6,
		6,3,7,
	};

	D3DLIGHT7 light;
	lpDevice->GetLight(0,&light);
	D3DVECTOR length=Normalize(light.dvDirection)*(-100);

	D3DVERTEX v[8];

    v[0] = D3DVERTEX( D3DVECTOR( x-w/2, y, z-h/2 ),D3DVECTOR(0,1,0), 0, 1 );
    v[1] = D3DVERTEX( D3DVECTOR( x-w/2, y,  z+h/2 ),D3DVECTOR(0,1,0), 0, 0 );
    v[2] = D3DVERTEX( D3DVECTOR( x+w/2, y, z-h/2 ),D3DVECTOR(0,1,0), 1, 1 );
    v[3] = D3DVERTEX( D3DVECTOR( x+w/2, y,  z+h/2 ),D3DVECTOR(0,1,0), 1, 0 );

    v[4] = D3DVERTEX( D3DVECTOR( x-w/2, y, z-h/2 )-length,D3DVECTOR(0,1,0), 0, 0 );
    v[5] = D3DVERTEX( D3DVECTOR( x-w/2, y,  z+h/2 )-length,D3DVECTOR(0,1,0), 0, 0 );
    v[6] = D3DVERTEX( D3DVECTOR( x+w/2, y, z-h/2 )-length,D3DVECTOR(0,1,0), 0, 0 );
    v[7] = D3DVERTEX( D3DVECTOR( x+w/2, y,  z+h/2 )-length,D3DVECTOR(0,1,0), 0, 0 );

	RenderShadow(lpDevice,v,8,wIndices,sizeof(wIndices)/sizeof(wIndices[0]));
}
Ejemplo n.º 2
0
bool Display(float timeDelta)
{
    if( Device )
    {
        //
        // Update the scene:
        //

        static float radius = 20.0f;

        if( ::GetAsyncKeyState(VK_LEFT) & 0x8000f )
            TeapotPosition.x -= 3.0f * timeDelta;

        if( ::GetAsyncKeyState(VK_RIGHT) & 0x8000f )
            TeapotPosition.x += 3.0f * timeDelta;

        if( ::GetAsyncKeyState(VK_UP) & 0x8000f )
            radius -= 2.0f * timeDelta;

        if( ::GetAsyncKeyState(VK_DOWN) & 0x8000f )
            radius += 2.0f * timeDelta;


        static float angle = (3.0f * D3DX_PI) / 2.0f;

        if( ::GetAsyncKeyState('A') & 0x8000f )
            angle -= 0.5f * timeDelta;

        if( ::GetAsyncKeyState('S') & 0x8000f )
            angle += 0.5f * timeDelta;

        D3DXVECTOR3 position( cosf(angle) * radius, 3.0f, sinf(angle) * radius );
        D3DXVECTOR3 target(0.0f, 0.0f, 0.0f);
        D3DXVECTOR3 up(0.0f, 1.0f, 0.0f);
        D3DXMATRIX V;
        D3DXMatrixLookAtLH(&V, &position, &target, &up);
        Device->SetTransform(D3DTS_VIEW, &V);

        //
        // Draw the scene:
        //
        Device->Clear(0, 0,
                      D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER | D3DCLEAR_STENCIL,
                      0xff000000, 1.0f, 0L);

        Device->BeginScene();

        RenderScene();

        RenderShadow();

        Device->EndScene();
        Device->Present(0, 0, 0, 0);
    }
    return true;
}
Ejemplo n.º 3
0
 Bucket * RenderLight( const Vid::Light::Obj &light, const GETHEIGHTPROCPTR getHeightProc, const FINDFLOORPROCPTR findFloorProc) // = 0xfffffff, = GetHeight, = FindFloor 
 {
   Bucket * bucket = NULL;
   ShadowInfo si;
   if (BoundsTestLight( si, light, getHeightProc, findFloorProc))
   {
     bucket = RenderShadow( si, getHeightProc);
   }
   return bucket;
 }
Ejemplo n.º 4
0
  Bucket * RenderShadow( const Vid::Light::Obj & light, const Matrix & world, F32 radius, U32 shadowType, U32 translucency, const GETHEIGHTPROCPTR getHeightProc, const FINDFLOORPROCPTR findFloorProc) // = 0xfffffff, = GetHeight, = FindFloor 
  {
    light;

    Bucket * bucket = NULL;
    ShadowInfo si;
    if (BoundsTestShadow( si, world, radius, shadowType, translucency, getHeightProc, findFloorProc))
    {
      bucket = RenderShadow( si, getHeightProc);
    }
    return bucket;
  }
Ejemplo n.º 5
0
//  Deferred
void Deferred::Render()
{
	// 最後の演算結果をシェーダー側へ送る
	shader->SetValue("LightTex", m_sLight);
	shader->SetValue("SpecTex", m_sSpecular);

	// シャドウサーフェイスの更新
	if (m_bShadowFlag == true)
	{
		RenderShadow();
	}

	// FinalPassSurfaceに今までのSurfaceの情報を全て合わせる
	m_sScreen->RenderTarget();
	m_sBloomSeed->RenderTarget(1); // BloomSeed

	if (m_bShadowFlag == true)
	{
		m_mDiffuse->Render(0, 0, shader, "finalPut_Shadow");		//通常描画
	}
	else
	{
		m_mDiffuse->Render(0, 0, shader, "finalPut");		//影なし描画
	}


	// ここで描画
	tdnSystem::GetDevice()->SetRenderTarget(0, backbuffer);
	
	// ディファードのスクリーン
	m_sScreen->Render(0, 0);

	// フォアード(エフェクト)
	m_sForward->Render(0, 0, shader, "ToneMap");

	// フォアードの�@バックバッファ �Aブルーム という形にしました
	// 高輝度のサーフェイスを戻す
	tdnSystem::GetDevice()->SetRenderTarget(1, nullptr);

	////ライトサーフェイス画面クリア
	//m_sLight->RenderTarget();
	//m_sSpecular->RenderTarget(1);
	////バックバッファサーフェイスの復元・MRTの終了処理
	//tdnSystem::GetDevice()->SetRenderTarget(SURFACE_NAME::MRT_NORMAL, nullptr);
	//tdnSystem::GetDevice()->SetRenderTarget(SURFACE_NAME::MRT_SPECULAR, nullptr);

	// LOD
	m_sFog->Render(0, 0, RS::ADD);// フォグを重ねる

	tdnText::Draw(100, 600,0xff00ffff, "m_fExposure%.2f", m_fExposure);
	//m_sSpecular->Render(0, 0, shader, "ToneMap");
}
// RenderRecursive - recursively visit all sub-nodes in breadth-first mode
//-----------------------------------------------------------------------------
void CPUTRenderNode::RenderShadowRecursive(CPUTRenderParameters &renderParams)
{
    RenderShadow(renderParams);

    if(mpChild)
    {
        mpChild->RenderShadowRecursive(renderParams);
        CPUTRenderNode *pNode = mpChild->GetSibling();
        while(pNode)
        {
            pNode->RenderShadowRecursive(renderParams);
            pNode = pNode->GetSibling();
        }
    }
}
Ejemplo n.º 7
0
void GDynamicActor::RenderExtra( dword dwOption )
{
	if( !m_aOrnamentExtra.empty() ) GrpSuper::RenderOrnament( ORO_EXTRALOOP );
	if( m_bVolatileRenderExtraFlag )
	{
		m_bVolatileRenderExtraFlag = false;
	}
	// Render Children
	for( int iAtt=0; iAtt<m_aAttachedActor.Num(); iAtt++ )
	{
		DActor *pActor = ActorPtr( m_aAttachedActor[iAtt] );
		if( pActor ) pActor->Render( ARO_EXTRA );
	}
	// Render Shadow
	RenderShadow();
}
Ejemplo n.º 8
0
// Runden Schatten malen
void RenderRoundShadow(LPDIRECT3DDEVICE7 lpDevice,float x,float y,float z,float r)
{
#define EDGES 12
	static D3DVERTEX v[(EDGES+1)*2];

	D3DLIGHT7 light;
	lpDevice->GetLight(0,&light);
	D3DVECTOR length=Normalize(light.dvDirection)*(-100.0f);

	for (int i=0;i<=EDGES;i++)
	{
		v[i]=v[i+EDGES+1]=D3DVERTEX(D3DVECTOR(x+sinf(float(i)/float(EDGES)*g_PI*2.0f)*r,y,z+cosf(float(i)/float(EDGES)*g_PI*2.0f)*r),D3DVECTOR(0,1,0),0,0);
		v[i+EDGES+1].x-=length.x;
		v[i+EDGES+1].y-=length.y;
		v[i+EDGES+1].z-=length.z;
	}

	static WORD wIndices[(EDGES-2)*3+EDGES*6];
	const PWORD Cap=&wIndices[0];
	const PWORD Side=&wIndices[(EDGES-2)*3];

	for (i=0;i<EDGES-2;i++)
	{
		Cap[i*3]=0;
		Cap[i*3+1]=i+1;
		Cap[i*3+2]=i+2;
	}
	for (i=0;i<EDGES;i++)
	{
		Side[i*6+0]=i;
		Side[i*6+1]=i+EDGES+2;
		Side[i*6+2]=i+1;
		Side[i*6+3]=i;
		Side[i*6+4]=i+EDGES+1;
		Side[i*6+5]=i+EDGES+2;
	}

	RenderShadow(lpDevice,v,EDGES*2+2,wIndices,sizeof(wIndices)/sizeof(wIndices[0]));
//	RenderShadow(lpDevice,v,8,wIndices,(EDGES-2)*3);
}
Ejemplo n.º 9
0
void sceneRenderingTest::Render()
{
	tdnView::Activate();
	tdnView::Clear();

	if (m_bShaderFlag)
	{
		// G_Bufferクリア
		DeferredManagerEx.ClearLightSurface();
		DeferredManagerEx.ClearBloom();
		DeferredManagerEx.ClearGpuPointLight();

		// シェーダ更新
		DeferredManagerEx.G_Update(m_camera.pos);

		// 影
		RenderShadow();

		// シェーダ
		DeferredManagerEx.G_Begin();

		// ステージ描画
		g_stage->Render(shaderM, "G_Buffer");


		// シェーダ終わり
		DeferredManagerEx.G_End();


		DeferredManagerEx.DirLight(m_dirLight, Vector3(0.8f, 0.72f, 0.72f));
		DeferredManagerEx.HemiLight(Vector3(0.6f, 0.5f, 0.5f), Vector3(0.45f, 0.43f, 0.43f));

		// ポイントライト描画
		DeferredManagerEx.GpuPointLightRender();
			
		// 最後の処理
		{
			DeferredManagerEx.FinalBegin();

			// ステージ描画
			g_stage->Render(shaderM, "DefaultLighting");
			g_sky->Render();
			g_airou->Render(shaderM,"linecopy");

			//m_pAIROU_EF->Render();

			m_pAIROU_EF_IMP->Render();

			m_pWave->Render();

			m_pWind->Render();
			m_pWind2->Render();
			m_pGodHand->Render();

			m_pLocus->Render();

			m_pSpeedLine->Render();

			m_pPanel->Render3D();


			HeaveHoFinishUI->Render();

			// パーティクル
			ParticleManager::Render();

			DeferredManagerEx.FinalEnd();
		}

		// ブルーム
		DeferredManagerEx.BloomRender();

		DeferredManagerEx.GetTex(SURFACE_NAME_EX::POINT_LIGHT)->Render(0,0,1280/4, 720/4, 0, 0, 1280, 720);
		//DeferredManagerEx.GetTex(SURFACE_NAME_EX::ROUGHNESS)->Render(1280 / 4, 0, 1280 / 4, 720 / 4, 0, 0, 1280, 720);


		///*******************************/
		//// まずは今のサーフェイスを保存
		///*******************************/
		//Surface* surface;
		//tdnSystem::GetDevice()->GetRenderTarget(0, &surface);
		//

		////シャドウマップ用ステンシルバッファサーフェイスの作成!
		////if (FAILED(tdnSystem::GetDevice()->CreateDepthStencilSurface(size, size, D3DFMT_D24S8, D3DMULTISAMPLE_NONE, 0, FALSE, &m_pShadowStencilSurface, NULL)))
		////{
		////	MessageBox(tdnSystem::GetWindow(), "深度バッファが作成できなかった", "ERROR", MB_OK);
		////};


		//D3DVIEWPORT9 viewPort;
		//// 現在のビューポートの一時保管
		//tdnSystem::GetDevice()->GetViewport(&viewPort);

		//// ビューポートの作成
		//D3DVIEWPORT9 vp = { 0, 0, 1024, 1024, 0, 1.0f };
		//tdnSystem::GetDevice()->SetViewport(&vp);

		//// 現在のステンシルバッファを一時保管
		//Surface* SaveStencilSurface;
		//tdnSystem::GetDevice()->GetDepthStencilSurface(&SaveStencilSurface);

		//// ステンシルバッファに切り替え
		//tdnSystem::GetDevice()->SetDepthStencilSurface(StencilSurface);

		//g_ScrennShot->RenderTarget();
		//// 画面クリア
		//tdnSystem::GetDevice()->Clear(0, nullptr, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0x00000000, 1.0f, 0);

		//DeferredManagerEx.GetTex(SURFACE_NAME_EX::SCREEN)->Render(0, 0);
		//SurfaceRender();
		//tdnPolygon::Rect(128, 128, 512);

		//tdnSystem::GetDevice()->SetRenderTarget(0, surface);//レンダーターゲットの復元		
		//tdnSystem::GetDevice()->SetDepthStencilSurface(SaveStencilSurface);	//ステンシルバッファの復元														
		//tdnSystem::GetDevice()->SetViewport(&viewPort);//ビューポートの復元


		//if (KeyBoard(KB_J))
		//{
		//	g_ScrennShot->Render(0, 200,1280/2,720/2,0,0,1280,720);			
		//}

		//if (KeyBoard(KB_NUMPAD1) == 1)
		//{
		//	Effect2DMgr.OutputPng("Effect/b.png", 1);
		//}
		//if (KeyBoard(KB_NUMPAD2) == 1)
		//{
		//	Effect2DMgr.OutputPngLine("Effect/a.p", 2,4);
		//}

		//g_DamageEF->Render(300, 0);
	}
	else
	{

	}

	g_scoreUI->Render();

	//if (KeyBoardTRG(KB_6))
	//{
	//	// スクショ出力
	//	D3DXSaveTextureToFile("screenshot.png", D3DXIFF_PNG, DeferredManagerEx.GetTex(SURFACE_NAME_EX::BLOOM)->GetTexture() , NULL);
	//	D3DXSaveTextureToFile("screenshot2.png", D3DXIFF_PNG, g_ScrennShot->GetTexture(), NULL);

	//}

	// 

	tdnText::Draw(0, 30, 0xffffffff, "CameraPos    : %.1f %.1f %.1f", m_camera.pos.x, m_camera.pos.y, m_camera.pos.z);
	tdnText::Draw(0, 60, 0xffffffff, "CameraTarget : %.1f %.1f %.1f", m_camera.target.x, m_camera.target.y, m_camera.target.z);

	//Effect2DMgr.Render();
}
Ejemplo n.º 10
0
	bool iLight3D::BeginDraw(cRenderSettings *apRenderSettings,iLowLevelGraphics *apLowLevelGraphics)
	{
		// Clear Stencil Buffer
/*		apLowLevelGraphics->SetClearStencilActive(true);
		apLowLevelGraphics->SetClearDepthActive(false);
		apLowLevelGraphics->SetClearColorActive(false);

		apLowLevelGraphics->SetClearStencil(0);

		apLowLevelGraphics->ClearScreen();

		apLowLevelGraphics->SetClearStencilActive(false);
		apLowLevelGraphics->SetClearDepthActive(true);
        apLowLevelGraphics->SetClearColorActive(true);*/


		cRect2l ClipRect;
		bool bVisible = CreateClipRect(ClipRect, apRenderSettings,apLowLevelGraphics);

		if(bVisible)
		{
			apLowLevelGraphics->SetScissorActive(true);
			apLowLevelGraphics->SetScissorRect(ClipRect);

			if(apRenderSettings->mbLog)
				Log("Cliprect pos: (%d, %d) size: (%d, %d)\n",ClipRect.x, ClipRect.y, ClipRect.w, ClipRect.h);
		}
		else
		{
			if(apRenderSettings->mbLog)
				Log("Cliprect entire screen\n");
		}

		//////////////////////////////////////////////////////////
		// Cast shadows
        if(mbCastShadows && apRenderSettings->mShowShadows != eRendererShowShadows_None
			&& apRenderSettings->mpVtxExtrudeProgram != NULL)
		{
			//Get temp index array. (Remove this when the index pool
			// is implemented.).
			mpIndexArray = apRenderSettings->mpTempIndexArray;

			//Setup for shadow drawing
			apLowLevelGraphics->SetStencilActive(true);
			//Do no set this when debugging.
			apLowLevelGraphics->SetColorWriteActive(false, false, false,false);

			///////////////////////////////////////////////////////////////////////////
			//Clear stencil, since scissor is set this should be fast.
			apLowLevelGraphics->SetClearStencilActive(true);
			apLowLevelGraphics->SetClearDepthActive(false);
			apLowLevelGraphics->SetClearColorActive(false);

			apLowLevelGraphics->SetClearStencil(0);

			apLowLevelGraphics->ClearScreen();

			apLowLevelGraphics->SetClearStencilActive(false);
			apLowLevelGraphics->SetClearDepthActive(true);
			apLowLevelGraphics->SetClearColorActive(true);

			if(apLowLevelGraphics->GetCaps(eGraphicCaps_TwoSideStencil))
			{
				apLowLevelGraphics->SetCullActive(false);
			}

			apLowLevelGraphics->SetDepthWriteActive(false);

			//Setup the depth test so that shadow volume is not rendered in front
			//off the normal graphics.
			apLowLevelGraphics->SetDepthTestFunc(eDepthTestFunc_Less);

			//Resert the algo (zfail or zpass) used.
            apRenderSettings->mlLastShadowAlgo=0;

			//Reset this variable so it can be used when rendering shadows.
			apRenderSettings->mbMatrixWasNULL = false;

			//Set the fragment program.
			if(apRenderSettings->mpFragExtrudeProgram)
			{
				if(apRenderSettings->mbLog)Log("Setting fragment program: '%s'\n",
													apRenderSettings->mpFragExtrudeProgram->GetName().c_str());
				apRenderSettings->mpFragExtrudeProgram->Bind();
				apRenderSettings->mpFragmentProgram = apRenderSettings->mpFragExtrudeProgram;

			}


			//Set the vertex program.
			if(apRenderSettings->mbLog)Log("Setting vertex program: '%s'\n",
											apRenderSettings->mpVtxExtrudeProgram->GetName().c_str());
			apRenderSettings->mpVtxExtrudeProgram->Bind();
			apRenderSettings->mpVertexProgram = apRenderSettings->mpVtxExtrudeProgram;

			//Render shadows
			tCasterCacheSetIt it = m_setDynamicCasters.begin();

			if(apRenderSettings->mShowShadows == eRendererShowShadows_All)
			{
				it = m_setDynamicCasters.begin();
				for(; it!= m_setDynamicCasters.end(); ++it)
				{
					RenderShadow(*it,apRenderSettings,apLowLevelGraphics);
				}
			}

			it = m_setStaticCasters.begin();
			for(; it!= m_setStaticCasters.end(); ++it)
			{
				RenderShadow(*it,apRenderSettings,apLowLevelGraphics);
			}

			//Make rendering ready for the objects.
			//apLowLevelGraphics->SetStencilTwoSideActive(false);

			apLowLevelGraphics->SetDepthTestFunc(eDepthTestFunc_Equal);

			apLowLevelGraphics->SetColorWriteActive(true, true, true,true);
			apLowLevelGraphics->SetCullActive(true);

			apLowLevelGraphics->SetStencil(eStencilFunc_Equal,0,0xFF,
											eStencilOp_Keep,eStencilOp_Keep, eStencilOp_Keep);
		}

		//Reset this var so that the new light properties are set.
		apRenderSettings->mbMatrixWasNULL = false;

		return true;
	}
void SoulDestroyer::Render( double _predictionTime )
{        
    _predictionTime -= SERVER_ADVANCE_PERIOD;

    if( !m_dead )
    {
        glDisable( GL_TEXTURE_2D );
        
        Vector3 predictedPos = m_pos + m_vel * _predictionTime;
        Vector3 predictedFront = m_front;
        Vector3 predictedUp = m_up;
        Vector3 predictedRight = predictedUp ^ predictedFront;
        predictedFront = predictedRight ^ predictedUp;
	    Matrix34 mat(predictedFront, predictedUp, predictedPos);
             
//        RenderSphere( m_targetPos, 5.0 );
//        RenderSphere( predictedPos, 300.0 );
//        RenderArrow( m_pos, m_pos+predictedFront * 200.0, 3.0, RGBAColour(0,255,0) );
//        RenderArrow( m_pos, m_pos+predictedUp * 100.0, 2.0, RGBAColour(255,0,0) );
//        RenderArrow( m_pos, m_pos+predictedRight * 100.0, 2.0, RGBAColour(0,0,255) );

        RenderShapes( _predictionTime );


        //
        // Render shadows

        BeginRenderShadow();
        RenderShadow( predictedPos, 50.0 );

        for( int i = 1; i < m_positionHistory.Size(); i+=1 )
        {
            Vector3 pos1 = *m_positionHistory.GetPointer(i);
            Vector3 pos2 = *m_positionHistory.GetPointer(i-1);

            Vector3 pos = pos1 + (pos2 - pos1);
            Vector3 vel = (pos2 - pos1) / SERVER_ADVANCE_PERIOD;
            pos += vel * _predictionTime;

            double scale = 1.0 - ( (double) i / (double) m_positionHistory.Size() );
            scale *= 1.5;
            if( i == m_positionHistory.Size()-1 )   scale = 0.8;            
            scale = max( scale, 0.5 );

            RenderShadow( pos, scale*20.0 );
        }
        
        EndRenderShadow();


        //
        // Render our spirits

        glDisable       ( GL_DEPTH_TEST );
        glDisable       ( GL_CULL_FACE );
        glBlendFunc     ( GL_SRC_ALPHA, GL_ONE );
        glEnable        ( GL_BLEND );
        glDepthMask     ( false );
        glBegin         ( GL_QUADS );

        double timeNow = GetHighResTime();
        for( int i = 0; i < m_spirits.Size(); ++i )
        {
            if( m_spirits.ValidIndex(i) )
            {
                double birthTime = m_spirits[i];
                if( timeNow >= birthTime + 60.0 )
                {
                    m_spirits.RemoveData(i);
                }
                else
                {
                    double alpha = 1.0 - (timeNow - m_spirits[i]) / 60.0;
                    alpha = min( alpha, 1.0 );
                    alpha = max( alpha, 0.0 );
                    Vector3 pos = m_pos + m_spiritPosition[i];
                    pos += m_vel * _predictionTime;
                    RenderSpirit( pos, alpha );
                }
            }
        }

        glEnd			();
        glDepthMask     ( true );
        glDisable       ( GL_BLEND );
        glBlendFunc     ( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
        glEnable        ( GL_CULL_FACE );
        glEnable        ( GL_DEPTH_TEST );


        //glColor4f( 1.0, 1.0, 1.0, 1.0 );
        //g_editorFont.DrawText3DCentre( predictedPos+Vector3(0,50,0), 20, "%2.2", m_panic );
    }
}
Ejemplo n.º 12
0
 Bucket * RenderShadow( const Matrix & world, F32 radius, U32 shadowType, U32 translucency, const GETHEIGHTPROCPTR getHeightProc, const FINDFLOORPROCPTR findFloorProc) // = 0xfffffff, = GetHeight, = FindFloor 
 {
   return RenderShadow( *Vid::Light::sun, world, radius, shadowType, translucency, getHeightProc, findFloorProc);
 }