Since I was going to get knee-deep in blender, I wanted to create objects that were simple enough and unique enough to keep me interested in fine-tuning the littlest details. I decided on a making references to my favorite PlayStation One game: Crash Bandicoot (known for its many crates), and one of my favorite TV Shows: Doctor Who. Jupiter has no special significance other than its Jupiter and it’s been around for billions of years.
When I started this assignment I spent the vast majority of my time learning how to use blender modeling tools, uv mapping, and creating custom objects. Once the objects were ready to be shipped off to the actual program I needed to think about how I would place them all in a single scene. One by one, I tweaked the transformations to either flip or rotate to account for the positioning blender provided after exporting the objects. When I finally had the objects I needed in place, I had some fun with multiplying some of the crates as well as as making objects fly around the scene. The picture doesn’t do it justice, but in real-time the space floor, jupiter, the crystal, and the TARDIS are all rotating with their own custom transformations.
The most challenging aspect of this assignment was settling on designs to create in blender that would be feasible to work with in the actual code. A few times I had to scrap some designs and start over with a simpler model in order to render them correctly in my scene. On top of this, when the objects I wanted were ready, trying to get the uv texture coordinates to unwrap nicely was another headache. For trickier objects like the TARDIS, I ended up unwrapping it first, taking a screenshot of uv image in blender based on where each face expected to have a texture mapped to it, and then finally make the image in GIMP according to those outlines. The next hurdle was texture mapping in the code. At first I attempted to use the same texture variable and simply bind/unbind with different texture uploads but that ended up applying similar textures to multiple objects. The other longstanding issue was the inability to read texture coordinates from the .obj file which resulted in hard coding values until the issue was resolved by replacing “/”‘s with “//”‘s in each file.