Пример #1
0
void MainLoop(CPlatform * const  pPlatform)
{
	static float degrees[] = {0,0};
	CMatrix44 rot;	
	Transform transform(10);	

	//update the main application
	pPlatform->Tick();	
	WRender::ClearScreenBuffer(COLOR_BIT | DEPTH_BIT); //not really needed 
	transform.Push();
		program.SetMtx44(mt,transform.GetCurrentMatrix().data);
		WRender::Draw(WRender::TRIANGLE_STRIP, WRender::U_BYTE, sizeof(indices)/sizeof(unsigned char), 0);

		transform.Translate(0.2f,0.0,0.0);
		program.SetMtx44(mt,transform.GetCurrentMatrix().data);
		WRender::Draw(WRender::TRIANGLE_STRIP, WRender::U_BYTE, sizeof(indices)/sizeof(unsigned char), 0);
			

		transform.Push();				
			transform.Translate(-0.4f,0.0,0.0);
			rot.Identity();
			rot.Rotate(degrees[0],0,0,1);
			transform.ApplyTransform(rot);
			program.SetMtx44(mt,transform.GetCurrentMatrix().data);
			WRender::Draw(WRender::TRIANGLE_STRIP, WRender::U_BYTE, sizeof(indices)/sizeof(unsigned char), 0);

			transform.Push();
				transform.Translate(0.0,0.3f,0);
				program.SetMtx44(mt,transform.GetCurrentMatrix().data);
				WRender::Draw(WRender::TRIANGLE_STRIP, WRender::U_BYTE, sizeof(indices)/sizeof(unsigned char), 0);
			transform.Pop();
		transform.Pop();

		transform.Push();
			rot.Identity();
			rot.Rotate(degrees[1],0,0,1);
			transform.ApplyTransform(rot);
			transform.Translate(0.0,-0.3f,0.0);
			transform.ApplyTransform(rot);
			program.SetMtx44(mt,transform.GetCurrentMatrix().data);
			WRender::Draw(WRender::TRIANGLE_STRIP, WRender::U_BYTE, sizeof(indices)/sizeof(unsigned char), 0);
		transform.Pop();
	transform.Pop();
	//swap buffers
	pPlatform->UpdateBuffers();

	degrees[0] -= 360.0f*pPlatform->GetDT();
	degrees[1] += 180.0f*pPlatform->GetDT();
	if(degrees[0] < 0.0f)
		degrees[0] += 360.0f;
	if(degrees[1] > 360.0f)
		degrees[1] -= 360.0f;
}
Пример #2
0
	virtual CMatrix44<TReal> asMatrix(VOID)
	{
		CMatrix44<TReal> tmp;
		for(U8 i=0;i<NumRows;i++)
		{
			for(U8 j=0;j<NumCols;j++)
			{
				tmp.SetData(m_data[i][j],i,j);
			}
		}
		return tmp;
	}
Пример #3
0
//********************************************
// Set
//********************************************
void
CMatrix44::Set(const CMatrix44 &rMatrix)
{
  for(int i = 0; i < 4; i++)
    for(int j = 0; j < 4; j++)
      m_data[i][j] = rMatrix.Get(i,j);
}
Пример #4
0
void DrawGeometry(bool shadowPass)
{
	CMatrix44 rot;
	rot.Rotate(45,1,0,0);

	transform.Push();
	if(shadowPass == false)
		shadow_transform.Push();

	transforms.mvp = transforms.proj * transform.GetCurrentMatrix();
	WRender::UpdateBuffer(WRender::UNIFORM, WRender::DYNAMIC, ubo, sizeof(Transforms), (void*)&transforms, 0);				
	if(shadowPass == false)
		program.SetMtx44(uShadowMtx, shadow_transform.GetCurrentMatrix().data);
	//Plane
	WRender::BindVertexArrayObject(vaoPlane);
	WRender::DrawArray(WRender::TRIANGLES, 4*3, 0);

	transform.Pop();
	if(shadowPass == false)
		shadow_transform.Pop();
	
	transform.Push();
	if(shadowPass == false)
		shadow_transform.Push();
	
	transform.ApplyTransform(rot);
	transform.Translate(0, 5.0f, 0);
	if(shadowPass == false)
	{
		shadow_transform.ApplyTransform(rot);
		shadow_transform.Translate(0, 5.0f, 0);
	}
	transforms.mvp = transforms.proj * transform.GetCurrentMatrix();
	WRender::UpdateBuffer(WRender::UNIFORM, WRender::DYNAMIC, ubo, sizeof(Transforms), (void*)&transforms, 0);				
	if(shadowPass == false)
		program.SetMtx44(uShadowMtx, shadow_transform.GetCurrentMatrix().data);
	//Torus
	WRender::BindVertexArrayObject(vaoTorus);
	WRender::DrawArray(WRender::TRIANGLES, nTorusVertices, 0);

	transform.Pop();
	if(shadowPass == false)
		shadow_transform.Pop();
}
Пример #5
0
void MainLoop(CPlatform * const  pPlatform)
{
	float tranD[3] = {0.0f, -1.0f, 0};				
	//update the main application
	pPlatform->Tick();	
	WRender::ClearScreenBuffer(COLOR_BIT | DEPTH_BIT);
	WRender::EnableDepthTest(true);		
	program.Start();

	//Draw from light perspective
	//glPolygonOffset( 2.5f, 25.0f );
	//glEnable( GL_POLYGON_OFFSET_FILL);
	transform.Push();			
	{
		WRender::SetupViewport(0, 0, TEX_DIMENSIONS, TEX_DIMENSIONS);	//adjust viewport
		WRender::BindFrameBuffer(WRender::FrameBuffer::DRAW, fbo);		//set fbo 
		WRender::ClearScreenBuffer(COLOR_BIT | DEPTH_BIT);				//clear draw buffers (must be called after we set the fbo)

		rotLat.Identity();	rotLat.Rotate(lightLatitude, 1, 0, 0);
		rotLong.Identity();	rotLong.Rotate(lightLongitude, 0, 1, 0);

		transform.Translate(cameraPosition);			
		transform.ApplyTransform(rotLat);
		transform.ApplyTransform(rotLong);

		//setup shadow mvp
			
		shadow_transform.Identity();
		shadow_transform.Translate(0.5f, 0.5f, 0.5f);
		shadow_transform.Scale(0.5f,0.5f,0.5f);
		shadow_transform.ApplyTransform(transforms.proj);
		shadow_transform.ApplyTransform(transform.GetCurrentMatrix());
		DrawGeometry(true);

		WRender::UnbindFrameBuffer(WRender::FrameBuffer::DRAW); //reset draw buffer
		WRender::SetupViewport(0, 0, 640, 640);	//reset viewport			
	}
	//glDisable( GL_POLYGON_OFFSET_FILL);
	transform.Pop();		

	//draw scene
	transform.Push();			
	{
		rotLat.Identity();	rotLat.Rotate(latitude, 1, 0, 0);
		rotLong.Identity();	rotLong.Rotate(longitude, 0, 1, 0);

		transform.Translate(cameraPosition);
		transform.ApplyTransform(rotLat);
		transform.ApplyTransform(rotLong);
		DrawGeometry(false);			
	}
	transform.Pop();		

	//render depth texture to screen
	textureShader.Start();
	WRender::BindVertexArrayObject(sqVao);					
	textureShader.SetVec3("translate",tranD);		
	WRender::Draw(WRender::TRIANGLE_STRIP, WRender::U_BYTE, sizeof(sqIndices)/sizeof(unsigned char), 0);		
		
	//update Keyboard
	pPlatform->UpdateBuffers();
	if(!pPlatform->GetKeyboard().keys[KB_LEFTSHIFT].IsPressed())
	{	pLat = &latitude; pLong = &longitude;}
	else
	{	pLat = &lightLatitude; pLong = &lightLongitude;}

	if(pPlatform->GetKeyboard().keys[KB_UP].IsPressed())
		*pLat += 90.0f * pPlatform->GetDT();
	if(pPlatform->GetKeyboard().keys[KB_DOWN].IsPressed())
		*pLat -= 90.0f * pPlatform->GetDT();
	if(pPlatform->GetKeyboard().keys[KB_LEFT].IsPressed())//l
		*pLong += 90.0f * pPlatform->GetDT();
	if(pPlatform->GetKeyboard().keys[KB_RIGHT].IsPressed())//r
		*pLong -= 90.0f * pPlatform->GetDT();		

}
Пример #6
0
void DrawGeometry(bool shadowPass)
{
	CMatrix44 rot;
	rot.Rotate(45,1,0,0);
#ifdef ANIM_TORUS
	static float angle = 0;
	CMatrix44 anim;
	anim.Rotate(angle,0,1,0);
	angle += 0.1f;
#endif

	transform.Push();
	if(shadowPass == false)
		for(unsigned int i=0;i<NUM_SHADOWS; i++)
			shadow_transform[i].Push();

	transforms.mvp = transforms.proj * transform.GetCurrentMatrix();
	WRender::UpdateBuffer(WRender::UNIFORM, WRender::DYNAMIC, ubo, sizeof(Transforms), (void*)&transforms, 0);				
	if(shadowPass == false)
	{
		for(unsigned int i=0;i<NUM_SHADOWS; i++)
			shadowMtx[i] = shadow_transform[i].GetCurrentMatrix();
		WRender::UpdateBuffer(WRender::UNIFORM, WRender::DYNAMIC, shadowUBO, sizeof(CMatrix44)*NUM_SHADOWS, (void*)shadowMtx, 0);
		//WRender::UpdateBuffer(WRender::UNIFORM, WRender::DYNAMIC, shadowUBO, sizeof(CMatrix44)*NUM_SHADOWS, (void*)shadowMtx, sizeof(CMatrix44));
	}
	//Plane
	WRender::BindVertexArrayObject(vaoPlane);
	WRender::DrawArray(WRender::TRIANGLES, 4*3, 0);

	transform.Pop();
	if(shadowPass == false)
		for(unsigned int i=0;i<NUM_SHADOWS; i++)
			shadow_transform[i].Pop();
	
	transform.Push();
	if(shadowPass == false)
		for(unsigned int i=0;i<NUM_SHADOWS; i++)
			shadow_transform[i].Push();
	
	#ifdef ANIM_TORUS
	transform.ApplyTransform(anim);
	#endif
	transform.Translate(0, 3.0f, 5.0f);
	transform.ApplyTransform(rot);	

	if(shadowPass == false)
	{
		for(unsigned int i=0;i<NUM_SHADOWS; i++)
		{
			#ifdef ANIM_TORUS
			shadow_transform[i].ApplyTransform(anim);
			#endif
			shadow_transform[i].Translate(0, 3.0f, 5.0f);
			shadow_transform[i].ApplyTransform(rot);			
		}
	}
	transforms.mvp = transforms.proj * transform.GetCurrentMatrix();
	WRender::UpdateBuffer(WRender::UNIFORM, WRender::DYNAMIC, ubo, sizeof(Transforms), (void*)&transforms, 0);				
	if(shadowPass == false)
	{
		for(unsigned int i=0;i<NUM_SHADOWS; i++)
			shadowMtx[i] = shadow_transform[i].GetCurrentMatrix();
		WRender::UpdateBuffer(WRender::UNIFORM, WRender::DYNAMIC, shadowUBO, sizeof(CMatrix44)*NUM_SHADOWS, (void*)shadowMtx, sizeof(CMatrix44));
	}
	//Torus
	WRender::BindVertexArrayObject(vaoTorus);
	WRender::DrawArray(WRender::TRIANGLES, nTorusVertices, 0);

	transform.Pop();
	if(shadowPass == false)
	{
		for(unsigned int i=0;i<NUM_SHADOWS; i++)
			shadow_transform[i].Pop();
	}
}