For everybody who does not know about my tool (und thus its previous versions) a quick introduction that everybody will know what I am talking about :). I will also talk about much more than just my tool, but general problems and research projects in regards to vector graphics for OSDM and in general actually.
Vector Graphics in Oldskool Demomaker
The demoscene tool “Oldskool Demomaker” by Peace of Testaware to create oldskool style intro and demo productions like in the good old days supports vector graphics. Very basic with little more than some fake light shading of flat-shaded quad polygon-vector objects with only a limited number of faces and data points (the number 1.000 is what you could call the border-line area for the size of the mesh. Less than 1.000 okay, above that, may be, may be not. try!)
Unfortunately is the format for the mesh definitions not a standard one or something used by any 3D modeling software that I know of (still looking for the one, that was used to borrow the mesh layout from, if there is any). This makes it very hard to create or change any vector objects. The definition is in readable text format and not binary, but that’s not unusual for this kind of data. It does not help much with making changes to it, because what’s missing is the visual element (in 3 dimensions) , which is of the utmost importance. Looking at the columns of numbers for data points and polygon meshes makes your head spin in the best of cases.
So tweaks via a text editor like notepad is cumbersome to say the least. A spreadsheets application like Excel is helpful for some of the possible tweaks you might have in mind, but its also very limited. So I decided one day to write some scripts, originally meant for batch jobs etc. with no interface to help me with some of the fundamental tasks that are tedious, prone to errors and following some mathematical pattern. Things like rotating, resizing and shifting of a vector object.
VOBJ Tool Humble Beginnings
Those things were in particular of high importance before OSDM implemented features to control the angles, rotations and such for vector objects in general and also during run-time. This things lost some significance with the April 2010 release of OSDM, which introduced many features to deal with those things. However, my scripts already outgrew their original purposes, thanks to other OSDM fans, such as “Wildcop”, who are no programmers and needed an interface for the tool and started making suggestions for new features when they actually got one. So I added more features like the cloning of an object with options to manipulate the clone at the same time.
At one point I started to add the separate feature to create new basic objects from scratch based on some variables to manipulate the results. I think it started with the option to generate a “Sphere”, based on a Excel spreadsheet created by Wildcop, which he used in the past, but was unfortunately very static in nature without much options for changing some of the basic parameters. Well, after the “Spheres” problem was solved, new objects followed. Now a wide variety of basic objects and shapes can be created with the Object Generator Tool add-on.
Creating new objects from scratch without a modeler is so hard and time consuming that not many sat down and actually did it. That’s why the amount of vector objects for OSDM remained very limited in number for a long time. The object generator helped and in combination with the tools part for adjusting, replicating and merging of objects, new stuff could be created, but still only very limited in nature.
Conversion of Meshes in Other Formats
There are so many vector designs for everything imaginable out there, produced by millions of people on dozens of computer hardware and hundreds of computer software (modelers) platforms throughout multiple decades that it was a shame that we could not tap into this vast pool to make use of it in OSDM. So I started to look at conversions from popular or easy to convert mesh formats to the proprietary OSDM mesh format.
Progress was slow, but I got better at it. My tool currently supports more or less okay to acceptable conversions from four other mesh formats to OSDM. Best results are probably achieved with the RenderWare (.RWX files) to OSDM (.VOBJ) converter. It was the first format where I was successfully able to convert color and transparency settings in addition to the simple data points and polygon structures. However, the new version of my tool is now also able to extract color and transparency information from the .MTL material files for WaveFront (.OBJ files) meshes, if available and also from the VRML 1.0 (.WRL files), if they were provided.
None of the converters support OSDM vector animations nor the “shadow” parameter. The biggest problem there is probably the lack of knowledge and understanding from my part about what the actual meanings in mathematical terms are… in OSDM and not in terms of the features provided by the standard modelers. OSDM is using some home-made tricks and fake effects to accomplish some pseudo lighting and shadow visual effects. In regards to animations I need to admit, that I hadn’t had the time yet to get my head around the general subject yet to even start looking into possible conversions from other modeler mesh formats.
The Final Goal – Modeler for OSDM Meshes
The final goal at the end of the tunnel is of course something like a modeler / designer tool for OSDM poly meshes. This involves graphical visualization and actual rendering of the 3d vectors, which cannot be done via script like the other stuff that I did so far already. So I started looking into some alternative options. I looked at multiple options in parallel, including solutions in Pure Basic, the language OSDM itself was written in and also MS VB.NET and oldskool Visual Basic 6 frameworks, 3D Libraries and 3D rendering/modeling sample source codes.
My vector viewer tool (build intro my VOBJ tool and also available as stand-alone application), which was written in Pure Basic is one of the fruits from my research. I hit many dead ends though in regards to the design of an actual modeler. All the stuff I found so far is based on triangular polygon meshes only, which does not work so great for our purposes, because OSDM meshes do not support real triangular polygons and only quad points polygons instead. I won’t go into much details, but if you are working with quads instead of triangles, several additional layers of complexity and several new problems are part of the mix that you don’t have, if you only work with triangles. I will only mention one of the issues: accidental “self-intersecting polygons” (cannot happen with triangles).
What I do in my converters for example, for meshes that include triangular polygons, is to use the first polygon point again also as the last one in my quad point definition, EG. “A”, “B”, “C” and “A”.
Currently Ventured Avenues – Research
I found a promising 3D Engine for Visual Basic 6, called Dex3D V0.0.8, which was written and released (including its fullsource code) by Jerry Chen. In my work-in-progress modeler there, I can already do some nice things like changing colors of polygon faces, remove entire polygons and also merge two neighboring triangular “pseudo-quads” to a single and “real” quad polygon. I started working on things like the removal of “edges” (lines) to basically merge two “real’” quad polygons. Polygon reduction is one of the most important things that you do in order to repurpose existing meshes for OSDM, because most meshes have simply too much points or polygons to work with OSDM (remember the magic 1.000 border?). I am still trying to figure out how I can determine over which edge my mouse pointer is currently hovering over, taking into account that the object was rotated and zoomed and shifted and the info that my mouse is over “A” line of a polygon isn’t cutting it, if that line happens to be on the “opposite” side of the object instead of being one of the lines of a polygon that I am facing at right now.
Problems That I am Facing Now
Apropos “facing”, another problem that I still haven’t solved entirely is the dealing with so called “back sides” of polygons. Actually I do deal with it, but more than OSDM does. OSDM does not seem to care much about things like direction and point definition order of polygons (clockwise and counter-clockwise orientation) to separate “front facing polygons” and “back faces” for back faces culling and Z-Buffering (what’s supposed to be visible and what’s not).
Polygon transparency is also a problem with the Dex3d engine, because it does not really use Direct 3D, Open GL and stuff like that, which support RGBA color specifications for the alpha blending of surfaces. It uses standard GDI32 functions for the most part to do the rendering and I have not found a way to make the 0-255 levels of the alpha transparency of OSDM polygons work using GDI32. I just recently stumbled across some other 3D Engine, also for Visual Basic 6, but which is based on OpenGL, which supports all this stuff. However the documentation for that engine is rather poorly, the subject complicated, but at least a lot of sample source code is available to answer questions indirectly, taking more time unfortunately. Well, I keep looking and work step by step forward to get something like a modeler for OSDM done eventually.
I never did graphic programming in the scene nor elsewhere before, so it’s all “NEW” stuff for me. I used to be good in math in school, but the subject is complication and I don’t recall using much of it in school nor the extended classes that I got outside of the regular school schedule while I was part of the Natural Science Society in East Germany at the Humboldt University in Berlin. I certainly didn’t do anything with it using English terminology, which only adds to the stuff that is new to me.
Back to the VOBJ Tool
The JUMP from Version 2.1B to 3.0 happened for a reason. Much of the underlying code of the tool was rewritten and cleaned up.
I mentioned earlier that the tool was written in script, specifically VBScript for the most part and its limitations. I started working on a port of the tool to VB.NET, but then, VB.NET is also new to me, so it will take a while and some learning to complete the transition. However, I learned a lot about the general subject of computer graphics, in particular 3D Vector graphics and also some nice tricks in VBScript that come in handy for problems like the ones I try to solve with my little tool.
Well, it’s a nice and long way of saying that it was time to clean up the mess that I started when I jumped into this project without knowing where I was heading or even realizing that there was supposed to be a direction to begin with. The structure, format and documentation of the code put together by myself were testament to this. Instead of trying to keep the baby alive, I decided for the more radical step of making a new one and to discard (for the most part) the old one.
Knowing when to “Let Go” is always hard and some folks don’t even manage to do something like that at all and rather stop working on the problem altogether instead of taking some steps backward and start off a second (or third) time clean to reduce problems that are already visible and glooming on the horizon.
No Refunds for Something that is Free!
I hope that I also eliminated most of the stupid interface bugs of the previous versions with this re-write. While I was making things “nice” under the hood, I also thought a bit more about the user. A good thing to do, if you plan to create a professional application with the intention to sell to people. Folks who are paying money for it typically have some expectations that they want to see realized by the application in return for their investment. Don’t panic, there are no intensions to monetize on this tool, EG. switching to a shareware model or something like that. Well, if something is free, it’s hard to under-deliver in terms of value.
Any expectation met or even exceeded represents a value indefinitely larger than the user has a right to expect (and demand respectively). That’s the crux with the free stuff. It was done by somebody for HIS own purpose who is just kind enough to make it accessible to others who might have to happen the same or similar problem they’d like to solve somehow. If it works, great, if not, sorry, but $0.00 refunds are not an option. Not via PayPal, Google Checkout, nor an old-school written paper check.
Anyhow. I wanted to say that I did make a lot of noticeable changes to the user interface in the hope to make it easier to use and more intuitive. One new feature to accomplish this is the active options highlighting and the quick help via tool-tip if you hover with the mouse over a label for a parameter and more.
VOBJ Tool V3.0Beta Overview
The Main/Original Tool
The Main Tool. Move, Scale, Rotate, Clone, Adjust, Merge, Cleanup, Rearrange and Fix 3D Vector and 3D Ball Vector Object Files.
Primitives Creator for Spheres, Torus, Cubes, Pyramids, Cones, Cylinders, Grids, Gems, Stars, Cogs and more vector objects.
The are only two new object types for the Object Creator tool compared to the previous version of it; the “Cog” and the “Grid” creators.
Tools and Converters
Nothing new, but a lot improved and expanded
Renderware (.RWX), Wavefront(.OBJ), VRML 1 (.WRL) and Render386 (.PLG) Mesh converter to VOBJ format for OSDM. Polygon-Reduction and Triangle Polygons to Quad Polygons merger tool.
Furthermore. The converter features are now also available via command-line options for batch processing.
VOBJ Tool Settings
Primarily for the VOBJ Tool for the cleanup of objects. New here is the public “debug” option that can be enabled for trouble-shouting.
File Info Tool
Introduced with the previous version and not expanded in this new version. Actually, I removed a few features that it used to have before, which I might re-add later again, if I see the need for it.
Help and Documentation
I am pretty proud of it, because it is IMO detailed and extensive, what is rarely done for scene related tools hehe.
Well, I don’t want to start praising myself, because (for the German readers of this blog) “Eigenlob Stinkt!” 😉
I put a lot of stuff in the updated documentation of the tool, so I check it out yourself for further details.
VOBJ Viewer Tool (also available stand-alone)
Also included a stand-alone version of the VOBJ viewer tool. It’s also used for the preview feature of the object generator.
The latest and past versions of the VOBJ Tool as well as my own OSDM productions and numerous resources for intro designers can be found at my web site at http://www.roysac.com/osdm/
Visit the Download Page for the VOBJ Tool! ->
Finally Some Legal Blah Blah
PS. Those tools are freeware. Do with it whatever you like, except selling it. You can use it free, copy it, share it whatever. You are using it at your own risk. You cannot make me liable for any damage or loss of data that might results directly or indirectly because of the use of my tools.