当前位置: 首页>>代码示例>>C#>>正文


C# Camera.SetCustomProjectionMatrix方法代码示例

本文整理汇总了C#中Axiom.Core.Camera.SetCustomProjectionMatrix方法的典型用法代码示例。如果您正苦于以下问题:C# Camera.SetCustomProjectionMatrix方法的具体用法?C# Camera.SetCustomProjectionMatrix怎么用?C# Camera.SetCustomProjectionMatrix使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Axiom.Core.Camera的用法示例。


在下文中一共展示了Camera.SetCustomProjectionMatrix方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: GetShadowCamera

		public void GetShadowCamera( SceneManager sceneManager, Camera camera, Viewport viewport, Light light,
		                             Camera textureCamera, int iteration )
		{
			Vector3 pos, dir;
			Quaternion q;

			// reset custom view / projection matrix in case already set
			textureCamera.SetCustomViewMatrix( false );
			textureCamera.SetCustomProjectionMatrix( false );
			textureCamera.Near = light.DeriveShadowNearClipDistance( camera );
			textureCamera.Far = light.DeriveShadowFarClipDistance( camera );


			// get the shadow frustum's far distance
			var shadowDist = light.ShadowFarDistance;
			if ( shadowDist == 0.0f )
			{
				// need a shadow distance, make one up
				shadowDist = camera.Near*300;
			}
			var shadowOffset = shadowDist*sceneManager.ShadowDirectionalLightTextureOffset;

			// Directional lights
			if ( light.Type == LightType.Directional )
			{
				// set up the shadow texture
				// Set ortho projection
				textureCamera.ProjectionType = Projection.Orthographic;
				// set ortho window so that texture covers far dist
				textureCamera.SetOrthoWindow( shadowDist*2, shadowDist*2 );

				// Calculate look at position
				// We want to look at a spot shadowOffset away from near plane
				// 0.5 is a litle too close for angles
				var target = camera.DerivedPosition + ( camera.DerivedDirection*shadowOffset );

				// Calculate direction, which same as directional light direction
				dir = -light.DerivedDirection; // backwards since point down -z
				dir.Normalize();

				// Calculate position
				// We want to be in the -ve direction of the light direction
				// far enough to project for the dir light extrusion distance
				pos = target + dir*sceneManager.ShadowDirectionalLightExtrusionDistance;

				// Round local x/y position based on a world-space texel; this helps to reduce
				// jittering caused by the projection moving with the camera
				// Viewport is 2 * near clip distance across (90 degree fov)
				//~ Real worldTexelSize = (texCam->getNearClipDistance() * 20) / vp->getActualWidth();
				//~ pos.x -= fmod(pos.x, worldTexelSize);
				//~ pos.y -= fmod(pos.y, worldTexelSize);
				//~ pos.z -= fmod(pos.z, worldTexelSize);
				var worldTexelSize = ( shadowDist*2 )/textureCamera.Viewport.ActualWidth;

				//get texCam orientation

				var up = Vector3.UnitY;
				// Check it's not coincident with dir
				if ( Utility.Abs( up.Dot( dir ) ) >= 1.0f )
				{
					// Use camera up
					up = Vector3.UnitZ;
				}
				// cross twice to rederive, only direction is unaltered
				var left = dir.Cross( up );
				left.Normalize();
				up = dir.Cross( left );
				up.Normalize();
				// Derive quaternion from axes
				q = Quaternion.FromAxes( left, up, dir );

				//convert world space camera position into light space
				var lightSpacePos = q.Inverse()*pos;

				//snap to nearest texel
				lightSpacePos.x -= lightSpacePos.x%worldTexelSize; //fmod(lightSpacePos.x, worldTexelSize);
				lightSpacePos.y -= lightSpacePos.y%worldTexelSize; //fmod(lightSpacePos.y, worldTexelSize);

				//convert back to world space
				pos = q*lightSpacePos;
			}
				// Spotlight
			else if ( light.Type == LightType.Spotlight )
			{
				// Set perspective projection
				textureCamera.ProjectionType = Projection.Perspective;
				// set FOV slightly larger than the spotlight range to ensure coverage
				var fovy = light.SpotlightOuterAngle*1.2;

				// limit angle
				if ( fovy.InDegrees > 175 )
				{
					fovy = (Degree)( 175 );
				}
				textureCamera.FieldOfView = fovy;

				// Calculate position, which same as spotlight position
				pos = light.GetDerivedPosition();

				// Calculate direction, which same as spotlight direction
//.........这里部分代码省略.........
开发者ID:ryan-bunker,项目名称:axiom3d,代码行数:101,代码来源:DefaultShadowCameraSetup.cs


注:本文中的Axiom.Core.Camera.SetCustomProjectionMatrix方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。