Пример #1
0
vsVector3D
vsVector3D::Normalised()
{
	float length = Length();

	vsAssert(length != 0.f, "Tried to normalise zero-length vector!");
	return vsVector3D(x/length, y/length, z/length);
}
Пример #2
0
vsMatrix3x3
vsMatrix3x3::operator*(vsMatrix3x3& b) const
{
	return vsMatrix3x3(
			vsVector3D(
				x.x * b.x.x + x.y * b.y.x + x.z * b.z.x,
				x.x * b.x.y + x.y * b.y.y + x.z * b.z.y,
				x.x * b.x.z + x.y * b.y.z + x.z * b.z.z
				),
			vsVector3D(
				y.x * b.x.x + y.y * b.y.x + y.z * b.z.x,
				y.x * b.x.y + y.y * b.y.y + y.z * b.z.y,
				y.x * b.x.z + y.y * b.y.z + y.z * b.z.z
				),
			vsVector3D(
				z.x * b.x.x + z.y * b.y.x + z.z * b.z.x,
				z.x * b.x.y + z.y * b.y.y + z.z * b.z.y,
				z.x * b.x.z + z.y * b.y.z + z.z * b.z.z
				)
			);
}
void
ctMode3D::Init()
{
	Parent::Init();

	vsBox3D dims( vsVector3D(-30.f, 0.f, -30.f), vsVector3D(30.f, 15.f, 30.f) );
	
	m_stage = new ctStage3D( dims );
	m_player = new ctPlayer3D( dims );
	m_player->SetPosition( vsVector2D(-25.f, 0.f) );
	
	m_stage->RegisterOnScene(0);
	m_player->RegisterOnScene(0);
	
	m_camera = new ctCamera3D;
	m_camera->Follow( m_player );
	vsSystem::GetScreen()->GetScene(0)->Set3D(true);
	vsSystem::GetScreen()->GetScene(0)->SetCamera3D(m_camera);
	
	
	//m_stage->AddBox( vsBox2D( vsVector2D(0.f,-2.f), vsVector2D(5.f,-1.f) ) );
	//m_stage->AddBox( vsBox2D( vsVector2D(10.f,-4.f), vsVector2D(15.f,-3.f) ) );
	//m_stage->AddBox( vsBox2D( vsVector2D(18.f,-5.f), vsVector2D(25.f,-4.f) ) );
}
Пример #4
0
vsVector3D operator-(const vsVector3D &vec) { return vsVector3D(-vec.x,-vec.y,-vec.z); }
Пример #5
0
void
vsRenderPipelineStageBloom::PreparePipeline( vsRenderPipeline *pipeline )
{
	RenderTargetRequest req;
	req.type = RenderTargetRequest::Type_MipmapLevel;
	req.depth = false;
	req.stencil = false;
	req.linear = true;
	req.mipmaps = false;
	req.antialias = false;
	req.share = true;

	for ( int i = 0; i < m_passCount; i++ )
	{
		req.mipmapLevel = i;
		m_passes[i].m_pass = pipeline->RequestRenderTarget(req, this);
		m_passes[i].m_pass2 = pipeline->RequestRenderTarget(req, this);
	}

	if ( !kernel_normalised )
	{
		// Normalize kernel coefficients
		float sum = 0;
		for (int c = 0; c < KERNEL_SIZE; c++)
			sum += kernel[c];
		for (int c = 0; c < KERNEL_SIZE; c++)
			kernel[c] *= (1.f / sum);
		kernel_normalised = true;
	}

	m_hipassMaterial = new vsDynamicMaterial;
	m_hipassMaterial->SetBlend(false);
	m_hipassMaterial->SetDrawMode(DrawMode_Absolute);
	m_hipassMaterial->SetColor(c_white);
	m_hipassMaterial->SetCullingType(Cull_None);
	m_hipassMaterial->SetZRead(false);
	m_hipassMaterial->SetZWrite(false);
	m_hipassMaterial->SetGlow(false);
	m_hipassMaterial->SetTexture(0, m_from->GetTexture(1));
	m_hipassMaterial->SetShader(new vsShader(passv, normalf, false, false));

	m_bloomBlurShader = new vsBloomBlurShader();

	for ( int i = 0; i < m_passCount; i++ )
	{
		float offsetx = 1.2f / m_passes[i].m_pass->GetWidth();
		float offsety = 1.2f / m_passes[i].m_pass->GetHeight();
		m_passes[i].m_horizontalBlurMaterial = new vsDynamicMaterial;
		m_passes[i].m_horizontalBlurMaterial->SetClampU(true);
		m_passes[i].m_horizontalBlurMaterial->SetClampV(true);
		m_passes[i].m_horizontalBlurMaterial->SetBlend(false);
		m_passes[i].m_horizontalBlurMaterial->SetTexture(0,m_passes[i].m_pass->GetTexture());
		m_passes[i].m_horizontalBlurMaterial->SetShader(m_bloomBlurShader);
		m_passes[i].m_horizontalBlurMaterial->GetResource()->m_shaderIsMine = false;
		m_passes[i].m_horizontalBlurMaterial->SetUniformF("offsetx", offsetx);
		m_passes[i].m_horizontalBlurMaterial->SetUniformF("offsety", 0.f);

		m_passes[i].m_verticalBlurMaterial = new vsDynamicMaterial;
		m_passes[i].m_verticalBlurMaterial->SetClampU(true);
		m_passes[i].m_verticalBlurMaterial->SetClampV(true);
		m_passes[i].m_verticalBlurMaterial->SetBlend(false);
		m_passes[i].m_verticalBlurMaterial->SetTexture(0,m_passes[i].m_pass2->GetTexture());
		m_passes[i].m_verticalBlurMaterial->SetShader(m_bloomBlurShader);
		m_passes[i].m_verticalBlurMaterial->GetResource()->m_shaderIsMine = false;
		m_passes[i].m_verticalBlurMaterial->SetUniformF("offsetx", 0.f);
		m_passes[i].m_verticalBlurMaterial->SetUniformF("offsety", offsety);

		m_passes[i].m_combinePassMaterial = new vsDynamicMaterial;
		m_passes[i].m_combinePassMaterial->SetBlend(true);
		m_passes[i].m_combinePassMaterial->SetColor(c_white);
		m_passes[i].m_combinePassMaterial->SetCullingType(Cull_None);
		m_passes[i].m_combinePassMaterial->SetZRead(false);
		m_passes[i].m_combinePassMaterial->SetZWrite(false);
		m_passes[i].m_combinePassMaterial->SetDrawMode(DrawMode_Add);
		m_passes[i].m_combinePassMaterial->SetGlow(false);
		m_passes[i].m_combinePassMaterial->SetClampU(true);
		m_passes[i].m_combinePassMaterial->SetClampV(true);
		m_passes[i].m_combinePassMaterial->SetTexture(0, m_passes[i].m_pass->GetTexture());
		m_passes[i].m_combinePassMaterial->SetShader(new vsBloomCombineShader);
	}

	m_fromMaterial = new vsDynamicMaterial;
	m_fromMaterial->SetBlend(false);
	m_fromMaterial->SetColor(c_white);
	m_fromMaterial->SetCullingType(Cull_None);
	m_fromMaterial->SetZRead(false);
	m_fromMaterial->SetZWrite(false);
	m_fromMaterial->SetGlow(false);
	m_fromMaterial->SetClampU(true);
	m_fromMaterial->SetClampV(true);
	m_fromMaterial->SetTexture(0, m_from->GetTexture());
	m_fromMaterial->SetShader(new vsBloomPassShader);

	m_vertices = new vsRenderBuffer(vsRenderBuffer::Type_Static);
	m_indices = new vsRenderBuffer(vsRenderBuffer::Type_Static);

	float ar = vsScreen::Instance()->GetAspectRatio();
	vsVector3D v[4] = {
		vsVector3D(-ar,-1.f,0.f),
		vsVector3D(-ar,1.f,0.f),
		vsVector3D(ar,-1.f,0.f),
		vsVector3D(ar,1.f,0.f)
	};
	vsVector2D t[4] = {
		vsVector2D(0.f,1.f),
		vsVector2D(0.f,0.f),
		vsVector2D(1.f,1.f),
		vsVector2D(1.f,0.f)
	};
	uint16_t ind[4] = { 0, 1, 2, 3 };

	vsRenderBuffer::PT pt[4];
	for ( int i = 0; i < 4; i++ )
	{
		pt[i].position = v[i];
		pt[i].texel = t[i];
	}
	m_vertices->SetArray(pt,4);
	m_indices->SetArray(ind,4);
}