Ejemplo n.º 1
0
sMaterialDesc clASELoader::CreateMaterialFromASE( const sASEMaterial& ASEMaterial )
{
	if ( ASEMaterial.FName == "internal" )
	{
		sMaterialDesc Mtl;

		// covert to engine's material - also check local dir for textures
		Mtl.FAmbientMap  = LStringBuffer( Env->FileSystem->FindFile( ASEMaterial.FAmbientMap.FBitmap, FStream->GetVirtualFileName() ) );
		Mtl.FDiffuseMap  = LStringBuffer( Env->FileSystem->FindFile( ASEMaterial.FDiffuseMap.FBitmap, FStream->GetVirtualFileName() ) );
		Mtl.FSpecularMap = LStringBuffer( Env->FileSystem->FindFile( ASEMaterial.FSpecularMap.FBitmap, FStream->GetVirtualFileName() ) );
		Mtl.FBumpMap     = LStringBuffer( Env->FileSystem->FindFile( ASEMaterial.FBumpMap.FBitmap, FStream->GetVirtualFileName() ) );

		// convert colors
		Mtl.FProperties.FAmbientColor  = LVector4( ASEMaterial.FAmbient,  1.0f );
		Mtl.FProperties.FDiffuseColor  = LVector4( ASEMaterial.FDiffuse,  1.0f );
		Mtl.FProperties.FSpecularColor = LVector4( ASEMaterial.FSpecular, 1.0f );

		Mtl.FProperties.FTransparency  = ASEMaterial.FTransparency;

		return Mtl;
	}

	// check if we have material file with the same name as this ASE material

	// check local dir for material
	LString MatName = Env->FileSystem->FindFile( ASEMaterial.FName, FStream->GetVirtualFileName() );

	LString TheFileName( Env->FileSystem->FileExists( MatName ) ? MatName : "MaterialSystem/default.material" );

	// load material if it exists
	return Env->Resources->LoadMaterial( TheFileName )->GetMaterialDesc();

}
Ejemplo n.º 2
0
void clGUIWindow::PreRender()
{
	clGUIDialogWindow::PreRender();

	static const float ResizeCornerW = Env->GUI->GetDefaultResizeCornerWidth();
	static const float ResizeCornerH = Env->GUI->GetDefaultResizeCornerHeight();

	UpdateUniformsV( FResizeCornerShader, LVector4( GetX2(), GetY2(), GetX2() - ResizeCornerW, GetY2() + ResizeCornerH ) );
	UpdateUniformsV( FResizeCornerHighlightShader, LVector4( GetX2(), GetY2(), GetX2() - ResizeCornerW, GetY2() + ResizeCornerH ) );

	FResizeCornerHighlighted ?
	Env->Renderer->AddBuffer( FResizeCornerGeometry, FResizeCornerHighlightShader, 1, false ) :
	Env->Renderer->AddBuffer( FResizeCornerGeometry, FResizeCornerShader, 1, false );

	static const float CloseButtonW    = Env->GUI->GetDefaultCloseButtonWidth();
	static const float CloseButtonH_D1 = Env->GUI->GetDefaultCloseButtonHeight_Delta1();
	static const float CloseButtonH_D2 = Env->GUI->GetDefaultCloseButtonHeight_Delta2();

	if ( FCloseButtonHighlighted )
	{
		UpdateUniformsV( FCloseButtonHighlightShader, LVector4( GetX2() - CloseButtonW, GetY1() + CloseButtonH_D1, GetX2(), GetY1() + CloseButtonH_D2 ) );
		Env->Renderer->AddBuffer( FCloseButtonGeometry, FCloseButtonHighlightShader, 1, false );
	}
	else
	{
		UpdateUniformsV( FCloseButtonShader, LVector4( GetX2() - CloseButtonW, GetY1() + CloseButtonH_D1, GetX2(), GetY1() + CloseButtonH_D2 ) );
		UpdateUniformsV( FCloseButtonCaptionHighlightedShader, LVector4( GetX2() - CloseButtonW, GetY1() + CloseButtonH_D1, GetX2(), GetY1() + CloseButtonH_D2 ) );

		ContainsCaption( Local2Screen( GetMousePos() ) ) ?
		Env->Renderer->AddBuffer( FCloseButtonGeometry, FCloseButtonCaptionHighlightedShader, 1, false ) :
		Env->Renderer->AddBuffer( FCloseButtonGeometry, FCloseButtonShader, 1, false );
	}
}
Ejemplo n.º 3
0
	//----------------------------------------------------------------------
	// ● カメラ単位でシェーダに送るデータの取得
	//----------------------------------------------------------------------
    LNCameraSceneParam* Camera::getCameraSceneParam()
    {
        mCameraSceneParam.Mat_CameraView     = &mCoreCamera.getViewMatrix();
        mCameraSceneParam.Mat_CameraProj     = &mCoreCamera.getProjectionMatrix();
        mCameraSceneParam.Mat_CameraViewProj = &mCoreCamera.getViewProjectionMatrix();
        mCameraSceneParam.CameraPosition     = LVector4( mCoreCamera.getPosition(), 0.0f );
        mCameraSceneParam.CameraDirection    = LVector4( mCoreCamera.getDirection(), 0.0f );
        mCameraSceneParam.calcMatrices();
        return &mCameraSceneParam;
    }
Ejemplo n.º 4
0
bool LFrustum::IsSphereInFrustum( const LSphere& Sphere ) const
{
	if ( Sphere.GetOrigin().SqrLength() < Linderdaum::Math::EPSILON /*IsZeroVector()*/ )
	{
		return true;
	}

	LVector4 Point4 = LVector4( Sphere.GetOrigin(), 1.0f );

//	int Planes = 0;

	for ( int i = 0; i != CheckPlanes; ++i )
	{
		float Distance = FPlanes[i].Dot( Point4 );

		// completely outside
		if ( Distance < -Sphere.GetRadius() ) { return false; }

		// partially inside
		if ( fabs( Distance ) < Sphere.GetRadius() ) { return true; }

//		if ( Distance > Sphere.GetRadius() ) Planes++;
	}

	// NOTE:  Planes == CheckPlanes  - full inside
	//        Planes != CheckPlanes  - partial inside

	return true;
}
Ejemplo n.º 5
0
LMatrix4 clASELoader::ASE_ReadNodeTM( iIStream* FStream )
{
	LMatrix4 TM;

	TM.IdentityMatrix();

	while ( !FStream->Eof() )
	{
		LString Line = FStream->ReadLineTrimLeadSpaces();

		if ( LStr::ContainsSubStr( Line, "}" ) )
		{
			break;
		}
		else if ( LStr::StartsWith( Line, ASE_TMRow0 ) )
		{
			TM[0] = LVector4( LStr::ToFloat( LStr::GetToken( Line, 2 ) ),
			                  LStr::ToFloat( LStr::GetToken( Line, 3 ) ),
			                  LStr::ToFloat( LStr::GetToken( Line, 4 ) ), 0.0 );
		}
		else if ( LStr::StartsWith( Line, ASE_TMRow1 ) )
		{
			TM[1] = LVector4( LStr::ToFloat( LStr::GetToken( Line, 2 ) ),
			                  LStr::ToFloat( LStr::GetToken( Line, 3 ) ),
			                  LStr::ToFloat( LStr::GetToken( Line, 4 ) ), 0.0 );
		}
		else if ( LStr::StartsWith( Line, ASE_TMRow2 ) )
		{
			TM[2] = LVector4( LStr::ToFloat( LStr::GetToken( Line, 2 ) ),
			                  LStr::ToFloat( LStr::GetToken( Line, 3 ) ),
			                  LStr::ToFloat( LStr::GetToken( Line, 4 ) ), 0.0 );
		}
		else if ( LStr::StartsWith( Line, ASE_TMRow3 ) )
		{
			TM[3] = LVector4( LStr::ToFloat( LStr::GetToken( Line, 2 ) ),
			                  LStr::ToFloat( LStr::GetToken( Line, 3 ) ),
			                  LStr::ToFloat( LStr::GetToken( Line, 4 ) ), 1.0 );
		}
		else
		{
			ASE_SkipBlock( FStream, Line );
		}
	}

	return TM;
}
void clCanvas::TexturedRect2DClipped( float X1, float Y1, float X2, float Y2, const LVector4& Color, const clPtr<clGLTexture>& Texture, const LVector4& ClipRect )
{
	LGL3->glDisable( GL_DEPTH_TEST );

	Texture->Bind( 0 );

	FTexRectSP->Bind();
	FTexRectSP->SetUniformNameVec4Array( "u_Color", 1, Color );
	FTexRectSP->SetUniformNameVec4Array( "u_RectSize", 1, LVector4( X1, Y1, X2, Y2 ) );
	FTexRectSP->SetUniformNameVec4Array( "u_Tiles", 1, LVector4( 1, 1, 0, 0 ) );
	FTexRectSP->SetUniformNameVec4Array( "u_ClipRect", 1, ClipRect );

	LGL3->glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
	LGL3->glEnable( GL_BLEND );

	FRectVA->Draw( false );

	LGL3->glDisable( GL_BLEND );
}
Ejemplo n.º 7
0
	//----------------------------------------------------------------------
	//
	//----------------------------------------------------------------------
    void CameraContext::updateContext()
    {
		mViewSize = mCamera->getViewSize();




        mPosition = LVector4( mCamera->mCoreCamera.getPosition(), 0 );
        mDirection = mCamera->mCoreCamera.getDirection();

        mFovY = mCamera->mCoreCamera.getFovY();
        mNearClip = mCamera->mCoreCamera.getNearClip();
        mFarClip = mCamera->mCoreCamera.getFarClip();

        mViewMatrix = mCamera->mCoreCamera.getViewMatrix();
        mProjectionMatrix= mCamera->mCoreCamera.getProjectionMatrix();
        mViewProjMatrix = mCamera->mCoreCamera.getViewProjectionMatrix();

        mZSortFunc = mCamera->mZSortFunc;

        mCameraSceneParam.Mat_CameraView = &mViewMatrix;
        mCameraSceneParam.Mat_CameraProj = &mProjectionMatrix;
        mCameraSceneParam.Mat_CameraViewProj = &mViewProjMatrix;
        mCameraSceneParam.CameraPosition = mPosition;
        mCameraSceneParam.CameraDirection = LVector4( mDirection, 0.0f );
		mCameraSceneParam.ViewPixelSize.Set( mViewSize.X, mViewSize.Y, 0, 0 );
		mCameraSceneParam.calcMatrices();

        mProjection2D = mCamera->isProjection2D();
        mOrthographic = mCamera->mOrthographic;

		this->mRenderRootNode = mCamera->mRenderRootNode;
//		LN_REFOBJ_SET( this->mRenderTarget, mCamera->mRenderTarget );

#if LNOTE_SCENE_CAMERA_SCREEN_EFFECT
		LN_REFOBJ_SET( this->mScreenEffect, mCamera->mScreenEffect );
		this->mBackgroundColor = mCamera->mBackgroundColor;
#endif
		
    }
Ejemplo n.º 8
0
void clGUISlider::PostRender()
{
	clGUIPanel::PostRender();

	UpdateUniformsV( FSlideBarShader, GetSliderCoords() );

	Env->Renderer->AddBuffer( FSlideBarGeometry, FSlideBarShader, 1, false );

	if ( FShowValue )
	{
		OutTextXY( 0.0, 0.0, LStr::ToStr( GetCurrentValue() ), LVector4( 1.0f, 0.0f, 0.0f, 0.5f ) );
	}
}
Ejemplo n.º 9
0
bool LFrustum::IsPointInFrustum( const LVector3& Point ) const
{
	LVector4 Point4 = LVector4( Point, 1.0f );

	for ( int i = 0; i != CheckPlanes; ++i )
	{
		if ( FPlanes[i].Dot( Point4 ) <= 0 )
		{
			return false;
		}
	}

	return true;
}
Ejemplo n.º 10
0
LVector4 clGUISlider::GetSliderCoords()
{
	if ( FCurrentValue < 0 ) { FCurrentValue = 0; }

	if ( FCurrentValue > GetWidth() - SliderWidth )
	{
		FCurrentValue = GetWidth() - SliderWidth;
	}

	float dX1 = FCurrentValue;
	float dX2 = FCurrentValue + SliderWidth;

	return LVector4( GetX1() + dX1, GetY1(),
	                 GetX1() + dX2, GetY2() );
}
Ejemplo n.º 11
0
LVector4 clGUIGauge::GetUniformsVec() const
{
	static const float OffsetX = Env->GUI->GetDefaultGaugeXOffset();
	static const float OffsetY = Env->GUI->GetDefaultGaugeYOffset();

	float Percent = 1.0f;

	if ( FMaxValue > 0 )
	{
		Percent = static_cast<float>( FCurrentValue ) / static_cast<float>( FMaxValue );
	}

	float BarLen = ( GetX2() - GetX1() ) * Percent;

	return LVector4( GetX1() + OffsetX, GetY1() + OffsetY, GetX1() + BarLen/*-OffsetX*/, GetY2() - OffsetY );
}
Ejemplo n.º 12
0
void clGUIColorDial::SetAlpha( const LVector2& Pnt )
{
	LVector2 dP = Screen2Local( Pnt );
	dP = LVector2( dP.X / GetWidth(), dP.Y / GetHeight() );

	float nx = ( dP.X - 0.5f ) * 2.0f;
	float ny = ( dP.Y - 0.5f ) * 2.0f;

	float r = sqrt( nx * nx + ny * ny );

	float r_min = FRMin;

	LVector2 p_color = -Math::ToPolar( r_min, FAlpha );
	LVector2 p_white = -Math::ToPolar( r_min, FAlpha + 120.0f );
	LVector2 p_black = -Math::ToPolar( r_min, FAlpha + 240.0f );

	LVector3 Mark = LVector3( FMousePoint.X * p_black + FMousePoint.Y * p_white + FMousePoint.Z * p_color, 1.0f );

	DialSP->BindUniforms();
	DialSP->SetUniformVec3Array( FMousePtUniform, 1, Mark );

	if ( r < FRMax && r > FRMin )
	{
		FAlpha = 180.0f + Linderdaum::Math::RadToDeg( atan2( ny, nx ) );

		DialSP->SetUniformFloat( FAlphaUniform, FAlpha );
	}
	else
	{
		LVector3 NewB = Math::Barycentric2D( nx, ny, p_black.X, p_black.Y, p_white.X, p_white.Y, p_color.X, p_color.Y );

		if ( NewB.X >= 0 && NewB.X <= 1 && NewB.Y >= 0 && NewB.Y <= 1 && NewB.Z >= 0 && NewB.Z <= 1 )
		{
			FMousePoint = NewB;
		}
	}

	LVector3 CC = FMousePoint.X * LC_Black.ToVector3() + FMousePoint.Y * LC_White.ToVector3() + FMousePoint.Z * Math::ColorFromAngle( FAlpha );

	Env->Console->GetVar( FOutVarName )->SetVector4( LVector4( CC, 1.0f ) );
}
void clCanvas::Rect2D( float X1, float Y1, float X2, float Y2, const LVector4& Color )
{
	LGL3->glDisable( GL_DEPTH_TEST );

	FRectSP->Bind();
	FRectSP->SetUniformNameVec4Array( "u_Color", 1, Color );
	FRectSP->SetUniformNameVec4Array( "u_RectSize", 1, LVector4( X1, Y1, X2, Y2 ) );

	if ( Color.w < 1.0f )
	{
		LGL3->glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
		LGL3->glEnable( GL_BLEND );
	}

	FRectVA->Draw( false );

	if ( Color.w < 1.0f )
	{
		LGL3->glDisable( GL_BLEND );
	}
}