What I intent to do is document what I have added to my engine. This will include where it deviates from the original source in the Hazy Mind tutorial.
Here is a list of some of the things I have added and/or changed in my engine:
Namespace
Altered Namespaces, classes have a prefix of RC rather than HM, probably not worth a mention but if you read any of my code snippets you might think, "where did he get that RCShaderManager class from?" etc...
Hashtable -> Dictionary
Have changed all Hashtables to be Dictionary, this cuts down on the amount of boxing and un-boxing needed to get to the objects stored in them as a Dictionary can be typed.
RCObject & RCScene
Additions to the base Object to allow retrieval from a scene by name as well as index.
RCModel
More model properties to account for extra shaders I have found or written. Also, (still in progress) the ability to use annotation and semantics in shaders for models rather than hard coding shader variable names into the RCModel class.
RCShader
Again, the ability to use semantics rather than hard code shader variable names in code.
New Classes
RCBillboard - Billboard object
RCFire - Volume fire effect
RCParticle - Part of the Particle system
RCSkyDome - A sky dome class [Riemer]
RCSnowEmmiter - Part of the particle system
RCSpriteBatch - You guessed it, for sprite batch's
RC2SidedTexturdeQuad - A TQ with both sides rendered
RCTerrain - A Terrain class [Riemer]
RCWater - A water effect using the NVIDIA Ocean shader
RCRiemersWater - Another water effect (still under construction) [Riemer]
RCScenePicker - Used to Ray pick models in the scene
RCSound - Used to play sound effects and music
RCFont - Bitmap font manager
RCNuclexFont - Font manager using Nuclex fonts
RCHelper - Static class used to hold methods used throughout the engine
And a bit more still under development, I have a RCGUI namespace that holds my Graphical User Interface classes, like buttons, labels etc... There is also a debug screen and a RenderState viewer all yet to be finished off. There is also my RandomchaosContentPipelineManager for overriding the base content pipeline should I need it, this is used for the creation of bounding box's for a mesh and the bounding box's for that mesh's mesh's. Oh yes and the latest addition Mesh Animation.
I will probably start by documenting my changes to the base engine objects and then move on to my additions.
Pretty cool... One addition though, you can add a Billboard Manager class that will render all the billboards you add, because Billboards are sometimes going to be transparent, right?? So, setting states before rendering every billboard would be performance killing. You make a billboard manager that will set the states, render billboards, and get the states back. Just a suggestion :)
ReplyDeleteGood point. What I will probably do is keep my billboard class as it is, remove the renderstate calls and have the container classes that uses it manage the states, like the RCSnowEmmiter.
ReplyDeleteOh, and I saw now that you have some GUI classes... I'm very interested in them :) :D
ReplyDeleteLOL, well don't get too excited by them, they are quite simple really and the classes are not yet finished. I have a base control class then buttons, text box's, labels and a list box (buggy) all inheriting from that. I want to have as many of the standard windows controls emulated in my engine as possible.
ReplyDeleteThere is SO much to do and so little time to do it in, I am just glad there is no dead line for it :)
It doesn't matter, I can improve them :)
ReplyDelete