Saturday, June 27, 2009

Selection Box Complete

I've completed work on the selection box tool. You can now drag a box across the screen to select everything inside of it. For example, in the image below, with this tool you can easily select all of the edges in a cylinder along the sides by dragging a box that contains these edges.



The selection box tool works in all modes, including vertices, edges, faces, and objects.

Friday, June 26, 2009

Selection Box

Well, I've spent some time, and got the selection box for group selection to work. You still can't do group selection, but the box that you drag is being drawn.

Thursday, June 25, 2009

OBJ Importer Complete

The OBJ importer is now complete! I'm sure it's not bug free, but it is functional. I was surprised that the adjacency/winged-edge stuff just kind of fell together without much trouble. Then I worked on importing materials as well. Since The Forge does not currently support texturing, basically all texture information within the file is ignored.

Below is my knot that was in Wings3D, colored and everything.



I exported it as an OBJ file, and then imported it back into The Forge:



It actually doesn't look as nice in The Forge right now, because the normals aren't being calculated correctly, so there's no shading being done. But having this importer done is a huge step in the right direction.

A Start on the OBJ Importer

I'm really down to only three major things: some work on the deletion modifiers, box selection, and an OBJ importer. All of these are going to be challenging to pull off and will probably take some time. I've done some work on each of these, so in a sense, you could say that every significant component in The Forge has at least been started on.

Right now, I'm working on the OBJ importer, and making good progress. The geometry is read in and assembled, and you can see in the image below, that this seems to be working. The winged edge data structure isn't being assembled correctly yet, though. I'll need to do some work to determine which edges are adjacent to other edges, and to let each vertex know of an edge that they are adjacent to. Beyond that, I still need to import the material information as well, which will take up a bit more time.

Monday, June 22, 2009

Sphere Primitive

The sphere primitive is now essentially complete. It still has some problems with normals, but I suspect that is actually caused by the normal calculation, rather than the sphere primitive itself. All of the primitives have this problem. It is one of the first bugs that will need to be addressed.

Below is a screenshot of the sphere primitive. At the same time, I decided to add in a lot of polygons to see how much it could handle. It seemed to work just fine, though I have a decent graphics card, which might explain why. This sphere has over 2000 polygons, which I suppose isn't an extremely large amount, but it is enough that I feel safe claiming The Forge can handle small models just fine.

Undo/Redo

I've gotten the undo/redo system working now. I feel lucky, because it is one of those rare times where you type in some code, run it, and it works the first time. Of course, I haven't tested it thoroughly yet, that will come in time. But some basic tests show that is is working for the most part.

Sunday, June 21, 2009

Version 1.0 Plans

I just wanted to make a short post about what's left to do for version 1.0. I'm getting to the point where all major features have been implemented. There are only a few things left to do.

First, I want to implement an undo/redo system. This is important, because you occasionally make mistakes, and of course, you need the program to be forgiving, and allow you to go back.

Second, I want an importer that can read in OBJ files. The exporter for OBJ files is already complete. The importer will be a bit more complicated.

Third, I'm planning on implementing group selection, so that instead of selecting everything one item at a time, you can drag a box across the screen and select everything inside of it.

Fourth, I still need to do some work on the deletion modifiers. In particular, you can't delete faces at all, and the vertex and edge deletion modifiers are limited and buggy.

Fifth, I still need to finish my sphere primitive, which is only partly implemented.

Once these five steps are complete, we'll have a functional alpha version that has all major features implemented, though likely still quite buggy.

After version 1.0 is complete, I'm planning on developing a version 1.1, that has a few more primitive types (cone and torus) as well as a couple more modifiers (especially ones along normals, and possibly an extrude region) and a few more importers and exporters (.dae, .fbx, and .3ds, all of which can be done with the FBX SDK).

Manual (Keyboard) Entry for Modifiers

When I was originally working on the framework for modifiers, I made some good progress with manual entry with a keyboard. This is useful because when you are handling the modifier with the mouse, you can see visually what's going on, but you may not be very precise. For instance, let's say you want to rotate something 45 degrees. With the mouse, you can rotate it until it looks about right, but you might be off by several degrees. With manual entry, a dialog pops up that allows you to type in specific values for the parameters, with zero error. I had some strange bugs in it that made it useless when the original modifier stuff was done, but now I've gone back and fixed the problems that it was having originally, and the manual input system works like a charm. Press TAB to activate it.

Export as OBJ

The Forge now gives you the ability to export a model as an OBJ model, so you can load it up in various other programs. For instance, take the cube below, with color materials, made by The Forge.



I've taken this model, which was exported as an OBJ and imported it into Wings 3D, shown below:



Importing will be a bigger challenge, because I'll have to assemble a winged edge structure from the data in the file. I've made lots of OBJ importers before, but they've never required assembling a winged edge data structure from the data. Importing is the next big step.

Friday, June 19, 2009

Materials

I've completed work on color materials. The materials weren't actually to bad to implement, it was the GUI for editing and selecting materials that took the time. So now The Forge allows you to create and apply materials to objects.

The outliner shows you the materials that are in your project, and allows you to edit them. You can see the outliner in the picture below.



Below are a couple of pictures of a few simple objects with materials applied to them. I'm not really able to show this with more complicated models, because for some reason, when I added normals, the program suddenly got really buggy. It crashes on most of the modifiers, as well as with the cylinder primitive. I think I know what the problem is for those though, so they shouldn't take long to fix. In the mean time, check out the images below.





Yes, that's cornflower blue, and yes, that yellow material is emissive, so the shading is obscured by the "glow".

Thursday, June 18, 2009

Normals, Smooth Shading, and Material Editor

Progress the last couple of days has been slow. I've had other things that I've been working on, and a couple of bugs that gave me problems for a long period of time. But it's time for some updates.

I got normals into the model, mostly. When modifiers change the model, they'll need to recalculate the normals. Once I got the normals in there, I put in smooth shading, and I'm debating on allowing the user to switch back and forth between smooth and flat shading in version 1.0.



Also, I got started on color based materials. Texturing won't come until after version 1.0, but color materials are coming soon. Below is a screenshot of the material editor that is in place right now. I still have some work to do to assign materials to faces.



I still have a way to go, but over the last two days, I've begun tackling the two biggest features left: normals, and materials. I also finished up most of the menu items, and there are only a few things left to do before The Forge reaches an alpha state. (For The Forge, an alpha stage is one where all major features are implemented, but still buggy.) If I keep finding time to work on it, this might happen in about a week.

Tuesday, June 16, 2009

Connect Vertices Complete

I've (sort of) finished the last creation modifier: connecting vertices. It actually doesn't work in quite the same way as Wings yet. For instance, if in Wings, you have a rectangle with eight vertices selected on one side and another eight on the opposite side, and choose connect from the menu, it will make eight connections. This doesn't do that yet, because the mechanics are a bit complicated, but it is something I'm planning on for the future.

At any rate, now I'm essentially done with the creation modifiers, and I'm moving on to the deletion modifiers. Once that is complete, I'll be headed towards a pre-alpha release version that people will be able to download.

Monday, June 15, 2009

Extrude Complete

I've completed the Face > Extrude modifier. It was quite a bit of work, mentally, keeping track of all of the edges and vertices. But I can tell you, I already miss having the ability to do Face > Extrude > Normal that Wings3D provides. In fact, all of the modifiers that I have, I'll eventually want to add in versions that work in the direction of the normal.

Beyond that, the fact that I'm still missing Face > Extrude Region is a big limitation as well!

Enough complaints though. The fact that extrusion is working is a big deal. It took quite a bit of time, but this feature makes The Forge tons more powerful, and it leaves only one creation modifier to go: Vertex > Connect.

You can see in the image below, that now, I'm suddenly able to do quite a bit more with The Forge.



Things are progressing....

File Chooser Improvements

I've had limited time today, and I will probably have limited time for a few days in a row here, since I've got a few pressing matters that I need to deal with.

Still, though, I've accomplished a number of things that will be helpful. I've made a number of improvements to the save/load process, including displaying icons for *.forge files, and adding on .forge to the end of filenames of they don't have it already. This way, if you just type in "Junk", it will name the file "Junk.forge". Of course, this has one limitation: if you call the file "Junk.eisqwt", the program will call it "Junk.eisqwt.forge". So ultimately, I'll need to go back and make it so that it only does this if there is not another file extension already.

Below is a screenshot of the current file chooser:

Sunday, June 14, 2009

Edge Cut Complete

The first creation modifier is complete: Edge > Cut. This allows you to take an edge and split it into two with a new vertex in the middle. There are three planned creation modifiers for version 1.0: edge cutting, connecting vertices, and extruding faces.

These, along with the existing transformation modifiers, and a few deletion modifiers will give a fairly complete set of tools for doing basic modeling. In later versions, these modifiers will likely be turned into plugins, and more modifiers will be added.

Transformation Modifiers Complete

Of the modifiers that will be available in The Forge 1.0, there are three basic types: transformations, which take existing geometry and move it around; creations, which add new geometry to the model; and deletions, which remove geometry from the model. All of the planned transformation modifiers for version 1.0 are implemented now. This is a huge step, since this means that you can do some basic modeling. As a result, I'm making the current version of The Forge be version 0.2.

Saving and Loading

Well, saving and loading to a file is complete now. It was actually quite simple, since I just used serialization. It appears to be working well. You can see in the image below that the menu items are now enabled, and the model that is shown in the Geometry window was saved and loaded later.



Because I used serialization, it wasn't much work to do, and even as I make future modifications to the model class, I won't ever have to change anything about the saving and loading component.

The drawback is, it won't be easy to read in files from a previous version of the model class in some situations (if we remove something). I don't think that will be a problem, but if it becomes one, I suppose I can make a converter for it.

Saturday, June 13, 2009

Movement Modifiers

I've finally gotten a system ready for modifiers, which are the basic editing component of The Forge. Any tool that you use to modify a model is a modifier. Some modifiers do not require user input, like for instance, one that does smoothing on the model, or the transition modifiers, which change what is selected in a model when you go from one mode to another (for example, the end points of any selected edge get selected when you switch over from edge mode to vertex mode). Other modifiers require user input. In Wings and in The Forge, this is typically done by turning on the modifier and moving the mouse around, which applies the input values to the modifier. For example, you choose Move > X from the menu, and then you can move the mouse side-to-side, see visually where the movement will put the selected stuff, and then apply or cancel the modification.

It took quite a bit of time between yesterday and today to design and develop a system for handling various modifiers, but it is basically going now. You can see in the screenshot below, that you can do some basic editing of the model's mesh.



Right now, the only things you can do are move vertices, edges, faces, and meshes. I'm still planning on rotation around an axis, as well as scaling (uniform, axis, and radial), along with a few modifiers to add to the mesh (connect two vertices, cut edges, and extrude faces), as well as modifiers to delete parts of a mesh.

The other day I said that once these things are going, the state of the program would move from pre-alpha to alpha, which I think I'd better retract. Once these things are going, you will indeed be able to do basic modeling, but there are a number of other features that would need to be implemented still, so the program would still be in a pre-alpha state. Having said that, though, having the underlying modifier system in place means huge progress!

New Icon for The Forge

So, I decided that I needed to redo the main icon for the program. The flame looked a bit too much like an onion, rather than a flame. So I've updated it to look a little nicer, and made new versions of the main logo, as well as the blog logo.

Here's the new icon:

New icons all around!

I didn't think I'd have much time to do anything with The Forge today, but turns out, I did, but not much. I did some small adjustments to the main logo icon, to make it shiny, and remade the About box icon and logo to reflect those changes. I also added an icon to the main window.

In addition to that, I redid the colors on the Geometry Window tool bar to reflect the colors of the logo, shown below.



I finished creating the basic context menus, though they don't do anything yet. I'm still in the process of designing the underlying architecture for these menu commands. It is something that needs to be pretty flexible, since these are eventually going to be plugins, so I want to take some time to design it well, so that it requires the least amount of changing later, as well as provides the most flexibility, though I think I've got a system that will work well. Perhaps tomorrow, after I've finished up a few things for work and stuff, I'll be able to get some basic editing going....

Thursday, June 11, 2009

Beginnings of Context Menus



One of the big things that Wings has that is nice is their context menus. The Forge is going to have these as well, and will be operated in a similar manner. Basically, rather than piling a bunch of icons on the screen, and hoping that you'll be able to find the one that does the job you want, only the options that are valid at a particular point in time will be available.

Today I got started on making those menus, though there is a long way to go before they will be fully developed. In fact, I'd say that when they are functioning like they should, it will be time to move from 'Pre-Alpha' to 'Alpha', since you'll be able to model things.

Wednesday, June 10, 2009

Selection Mode Changing and an About Box

The Forge is coming along nicely, though it obviously still has a ways to go. Today, I added in functionality for switching between various selection modes, and having the selected pieces of the model respond appropriately. (For example, if you have a vertex selected, and switch to edge mode, adjacent edges will be selected as well.)

Below is a screenshot of the current development of The Forge.


Additionally, we've added in an about box, which was just something that I didn't think would take very long to do, and I could just do before going to bed, but it took over an hour to make the image and everything. Here's what it looks like. I have to say I'm pretty proud of the way it turned out.

Tuesday, June 9, 2009

Launch of The Forge development blog

I've been spending quite a bit of time lately working on my new 3D modeler, The Forge. It is based on Wings3D, and I'm hoping that because it is implemented in Java, it will take off as an open source project. Of course, I'm not sure at this point whether this will be open source or not, but I'm thinking it will be.

Anyway, today, after spending some time cleaning up my picking/selection code, I moved forward with starting to implement modifiers. Modifiers will be the basic building block of the modeling process. It is what you'll choose from the menus to make things happen.

I've started working on some simple modifiers for when you change the selection state (e.g. from vertex mode to face mode). I've still got a ways to go on that, but hopefully tomorrow or the next day, that will be complete, and I can start doing things like moving vertices and stuff.