예제 #1
0
		/// <summary>
		/// Creates a view that covers the screen and emit the surfaces.
		/// </summary>
		public void EmitFullScreen()
		{
			if(_surfaces[0].VertexCount == 0)
			{
				return;
			}

			View viewDef = new View();

			// for gui editor
			if((idE.RenderSystem.ViewDefinition == null) || (idE.RenderSystem.ViewDefinition.IsEditor == false))
			{
				viewDef.RenderView.X = 0;
				viewDef.RenderView.Y = 0;
				viewDef.RenderView.Width = idE.VirtualScreenWidth;
				viewDef.RenderView.Height = idE.VirtualScreenHeight;

				viewDef.ViewPort = idE.RenderSystem.RenderViewToViewPort(viewDef.RenderView);

				viewDef.Scissor.X1 = 0;
				viewDef.Scissor.Y1 = 0;
				viewDef.Scissor.X2 = (short) (viewDef.ViewPort.X2 - viewDef.ViewPort.X1);
				viewDef.Scissor.Y2 = (short) (viewDef.ViewPort.Y2 - viewDef.ViewPort.Y1);
			}
			else
			{
				viewDef.RenderView.X = idE.RenderSystem.ViewDefinition.RenderView.X;
				viewDef.RenderView.Y = idE.RenderSystem.ViewDefinition.RenderView.Y;
				viewDef.RenderView.Width = idE.RenderSystem.ViewDefinition.RenderView.Width;
				viewDef.RenderView.Height = idE.RenderSystem.ViewDefinition.RenderView.Height;

				viewDef.ViewPort.X1 = (short) viewDef.RenderView.X;
				viewDef.ViewPort.X2 = (short) (viewDef.RenderView.X + idE.RenderSystem.ViewDefinition.RenderView.Width);
				viewDef.ViewPort.Y1 = (short) viewDef.RenderView.Y;
				viewDef.ViewPort.Y2 = (short) (viewDef.RenderView.Y += idE.RenderSystem.ViewDefinition.RenderView.Height);

				viewDef.Scissor.X1 = idE.RenderSystem.ViewDefinition.Scissor.X1;
				viewDef.Scissor.Y1 = idE.RenderSystem.ViewDefinition.Scissor.Y1;
				viewDef.Scissor.X2 = idE.RenderSystem.ViewDefinition.Scissor.X2;
				viewDef.Scissor.Y2 = idE.RenderSystem.ViewDefinition.Scissor.Y2;
			}

			Vector2 center = new Vector2(idE.VirtualScreenWidth * 0.5f, idE.VirtualScreenHeight * 0.5f);

			viewDef.FloatTime = idE.RenderSystem.FrameShaderTime;
			viewDef.ProjectionMatrix = Matrix.CreateOrthographic(idE.VirtualScreenWidth, idE.VirtualScreenHeight, -0.5f, 1);
			viewDef.WorldSpace.ModelViewMatrix =  Matrix.CreateLookAt(new Vector3(center, 0), new Vector3(center, 1), new Vector3(0, -1, 0));

			View oldView = idE.RenderSystem.ViewDefinition;
			idE.RenderSystem.ViewDefinition = viewDef;

			// add the surfaces to this view
			int count = _surfaces.Count;

			for(int i = 0; i < count; i++)
			{
				EmitSurface(_surfaces[i], viewDef.WorldSpace.ModelMatrix, viewDef.WorldSpace.ModelViewMatrix, false);
			}

			idE.RenderSystem.ViewDefinition = oldView;

			// add the command to draw this view
			idE.RenderSystem.AddDrawViewCommand(viewDef);
		}
예제 #2
0
		/// <summary>
		/// Creates a static model based on the definition and view currently.
		/// </summary>
		/// <remarks>
		/// This will be regenerated for every view, even though
		/// some models, like character meshes, could be used for multiple (mirror)
		/// views in a frame, or may stay static for multiple frames (corpses)
		/// The renderer will delete the returned dynamic model the next view.
		/// </remarks>
		/// <param name="renderEntity"></param>
		/// <param name="view"></param>
		/// <param name="cachedModel"></param>
		/// <returns></returns>
		public abstract idRenderModel InstantiateDynamicModel(idRenderEntity renderEntity, View view, idRenderModel cachedModel);
예제 #3
0
		public void EvaluateRegisters(ref float[] registers, float[] shaderParms, View view, idSoundEmitter soundEmitter)
		{
			// copy the material constants.
			for(int i = PredefinedRegisterCount; i < _registerCount; i++)
			{
				registers[i] = _expressionRegisters[i];
			}

			// copy the local and global parameters.
			registers[(int) ExpressionRegister.Time] = view.FloatTime;
			registers[(int) ExpressionRegister.Parm0] = shaderParms[0];
			registers[(int) ExpressionRegister.Parm1] = shaderParms[1];
			registers[(int) ExpressionRegister.Parm2] = shaderParms[2];
			registers[(int) ExpressionRegister.Parm3] = shaderParms[3];
			registers[(int) ExpressionRegister.Parm4] = shaderParms[4];
			registers[(int) ExpressionRegister.Parm5] = shaderParms[5];
			registers[(int) ExpressionRegister.Parm6] = shaderParms[6];
			registers[(int) ExpressionRegister.Parm7] = shaderParms[7];
			registers[(int) ExpressionRegister.Parm8] = shaderParms[8];
			registers[(int) ExpressionRegister.Parm9] = shaderParms[9];
			registers[(int) ExpressionRegister.Parm10] = shaderParms[10];
			registers[(int) ExpressionRegister.Parm11] = shaderParms[11];

			if(view.RenderView.MaterialParameters != null)
			{
				registers[(int) ExpressionRegister.Global0] = view.RenderView.MaterialParameters[0];
				registers[(int) ExpressionRegister.Global1] = view.RenderView.MaterialParameters[1];
				registers[(int) ExpressionRegister.Global2] = view.RenderView.MaterialParameters[2];
				registers[(int) ExpressionRegister.Global3] = view.RenderView.MaterialParameters[3];
				registers[(int) ExpressionRegister.Global4] = view.RenderView.MaterialParameters[4];
				registers[(int) ExpressionRegister.Global5] = view.RenderView.MaterialParameters[5];
				registers[(int) ExpressionRegister.Global6] = view.RenderView.MaterialParameters[6];
				registers[(int) ExpressionRegister.Global7] = view.RenderView.MaterialParameters[7];
			}

			ExpressionOperation op;
			int b;
			int opCount = (_ops != null) ? _ops.Length : 0;

			for(int i = 0; i < opCount; i++)
			{
				op = _ops[i];

				switch(op.OperationType)
				{
					case ExpressionOperationType.Add:
						registers[op.C] = registers[op.A] + registers[op.B];
						break;

					case ExpressionOperationType.Subtract:
						registers[op.C] = registers[op.A] - registers[op.B];
						break;

					case ExpressionOperationType.Multiply:
						registers[op.C] = registers[op.A] * registers[op.B];
						break;

					case ExpressionOperationType.Divide:
						registers[op.C] = registers[op.A] / registers[op.B];
						break;

					case ExpressionOperationType.Modulo:
						b = (int) registers[op.B];
						b = (b != 0) ? b : 1;

						registers[op.C] = (int) registers[op.A] % b;
						break;

					case ExpressionOperationType.Table:
						idDeclTable table = (idDeclTable) idE.DeclManager.DeclByIndex(DeclType.Table, op.A);
						registers[op.C] = table.Lookup(registers[op.B]);
						break;
					case ExpressionOperationType.Sound:
						idConsole.Warning("TODO: eoptype sound");
						// TODO: OP_TYPE_SOUND:
						/*if ( soundEmitter ) {
							registers[op->c] = soundEmitter->CurrentAmplitude();
						} else {*/
						registers[op.C] = 0;
						//}
						break;
					case ExpressionOperationType.GreaterThan:
						registers[op.C] = ((registers[op.A] > registers[op.B]) == true) ? 1 : 0;
						break;
					case ExpressionOperationType.GreaterThanOrEquals:
						registers[op.C] = ((registers[op.A] >= registers[op.B]) == true) ? 1 : 0;
						break;
					case ExpressionOperationType.LessThan:
						registers[op.C] = ((registers[op.A] < registers[op.B]) == true) ? 1 : 0;
						break;
					case ExpressionOperationType.LessThanOrEquals:
						registers[op.C] = ((registers[op.A] <= registers[op.B]) == true) ? 1 : 0;
						break;
					case ExpressionOperationType.Equals:
						registers[op.C] = ((registers[op.A] == registers[op.B]) == true) ? 1 : 0;
						break;
					case ExpressionOperationType.NotEquals:
						registers[op.C] = ((registers[op.A] != registers[op.B]) == true) ? 1 : 0;
						break;
					case ExpressionOperationType.And:
						registers[op.C] = (((registers[op.A] != 0) && (registers[op.B] != 0)) == true) ? 1 : 0;
						break;
					case ExpressionOperationType.Or:
						registers[op.C] = (((registers[op.A] != 0) || (registers[op.B] != 0)) == true) ? 1 : 0;
						break;
				}
			}
		}
예제 #4
0
		public override idRenderModel InstantiateDynamicModel(idRenderEntity renderEntity, View view, idRenderModel cachedModel)
		{
			if(cachedModel != null)
			{
				cachedModel.Dispose();
			}

			idConsole.Error("InstantiateDynamicModel called on static model '{0}'", this.Name);

			return null;
		}
예제 #5
0
		/// <summary>
		/// As of 5/2/03, about half of the unique materials loaded on typical
		/// maps are constant, but 2/3 of the surface references are.
		/// This is probably an optimization of dubious value.
		/// </summary>
		private void CheckForConstantRegisters()
		{
			if(_parsingData.RegistersAreConstant == false)
			{
				return;
			}

			// evaluate the registers once and save them.
			_constantRegisters = new float[_registerCount];
			float[] materialParms = new float[idE.MaxEntityMaterialParameters];

			View viewDef = new View();
			viewDef.RenderView.MaterialParameters = new float[idE.MaxGlobalMaterialParameters];

			EvaluateRegisters(ref _constantRegisters, materialParms, viewDef, null);
		}
예제 #6
0
		public void EvaluateRegisters(ref float[] registers, float[] shaderParms, View view)
		{
			EvaluateRegisters(ref registers, shaderParms, view, null);
		}
예제 #7
0
		/// <summary>
		/// Rendering a scene may actually render multiple subviews for mirrors and portals, and
		/// may render composite textures for gui console screens and light projections.
		/// It would also be acceptable to render a scene multiple times, for "rear view mirrors", etc.
		/// </summary>
		/// <param name="renderView"></param>
		public void RenderScene(idRenderView renderView)
		{
#if ID_DEDICATED

#else
			if(idE.RenderSystem.IsRunning == false)
			{
				return;
			}

			// skip front end rendering work, which will result
			// in only gui drawing
			if(idE.CvarSystem.GetBool("r_skipFrontEnd") == true)
			{
				return;
			}

			if((renderView.FovX <= 0) || (renderView.FovY <= 0))
			{
				idConsole.Error("idRenderWorld::RenderScene: bad FOVS: {0}, {1}", renderView.FovX, renderView.FovY);
			}

			idRenderView copy = renderView.Copy();

			// close any gui drawing
			idE.RenderSystem.GuiModel.EmitFullScreen();
			idE.RenderSystem.GuiModel.Clear();

			int startTime = idE.System.Milliseconds;

			// setup view parms for the initial view
			//
			View parms = new View();
			parms.RenderView = copy;

			// TODO: screenshot
			/*if ( tr.takingScreenshot ) {
				parms->renderView.forceUpdate = true;
			}*/

			// set up viewport, adjusted for resolution and OpenGL style 0 at the bottom
			parms.ViewPort = idE.RenderSystem.RenderViewToViewPort(parms.RenderView);

			// the scissor bounds may be shrunk in subviews even if
			// the viewport stays the same
			// this scissor range is local inside the viewport
			parms.Scissor.X1 = 0;
			parms.Scissor.Y1 = 0;
			parms.Scissor.X2 = (short) (parms.ViewPort.X2 - parms.ViewPort.X1);
			parms.Scissor.Y2 = (short) (parms.ViewPort.Y2 - parms.ViewPort.Y1);

			parms.IsSubview = false;
			parms.InitialViewAreaOrigin = renderView.ViewOrigin;
			parms.FloatTime = parms.RenderView.Time * 0.001f;
			parms.RenderWorld = this;

			// use this time for any subsequent 2D rendering, so damage blobs/etc 
			// can use level time
			idE.RenderSystem.FrameShaderTime = parms.FloatTime;

			// see if the view needs to reverse the culling sense in mirrors
			// or environment cube sides
			Vector3 tmp = new Vector3(parms.RenderView.ViewAxis.M21, parms.RenderView.ViewAxis.M22, parms.RenderView.ViewAxis.M23);
			Vector3 tmp2 = new Vector3(parms.RenderView.ViewAxis.M31, parms.RenderView.ViewAxis.M32, parms.RenderView.ViewAxis.M33);
			Vector3 tmp3 = new Vector3(parms.RenderView.ViewAxis.M11, parms.RenderView.ViewAxis.M12, parms.RenderView.ViewAxis.M13);
			Vector3 cross = Vector3.Cross(tmp, tmp2);

			if((cross * tmp3).Length() > 0)
			{
				parms.IsMirror = false;
			}
			else
			{
				parms.IsMirror = true;
			}

			if(idE.CvarSystem.GetBool("r_lockSurfaces") == true)
			{
				idConsole.Warning("TODO: R_LockSurfaceScene( parms );");
				return;
			}

			// save this world for use by some console commands
			idE.RenderSystem.PrimaryRenderWorld = this;
			idE.RenderSystem.PrimaryRenderView = copy;
			idE.RenderSystem.PrimaryView = parms;
			
			// rendering this view may cause other views to be rendered
			// for mirrors / portals / shadows / environment maps
			// this will also cause any necessary entities and lights to be
			// updated to the demo file
			idE.RenderSystem.RenderView(parms);

			// now write delete commands for any modified-but-not-visible entities, and
			// add the renderView command to the demo
			
			// TODO: demo
			/*if ( session->writeDemo ) {
				WriteRenderView( renderView );
			}*/

			int endTime = idE.System.Milliseconds;

			// TODO: tr.pc.frontEndMsec += endTime - startTime;

			// prepare for any 2D drawing after this
			idE.RenderSystem.GuiModel.Clear();
#endif
		}
예제 #8
0
		public override idRenderModel InstantiateDynamicModel(idTech4.Renderer.idRenderEntity renderEntity, View view, idRenderModel cachedModel)
		{
			if(this.Disposed == true)
			{
				throw new ObjectDisposedException(this.GetType().Name);
			}

			idConsole.Warning("TODO: idRenderModel_PRT.InstantiateDynamicModel");

			return null;
		}
예제 #9
0
        /// <summary>
        /// -1 to 1 range in x, y, and z.
        /// </summary>
        /// <param name="global"></param>
        /// <param name="ndc"></param>
        public static void GlobalToNormalizedDeviceCoordinates(Vector3 global, out Vector3 ndc)
        {
            Plane view, clip;

            // _D3XP added work on primaryView when no viewDef
            if (idE.RenderSystem.ViewDefinition == null)
            {
                View primaryView = idE.RenderSystem.PrimaryView;

                view.Normal.X = global.X * primaryView.WorldSpace.ModelViewMatrix.M11
                                + global.Y * primaryView.WorldSpace.ModelViewMatrix.M12
                                + global.Z * primaryView.WorldSpace.ModelViewMatrix.M13
                                + primaryView.WorldSpace.ModelViewMatrix.M14;

                view.Normal.Y = global.X * primaryView.WorldSpace.ModelViewMatrix.M21
                                + global.Y * primaryView.WorldSpace.ModelViewMatrix.M22
                                + global.Z * primaryView.WorldSpace.ModelViewMatrix.M23
                                + primaryView.WorldSpace.ModelViewMatrix.M24;

                view.Normal.Z = global.X * primaryView.WorldSpace.ModelViewMatrix.M31
                                + global.Y * primaryView.WorldSpace.ModelViewMatrix.M32
                                + global.Z * primaryView.WorldSpace.ModelViewMatrix.M33
                                + primaryView.WorldSpace.ModelViewMatrix.M34;

                view.D = global.X * primaryView.WorldSpace.ModelViewMatrix.M41
                         + global.Y * primaryView.WorldSpace.ModelViewMatrix.M42
                         + global.Z * primaryView.WorldSpace.ModelViewMatrix.M43
                         + primaryView.WorldSpace.ModelViewMatrix.M44;

                clip.Normal.X = view.Normal.X * primaryView.WorldSpace.ModelViewMatrix.M11
                                + view.Normal.Y * primaryView.WorldSpace.ModelViewMatrix.M12
                                + view.Normal.Z * primaryView.WorldSpace.ModelViewMatrix.M13
                                + primaryView.WorldSpace.ModelViewMatrix.M14;

                clip.Normal.Y = view.Normal.X * primaryView.WorldSpace.ModelViewMatrix.M21
                                + view.Normal.Y * primaryView.WorldSpace.ModelViewMatrix.M22
                                + view.Normal.Z * primaryView.WorldSpace.ModelViewMatrix.M23
                                + view.D * primaryView.WorldSpace.ModelViewMatrix.M24;

                clip.Normal.Z = view.Normal.X * primaryView.WorldSpace.ModelViewMatrix.M31
                                + view.Normal.Y * primaryView.WorldSpace.ModelViewMatrix.M32
                                + view.Normal.Z * primaryView.WorldSpace.ModelViewMatrix.M33
                                + view.D * primaryView.WorldSpace.ModelViewMatrix.M34;

                clip.D = view.Normal.X * primaryView.WorldSpace.ModelViewMatrix.M41
                         + view.Normal.Y * primaryView.WorldSpace.ModelViewMatrix.M42
                         + view.Normal.Z * primaryView.WorldSpace.ModelViewMatrix.M43
                         + view.D * primaryView.WorldSpace.ModelViewMatrix.M44;
            }
            else
            {
                View viewDef = idE.RenderSystem.ViewDefinition;

                view.Normal.X = global.X * viewDef.WorldSpace.ModelViewMatrix.M11
                                + global.Y * viewDef.WorldSpace.ModelViewMatrix.M12
                                + global.Z * viewDef.WorldSpace.ModelViewMatrix.M13
                                + viewDef.WorldSpace.ModelViewMatrix.M14;

                view.Normal.Y = global.X * viewDef.WorldSpace.ModelViewMatrix.M21
                                + global.Y * viewDef.WorldSpace.ModelViewMatrix.M22
                                + global.Z * viewDef.WorldSpace.ModelViewMatrix.M23
                                + viewDef.WorldSpace.ModelViewMatrix.M24;

                view.Normal.Z = global.X * viewDef.WorldSpace.ModelViewMatrix.M31
                                + global.Y * viewDef.WorldSpace.ModelViewMatrix.M32
                                + global.Z * viewDef.WorldSpace.ModelViewMatrix.M33
                                + viewDef.WorldSpace.ModelViewMatrix.M34;

                view.D = global.X * viewDef.WorldSpace.ModelViewMatrix.M41
                         + global.Y * viewDef.WorldSpace.ModelViewMatrix.M42
                         + global.Z * viewDef.WorldSpace.ModelViewMatrix.M43
                         + viewDef.WorldSpace.ModelViewMatrix.M44;

                clip.Normal.X = view.Normal.X * viewDef.WorldSpace.ModelViewMatrix.M11
                                + view.Normal.Y * viewDef.WorldSpace.ModelViewMatrix.M12
                                + view.Normal.Z * viewDef.WorldSpace.ModelViewMatrix.M13
                                + view.D * viewDef.WorldSpace.ModelViewMatrix.M14;

                clip.Normal.Y = view.Normal.X * viewDef.WorldSpace.ModelViewMatrix.M21
                                + view.Normal.Y * viewDef.WorldSpace.ModelViewMatrix.M22
                                + view.Normal.Z * viewDef.WorldSpace.ModelViewMatrix.M23
                                + view.D * viewDef.WorldSpace.ModelViewMatrix.M24;

                clip.Normal.Z = view.Normal.X * viewDef.WorldSpace.ModelViewMatrix.M31
                                + view.Normal.Y * viewDef.WorldSpace.ModelViewMatrix.M32
                                + view.Normal.Z * viewDef.WorldSpace.ModelViewMatrix.M33
                                + view.D * viewDef.WorldSpace.ModelViewMatrix.M34;

                clip.D = view.Normal.X * viewDef.WorldSpace.ModelViewMatrix.M41
                         + view.Normal.Y * viewDef.WorldSpace.ModelViewMatrix.M42
                         + view.Normal.Z * viewDef.WorldSpace.ModelViewMatrix.M43
                         + view.D * viewDef.WorldSpace.ModelViewMatrix.M44;
            }

            ndc.X = clip.Normal.X / clip.D;
            ndc.Y = clip.Normal.Y / clip.D;
            ndc.Z = (clip.Normal.Z + clip.D) / (2 * clip.D);
        }
예제 #10
0
		/// <summary>
		/// A view may be either the actual camera view,
		/// a mirror / remote location, or a 3D view on a gui surface.
		/// </summary>
		/// <param name="parms"></param>
		public void RenderView(View parms)
		{
			if((parms.RenderView.Width <= 0) || (parms.RenderView.Height <= 0))
			{
				return;
			}
		
			// save view in case we are a subview
			View oldView = _viewDefinition;

			_viewCount++;
			_viewDefinition = parms;
			_sortOffset = 0;

			// set the matrix for world space to eye space
			SetViewMatrix(_viewDefinition);

			// the four sides of the view frustum are needed
			// for culling and portal visibility
			SetupViewFrustum();

			// we need to set the projection matrix before doing
			// portal-to-screen scissor box calculations
			SetupProjection();

			// identify all the visible portalAreas, and the entityDefs and
			// lightDefs that are in them and pass culling.
			parms.RenderWorld.FindViewLightsAndEntities();

			// constrain the view frustum to the view lights and entities
			ConstrainViewFrustum();

			// make sure that interactions exist for all light / entity combinations
			// that are visible
			// add any pre-generated light shadows, and calculate the light shader values
			// TODO: R_AddLightSurfaces();

			// adds ambient surfaces and create any necessary interaction surfaces to add to the light
			// lists
			AddModelSurfaces();

			// any viewLight that didn't have visible surfaces can have it's shadows removed
			// TODO: R_RemoveUnecessaryViewLights();

			// sort all the ambient surfaces for translucency ordering
			// TODO: R_SortDrawSurfs();

			// generate any subviews (mirrors, cameras, etc) before adding this view
			// TODO: R_GenerateSubViews
			/*if(R_GenerateSubViews())
			{
				// if we are debugging subviews, allow the skipping of the
				// main view draw
				if(idE.CvarSystem.GetBool("r_subviewOnly") == true)
				{
					return;
				}
			}*/

			// write everything needed to the demo file
			// TODO: demo
			/*if ( session->writeDemo ) {
				static_cast<idRenderWorldLocal *>(parms->renderWorld)->WriteVisibleDefs( tr.viewDef );
			}*/

			// add the rendering commands for this viewDef
			AddDrawViewCommand(parms);

			// restore view in case we are a subview
			_viewDefinition = oldView;
		}
예제 #11
0
		/// <summary>
		/// This is the main 3D rendering command.  A single scene may
		/// have multiple views if a mirror, portal, or dynamic texture is present.
		/// </summary>
		/// <param name="view"></param>
		public void AddDrawViewCommand(View view)
		{
			DrawViewRenderCommand cmd = new DrawViewRenderCommand();
			cmd.View = view;

			_frameData.Commands.Enqueue(cmd);

			// TODO: lock surfaces
			/*if ( parms->viewEntitys ) {
				// save the command for r_lockSurfaces debugging
				tr.lockSurfacesCmd = *cmd;
			}*/

			// TODO: tr.pc.c_numViews++;

			// TODO: R_ViewStatistics(parms);
		}
예제 #12
0
		private void SetViewMatrix(View view)
		{
			float[]	viewerMatrix = new float[16];

			ViewEntity world = new ViewEntity();
			
			// transform by the camera placement
			Vector3 origin = view.RenderView.ViewOrigin;
			
			/*viewerMatrix[0] = _viewDefinition.RenderView.ViewAxis.M11;
			viewerMatrix[4] = _viewDefinition.RenderView.ViewAxis.M12;
			viewerMatrix[8] = _viewDefinition.RenderView.ViewAxis.M13;
			viewerMatrix[12] = -origin.X * viewerMatrix[0] + -origin.Y * viewerMatrix[4] + -origin.Z * viewerMatrix[8];

			viewerMatrix[1] = _viewDefinition.RenderView.ViewAxis.M21;
			viewerMatrix[5] = _viewDefinition.RenderView.ViewAxis.M22;
			viewerMatrix[9] = _viewDefinition.RenderView.ViewAxis.M23;
			viewerMatrix[13] = -origin.X * viewerMatrix[1] + -origin.Y * viewerMatrix[5] + -origin.Z * viewerMatrix[9];

			viewerMatrix[2] = _viewDefinition.RenderView.ViewAxis.M31;
			viewerMatrix[6] = _viewDefinition.RenderView.ViewAxis.M32;
			viewerMatrix[10] = _viewDefinition.RenderView.ViewAxis.M33;
			viewerMatrix[14] = -origin.X * viewerMatrix[2] + -origin.Y * viewerMatrix[6] + -origin.Z * viewerMatrix[10];

			viewerMatrix[3] = 0;
			viewerMatrix[7] = 0;
			viewerMatrix[11] = 0;
			viewerMatrix[15] = 1;*/

			Vector3 look = origin + Vector3.Transform(Vector3.Forward, _viewDefinition.RenderView.ViewAxis);
			world.ModelViewMatrix = Matrix.CreateLookAt(origin, look, Vector3.Up);
			//world.ModelViewMatrix = Matrix.Multiply(world.ModelViewMatrix, FlipMatrix);

			view.WorldSpace = world;
			
			// convert from our coordinate system (looking down X)
			// to OpenGL's coordinate system (looking down -Z)
			//idHelper.ConvertMatrix(viewerMatrix, FlipMatrix, out view.WorldSpace.ModelViewMatrix);
		}
예제 #13
0
		private void Clear()
		{
			_frameCount = 0;
			_viewCount = 0;

			_staticAllocCount = 0;
			_frameShaderTime = 0;

			_viewPortOffset = Vector2.Zero;
			_tiledViewPort = Vector2.Zero;

			_ambientLightVector = Vector4.Zero;
			_sortOffset = 0;
			_worlds.Clear();

			_primaryRenderWorld = null;
			_primaryView = null;
			_primaryRenderView = new idRenderView();

			_defaultMaterial = null;

			/*
			testImage = NULL;
			ambientCubeImage = NULL;*/

			_viewDefinition = null;

			/*memset( &pc, 0, sizeof( pc ) );
			memset( &lockSurfacesCmd, 0, sizeof( lockSurfacesCmd ) );*/

			_identitySpace = new ViewEntity();

			/*logFile = NULL;*/

			_renderCrops = new idRectangle[idE.MaxRenderCrops];
			_currentRenderCrop = 0;
			_guiRecursionLevel = 0;
			_guiModel = null;
			/*demoGuiModel = NULL;
			memset( gammaTable, 0, sizeof( gammaTable ) );
			takingScreenshot = false;*/
		}