What I've been working on for the past 7 months

A couple of days ago, Rational announced Jazz, which is a suped up version of Eclipse. My project at IBM dealt heavily with Jazz, so now that Jazz is announced, I can say what I've been working on.
Bluegrass is the project that I've been working on at IBM over the past seven months. It's a virtual world embedded in an IDE. Bluegrass is targeted towards distributed software development teams. It helps them communicate and brainstorm about project ideas in the virtual world.
The three main objectives were:
1. To serve as a visualization for the team artifacts.
Various team artifacts such as how the team is doing overall, or what work each member has been doing is shown in world. This helps with team awareness of what's going on with the team.
2. To provide tools for brainstorming meta-work.
We provide a method for users to create post-it like bubbles that they can arrange in any way they like. Users can import images and other information from online resources. There is a save/load capability to store your past brainstorming sessions.
3. Give users a social place to hang out and get to know each other.
We implemented several social games and tools that users could play with to give users a topic of conversation. We also connected with outside data sources like the corporate directory and corporate facebook application to give users more of an idea of who the people are.
I guess seeing the thing is the best thing, and we have a video in IBM's codestation in Second Life, where you can see it. The SLurl for it is:
http://slurl.com/secondlife/IBMCODESTATION/124/159/25/
Also, there has been a bunch of press coverage about Bluegrass. Here are some links to some articles:
http://www-03.ibm.com/press/us/en/pressrelease/23308.wss
http://www.infoworld.com/article/08/01/14/jazz-bluegrass_1.html
http://www.eweek.com/c/a/Application-Development/IBM-Opens-Jazz-to-Developers/
http://dusanwriter.wordpress.com/2008/01/14/ibm-launches-project-bluegrass-virtual-world-collaboration-tool/
Wednesday, January 2, 2008
Pixel Machine: A Ray Tracer
So a friend of mine showed me a site called Pixel Machine. This guy wrote a ray tracer in one day. I looked at it and said, "Hey, I could do that." Now why I'd want to do that to anybody might be a complete mystery, but I happen to need a little brushing up on C++, so I decided to go ahead and try it out. I started this morning at 10AM or so, and we'll see how far we get today!
EDIT: I switched the order of it so the more recent entries stay up top...
By the way, you can download the latest source here.
Day 3 5:30PM
Super Sampling and Reflective Materials
Added anti-aliasing code and extended the phong material to support reflection. It now takes a while to render the image.... Also, the image to the left has blurry reflections turned on. You can see that the balls appear on the floor with a blurry reflection.
Also changed the color of the background to blue, so you can tell that the reflected material is blue.
Day 2 12:00AM
Didn't really work on it much today. Today was the big interview day. I didn't get a chance to work on it much, but here's phong materials!
1:00AM
Rested for the rest of the night. Wondering where to take this next...
12:00AM
So now we've got triangles and shadows working. There's a plane sitting under the two balls, and it doesn't look like the balls are floating in mid-air.
Also it turned out that my normals were correct but I was calculating the Light vector backwards... doh!
10:00PM
We have colored spheres!! Yay! Reminds me of old school CS courses...
So, I added a Light class, and a material class with a lambertian child. It was only after getting colored images that I realized that I had my image flipped 90 degrees sideways, and the r and b channel were flipped.
So this is two spheres, placed at 0,0,0 and 2,0,0, looking from the +z axis towards the origin. There's actually something funky going on with the red sphere, but I'll get to fixing it soon.
Next steps: Phong materials, Triangle geometry, Mesh Geometry, and Acceleration Structures! Oye so long...
7:00PM
Dinner break and work out break...no work done... I see how trying to program all day is so difficult... props to those who just blow through 10+ hours in a row straight.
4:00PM

Now to get to the guts of the program. Here's the easy part, right? *harhar*
I set up classes for all the following: Camera, Geometry (including just a Sphere for now), Vector3 class for math functions, and the Scene object (contains all geometry and lights information). I also created an intersection Record data structure that can hold all information about the object you hit in the scene.
For now, i just intersected a sphere at 0,0,0 and my camera at 5,0,0 looking towards the origin. Also for now, I just made the program return a white color if it hit anything at all, and black if it hit nothing at all. Wee, we have a circle!!
2:00PM
Lunch Break:I just wanted to say that I love Villa Pizza of Holmdel, NJ. It is the best pizza ever! There's a reason why it's been my favorite for 10+ years. Okay, end rant. Back to work.
12:00PM

Start! I figured there were two parts to writing it:
The easy part: making the ray tracer.
The hard part: doing all the setup.
So, I started off with creating a way to write out image files. I went with what the Pixel Machine did, since that was not to be the hardest thing. BMP's are "braindead" according to my friend, so I went with bmps, and I made a gradient 256x256 image.
EDIT: I switched the order of it so the more recent entries stay up top...
By the way, you can download the latest source here.
Day 3 5:30PM
Super Sampling and Reflective MaterialsAdded anti-aliasing code and extended the phong material to support reflection. It now takes a while to render the image.... Also, the image to the left has blurry reflections turned on. You can see that the balls appear on the floor with a blurry reflection.
Also changed the color of the background to blue, so you can tell that the reflected material is blue.
Day 2 12:00AM
Didn't really work on it much today. Today was the big interview day. I didn't get a chance to work on it much, but here's phong materials!1:00AM
Rested for the rest of the night. Wondering where to take this next...
12:00AM
So now we've got triangles and shadows working. There's a plane sitting under the two balls, and it doesn't look like the balls are floating in mid-air.Also it turned out that my normals were correct but I was calculating the Light vector backwards... doh!
10:00PM
We have colored spheres!! Yay! Reminds me of old school CS courses...So, I added a Light class, and a material class with a lambertian child. It was only after getting colored images that I realized that I had my image flipped 90 degrees sideways, and the r and b channel were flipped.
So this is two spheres, placed at 0,0,0 and 2,0,0, looking from the +z axis towards the origin. There's actually something funky going on with the red sphere, but I'll get to fixing it soon.
Next steps: Phong materials, Triangle geometry, Mesh Geometry, and Acceleration Structures! Oye so long...
7:00PM
Dinner break and work out break...no work done... I see how trying to program all day is so difficult... props to those who just blow through 10+ hours in a row straight.
4:00PM

Now to get to the guts of the program. Here's the easy part, right? *harhar*
I set up classes for all the following: Camera, Geometry (including just a Sphere for now), Vector3 class for math functions, and the Scene object (contains all geometry and lights information). I also created an intersection Record data structure that can hold all information about the object you hit in the scene.
For now, i just intersected a sphere at 0,0,0 and my camera at 5,0,0 looking towards the origin. Also for now, I just made the program return a white color if it hit anything at all, and black if it hit nothing at all. Wee, we have a circle!!
2:00PM
Lunch Break:I just wanted to say that I love Villa Pizza of Holmdel, NJ. It is the best pizza ever! There's a reason why it's been my favorite for 10+ years. Okay, end rant. Back to work.
12:00PM

Start! I figured there were two parts to writing it:
The easy part: making the ray tracer.
The hard part: doing all the setup.
So, I started off with creating a way to write out image files. I went with what the Pixel Machine did, since that was not to be the hardest thing. BMP's are "braindead" according to my friend, so I went with bmps, and I made a gradient 256x256 image.
