Pump up the volumes
Shader class...done.
Surface class...done (pretty much).
One change in LE3 is the addition of .shader files. This is just a text file with a list of shader components:
vertsource="mesh.vert" fragsource="mesh.frag"
Your material file then just has to reference a single file:
shader="mesh.shader"
Of course, you'll be able to just drag the shader file onto the material shader property in the editor to assign it. You will never have to use Notepad, for anything.
Now working on "solids". This is based on my old CSG code from 3D World Studio. It's kind of nice that knowledge I developed a pretty long time ago is still so useful. Solids in the engine are a mathematical construct. They're basically a list of planes, with some extra fancy bits that do useful things like test if a point or ray intersects a solid convex volume. It can even detect the intersection of two convex volumes, which is some pretty advanced and fun geometry. Not 100% whether CSG modeling will be supported in the LE3 editor, but there is a pretty good case for it. I would probably program the more complicated CSG brush stuff in BlitzMax, and just convert it to a dumb mesh by the time it gets into the engine, for visible geometry.
Solids are used for the visible camera volume (frustum), and can also be used for invisible trigger volumes, blocks of water, etc. I am leaning towards allowing attachment of any number of solids to an entity, and then when the solid is entered by another entity, a Lua script function (or C callback [or both]) would be triggered. This allows you to attach multiple convex solids to an entity to form a concave shape, and the action can then be handled through the regular entity script system.
I haven't gotten into it yet, but the entity script system will allow any number of scripts to be attached to an entity, and they will be called in sequence. Special entities will have script functions available that have not existed before. For example, a particle emitter entity will have a script function EmitParticle() which allows you to control exactly where a newly emitted particle appears.
Well, writing code for invisible mathematical intersection tests isn't too exciting, but it formed a lot of the basis of LE2, and will for LE3 as well. Then it's on to the OpenGL camera class, so I can actually get some 3D graphics on the screen.
I'm mostly just retreading things I've already done right now, but having the code in C++ is good. It gives us cross-platform support for C++ programmers, the biggest segment of LE coders. It allows easier implementation of external libraries. Hiring outside help for some tasks is actually possible now. Finally, with a well-designed C++ core, it ensures we are forever moving forward, and not backing up and redoing things again. If I need to support the XBox or iPhone, that can be done without a massive rewrite or a new language. We learned a lot from LE2 about what works well and what can be improved. I am looking forward to a long and stable future using the LE3 engine design. I'd like to get into game production of our own titles as well, using LE3.
I'm enjoying Amnesia: The Dark Descent this week. All I need is an hour or two each week, so when I start a new game it usually takes a couple of months before I finish it. I also discovered the web series The Guild, and found it hilarious, although I am an outsider to the whole MMORPG thing. Maybe Felicia Day will make an episode about my life.
Well, I want to have something to show off for GDC 2011, so I'd better get back to work. Enjoy this episode of "Civil Protection". You can rarely go wrong with Half-Life 2 machinima:
6 Comments
Recommended Comments