Let's talk about how you write a 3D engine that provides elegant performance. What your engine needs to provide: curved surfaces, dynamic lighting, volumetric fog, mirrors, and portals), skyboxes, vertex shaders, particle systems, static mesh models, and animated mesh models ). If you already know how all of the above functions work smoothly, you may be able to put those things together into a single engine.
Wait! When you start writingCodeYou must first figure out how to build your engine. In most cases, you must be eager to create a game, but if you start writing code for your engine immediately, you will feel very uncomfortable, after development, you may have to overwrite a lot of local code multiple times to place new special effects and controls, or even give up after failure. Taking the time to think deeply about your engine will save you a lot of time and reduce your headaches. You will not be eager to construct a giant project; maybe you will give up the engine when it is not finished, and then do anything else. Well, you may not be able to do that before you know how to learn what you need. It is indeed a good thing to really complete the design. For this, you will feel better and you will be dazzling!
Let's analyze the basic components required for a complete 3D Game Engine. First, this provides some information for developers who have corresponding 3D experience but still need some guidance. These are some content entries that are not difficult and can be quickly mastered but must be applied. To make your work better, here we will give you a general idea about how much work you put into a game engine. I call these components system, console, support, Renderer/engine core, and game media layer) and tools/data ).
Tools/data (tools/data)
In the development process, you always need some data, but unfortunately it is not like writing a text file or definingCubeBody is so simple. At least, you need a 3D model Editor, level editor, and graphics.Program. You can purchase or find some free programs on the Internet to meet your development requirements. Unfortunately, you may need more tools, but you cannot get them (they do not exist yet). You have to write them by yourself. In the end, you are likely to write a level editor by yourself, because you are not likely to get what you need. You may also write some code to pack a large number of files. It is very painful to deal with hundreds of files all day. You must also write some converters or plug-ins to convert the model format of the 3D model editor into your own format. You also need some tools to process game data, such as visibility estimation or light textures.
A basic principle is that you may want to design tools with an equivalent or even more code than the game itself. You can always find the ready-made formats and tools at first, but after a while, you will be able to realize that you need a great feature for your engine, and then you will give up on the previous writing method.
The 3rd-party tool, which is currently very popular, can be used for development. Therefore, you must always pay attention to your design. Because once you publish your engine as opensouce or allow modifications, some people may apply your development results in a certain day, And they will expand or make some modifications.
Maybe you should spend a lot of time designing art, levels, sound effects, music and entity models, just like designing and writing games, tools, and engines.
System)
A system is a part of communication between an engine and a machine. When a good engine is to be transplanted to the platform, its system is the only place where major changes (Code extension) need to be made. We divide a system into several subsystems, including: graphics, input, sound, timer, and configuration ). The primary system initializes, updates, and closes all subsystems.
The graphics sub-system (Graphics Sub-system) is very intuitive in the game. If you want to draw something on the screen, it (the Graphics Sub-system) is easy to do.
This article from the csdn blog, reproduced please indicate the source: http://blog.csdn.net/huangchonghai/archive/2007/08/31/1767521.aspx