Some days late, I totally forgot about it yesterday, but here is the review of February.
Channel Material
Most of the month I worked on the Channel Material I had started in January. I got the basic stuff completed and also mostly got the editor working. I don't want to link to the posts, it was very boring to do (and probably to read). But I am slowly getting to the point where it might be useful. I am sure it will show in the images when it is finished.
Editor Changes
In preparation to post the Small Items, which incidentally I didn't manage to do, I found out, that there are some handling problems with my editor. The first problem was, that I could switch off objects, but that also made them invisible in the raytracer, the second was the way the camera looks and how I move it.
First I tried to get a setting into the program to hide an object or make it transparent, but only in the editor. I have had a setting to hide an object from selection for a very long time, so actually activating one of those objects is no issue and I don't plan to fuse those settings. As often, simple changes result in a lot of work, as I first had to make a quite complex change to the program. I was very terse in the post, I have a special structure in the program to aid in handling enum-types. The problem is, that I often need texts for an enum and also have the problem how to store it reliably. I am not a big fan to store enums as integers, as it is too easy to accidentally change the value behind on item or even necessary to do that, the conversion problems are often discovered too late. So I have a structure which is able to hold the translations to strings the user is supposed to see and to strings I use to store and load the enums. The big change I did was necessary, as I have two distinct sets of helper classes to hold variables which handle the UI and loading and storing.
One set are the AniVals, these are animatable, the second set are the UIVals, these are static. The first I normally use for variables which define the visuals and movements of objects, the second are typically used for variables which only influence the editor. They are simpler and easier to use, so it makes sense to have both. Conceptually the UIVals are much younger and are by far not complete, whereas the AniVals haven't needed extensions for quite some time.
After adding a new UIVal for enums I only had to change two very important interfaces in the OpenGL-renderer and it worked.
And then I started to change the way the camera behaves. But first I spent some time to clean up the UI where the settings would be added. I reordered some entries and put some of them together into one set. That brought down the number of pages of settings. Then I added a very simple setting to define a factor for the speed the camera moves. And finally I made two more changes, I made it possible to change the "lens" of the camera the editor uses and fixed some of the code I use to rotate the camera. Today I noticed, that the code probably still has some issues, though.
Small Things
I worked on some smaller things in February. First I implemented a new bump mapping shader, it uses Perlin turbulence and is quite flexible, it should be good enough to create walls which don't look so smooth as in the past.
I also made some improvements to the group-object. The first was simple, I changed some texts. But I also added a bigger feature, I can now add objects to the group or remove them without a big problem.
Game
I continued with implementing the track texture. It was going slowly. The first run of the DTD in the JAX-parser found some syntax errors. And I located a missing feature, nothing big. The next step was to finish implementation of the parser. After a short detour I managed to see, that the temporary structure in the parser was actually quite nice to be used as permanent storage format and so refactored the code.
HTTPD
After a very long rest, I also restarted work on the HTTPD. As it was so long, I guess some explanation is ok. I want to write my own HTTP server code so I can implement web servers in C++. I aim for very high efficiency, so the server will be single threaded (I doubt, that for a web server mutlithreaded implementations can compete) and I will try to make it secure. I know, C++ and secure seems to be a contradiction, but I think there are really only two big intrinsic security problems in C++, buffer overflows by not checking buffer sizes and issues with object lifetime (deleting a pointer and then using the memory area pointed to by it).
I believe the first, buffer overflows can be handled in the lowest layer, because in my mind C++ code using char* and similar in "normal code" is just plain wrong. By definition it should only be in interface code to C-libraries. As I try to hide those in low level code, I hope I "only" have to make sure that layer is correct.
The second issue is much harder, lifetime of objects is not an easy subject. But I think I am quite good at managing it, I think the key is to have rigorous definitions of who owns an object. If it is only temporary I always keep it in an std::auto_ptr if I even need a pointer, else it is always defined which object holds it. I personally am no big fan of reference counting, I think it very rarely makes sense (I have a class in the modeler where it was necessary), but generally if it is used a lot it makes more sense to use proper garbage collection as it is easier and faster. I know, that many people seem to not believe the faster part and start to argue about how reference counting minimizes the number of machine instructions at each copy/release operation, completely missing the point that GC does not do that but does reachability computations instead and so wins easily when a lot of copying and allocation/deallocation is taking place, as for many objects it does exactly no operation (the memory just gets free in a block, when the GC has copied the live objects).
Monthly Items
I didn't make it this month to do my items. The items are finished, I even have multiple items not posted yet, the socket and the light switch and also the door and the window. But I am still fighting the program to work as I expect it.
Schedule for March:
Development - Editor/Raytracer - New Stuff
- Finish the Skeleton handling.
- Add some simple form of hair.
- New operator for landscapes (short description)
- Rewrite 'Add Edges'-modifier to make it possible to cut a face along a fragmented edge
- Add moving constraints
- Add timelines for better animation support (description)
- Make the anivals exportable (description)
- Chamfer modifier
- Handle collisions of the cloth and the body
- Parallax mapping
- Add Depth of Field (description)
- Packet Tracing
- Parallel Tracing
- Speed up the OpenGL representation of polyhedron
Modeling
- Texture the character and the pieces of cloth.
- Add the skeleton to the character and the pieces of cloth.
- Model a tank top.
- Model some pants.
- Model some shoes.
- Model some skirt
- Model hair for character.
- Start on the second character.
- Continue on the ship.
- Continue on the Lab scene
- Finish Cat
- Start Bunny
Small Object - Modeling
Model four small or one medium sized object per month
Development - HTTPD
- Add the handling of compression.
- Do the benchmarks.
- Add connection to postgreSQL.
Development - Modeler and HTTPD
- Paper Doll System
Website
- Create Wallpapers
- Create Wallpaper page
It slowly becomes a tradition to be late. So here comes the review of March. Channel MaterialThe channel material is still unfinished. But it saw quite a bit of progress in March. I started with implementing the OpenGL version of the renderer. It tur
Tracked: Apr 09, 22:34