vsVector3D vsVector3D::Normalised() { float length = Length(); vsAssert(length != 0.f, "Tried to normalise zero-length vector!"); return vsVector3D(x/length, y/length, z/length); }
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) ) ); }
vsVector3D operator-(const vsVector3D &vec) { return vsVector3D(-vec.x,-vec.y,-vec.z); }
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); }