Click here to Skip to main content
Licence 
First Posted 6 Nov 2007
Views 24,162
Downloads 727
Bookmarked 23 times

d3d Game Engine Written in C#

By | 6 Nov 2007 | Article
The beginning of a 1st person 3d game engine written in C# using managed DirectX
Screenshot - illusions.jpg

Introduction

Required for debugging: DirectX9 SDK for .NET

This is my first try to write my own 3D game engine in C# using managed directX.
To get this done, I had to solve many small and complex problems.

Here are some of the implemented features:

Basics

  • Setting up a d3d device
  • Reading keyboard and mouse input
  • Drawing fonts
  • Drawing primitives
  • Loading and drawing meshes
  • Using light and fog basics

Advanced

  • Rotating and translating world and meshes around the camera
  • Integrate automativ collision detection between meshes
  • Effects that collision has on the player's movement
  • Logic for opening doors and using elevators

My backgound is easy. Like thousands, I have a dream of writing my own game sometime.
Unfurtunately I've not got enough free time to finalize it...

Using the Code

Sorry my code is a hell of 'non documentation'. Give me feedback, if there's interest, I'll add a full documentation of the code.

But if you want to read it, you should begin with OnPaint method in Form1. This is the main loop which calls all relevant functions.

protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
        {
            if (WorldLive.Exit)
            {
                Application.Exit();
            }

            IConsole.DisplayText = "";            
           
            for (int i=0;i<WorldLive.MovingGameObjects.Count;i++)
            {
                if (WorldLive.MovingGameObjects[i].PU != null)
                {
                    WorldLive.MovingGameObjects[i].PU.Move();
                }
            }
            
            DateTime DT = DateTime.Now;
            WorldLive.CheckInterceptions();
            TimeSpan TS = DateTime.Now - DT; 
	   IConsole.DisplayText += "CheckInterceptions " + TS.Ticks.ToString() + "\n";

            WorldLive.TouchMasters();

            IConsole.DebugInfo();

             DT = DateTime.Now;
            WorldLive.HandleInterceptions();
             TS = DateTime.Now - DT; IConsole.DisplayText += 
			"HandleInterceptions " + TS.Ticks.ToString() + "\n";

             DT = DateTime.Now;
            WorldLive.RealizePreCalcPosition();
             TS = DateTime.Now - DT; IConsole.DisplayText += 
			"RealizePrecalc " + TS.Ticks.ToString() + "\n";

             DT = DateTime.Now;
            WorldLive.ClearInterceptions();
             TS = DateTime.Now - DT; IConsole.DisplayText += 
			"ClearInterceptions " + TS.Ticks.ToString() + "\n";            

            device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, 
					Color.DarkGray, 1.0f, 0);
            DT = DateTime.Now;
            device.BeginScene();          
            device.RenderState.Ambient = Color.DarkSlateGray   ;
            WorldLive.DrawGameObjects();                       
            TS = DateTime.Now - DT; IConsole.DisplayText += 
				"Scene " + TS.Ticks.ToString() + "\n";
            text.DrawText(null, IConsole.DisplayText, new Point(10, 20), Color.White);
            device.EndScene();
            device.Present();
            displayText = "";
            this.Invalidate();       
        } 

History

  • 6th November, 2007: Initial post

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

cellarjay

Software Developer

United States United States

Member



Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
Questiongood PinmemberMichMsk23:43 6 Nov '07  
AnswerRe: good Pinmembercellarjay2:40 7 Nov '07  
Hi,
if you want to begin managed directx from scratch look at http://www.riemers.net/
QuestionCool project PinmemberBorg.kz18:55 6 Nov '07  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web02 | 2.5.120529.1 | Last Updated 6 Nov 2007
Article Copyright 2007 by cellarjay
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid