Since I am getting some hits regarding my ray tracer, I thought it would be cool to include progress on my other projects as well.
I am working on a molecular visualization project regarding molecular 'spiders' that a research group here at UNM is working with. Many, many people are working on getting these molecules to walk around a surface and *hopefully* compute something useful. Primarily, I work with ActionScript in an attempt to get some flashy visualizations online.
In addition to messing with ActionScript, I read papers on molecular visualization to try and figure out how other people are approaching this problem. I hope to use this blog to show some of my progress, post ActionScript for everyone to view, and place my thoughts on academic papers I read regarding molecular visualization.
Please leave me a comment if you find any of this useful.
Thursday, March 27, 2008
Monday, March 17, 2008
.OBJ Loading Up
Hey Hey,
With the help of the two Nate's (Nate Gauntt helping with indexing into Nate Robbins GLM stuff) I was able to load in .obj files.
This took a while to render:
real 5m35.747s
user 4m45.890s
sys 0m2.280s
.OBJ model can be found here. Source is will be here (once the UNM CS network is up, that is.)
With the help of the two Nate's (Nate Gauntt helping with indexing into Nate Robbins GLM stuff) I was able to load in .obj files.
As we swim closer to the dolphins...
This took a while to render:
real 5m35.747s
user 4m45.890s
sys 0m2.280s
.OBJ model can be found here. Source is will be here (once the UNM CS network is up, that is.)
Saturday, March 8, 2008
Done - until refactoring
I still have a few errors in my ray tracer. If you closely look at the green sphere, it should be cut by the plane. Also, the order that I add items to my scene object list currently matters in my ray tracer. This is because I do way too much of the scene shading in the object hit function. In order to fix this, I really need to add more methods to my parent GeometricObject class, and stop implementing things in the derived classes. This is going to take a bit of refactoring, but once I get some sort of version control (SVN) setup I should be able to move forward.
Sphere with Cool Texture by Autumn Stinar
I really, really, really like the artwork my sister sends me. Most of the time for Christmas or my birthday, I ask her for art as presents. The texture I wrapped the sphere in is from a picture message she sent me of a piece inspired by trance lyrics. Since the image was taken with a camera phone (and edited a bit by me) it isn't the highest resolution in the world. I have a view other abstract pieces I want to scan at extremely high resolution and use for sphere textures. My goal is to have an entire scene with her textures.
Earth + Plane
Friday, March 7, 2008
Tiled Plane = Super Easy to test Anti-Aliasing
It is really, really clear what my anti-aliasing is doing when looking at the plane fading out into the distance. Below are some images (no shading - it is easier to see the plane approach the horizon without any shading) of different sample rates. Getting the plane to work took a bit of trial and error, but I think it is looking OK.
I used a completely square image that tiles perfectly. Here's the tile pattern I used (thanks Nate Gauntt):
I used a completely square image that tiles perfectly. Here's the tile pattern I used (thanks Nate Gauntt):
Thursday, March 6, 2008
Thanks Nate!
Nate and I talked about my bug for about 15 minutes and we were able to find it! I was totally calculating the index into my images incorrectly:
tmpColor = RGBVector[width * vertical + horizontal]; // correct
tmpColor = RGBVector[height * vertical + horizontal] // totally wrong
tmpColor = RGBVector[width * vertical + horizontal]; // correct
tmpColor = RGBVector[height * vertical + horizontal] // totally wrong
Map of the Earth, as taught in Panama
Square Textures = Perfect, still some issues with non-square textures
Today I spent a lot of time with my host for my SIBBS class. The speaker, Dr. Julia Cole, is a totally awesome researcher. Listening to her talk, eating a bunch of free meals and hanging out with a number of very intelligent people from all different disciplines made hosting the visit a lot of fun. It still was a lot of work and the experience involved choosing what to sacrifice so I could make the visit enjoyable. I wasn't able to work on graphics quite as much as I would like, but I have made some good progress.
Spherical mapping from a square texture to a sphere is at 100%. Check out the grid texture below Nate Gauntt send me for testing and it perfectly mapped to the sphere.
Spherical mapping from a square texture to a sphere is at 100%. Check out the grid texture below Nate Gauntt send me for testing and it perfectly mapped to the sphere.
Tuesday, March 4, 2008
Anti-Aliasing Looking Good!
Hey hey, it looks like I have random anti-aliasing looking good! I have been working extremely solidly on this project since it was up on the course website. For the next assignment that Joe briefly mentioned, I am going to get started the day after I turn this in, or directly after I turn this in REGARDLESS of when it is posted.
Here's an image I generated from an Earth texture @ 16 samples per pixel. However, I massively shrunk the original image. When I use my giant earth image, I am still getting some moray aliasing patters. I think I'll up the number of samples to 64 or 128 and try with the giant image.
Here's an image I generated from an Earth texture @ 16 samples per pixel. However, I massively shrunk the original image. When I use my giant earth image, I am still getting some moray aliasing patters. I think I'll up the number of samples to 64 or 128 and try with the giant image.
1 Sample per Pixel
16 Samples Per Pixel
And the sweet, sweet code-ness:
....
RGBColor pixelColor = RGBColor(0,0,0);
int num_samples = 16;
float inv_num_samples = (1 / (float)num_samples);
RGBColor tmpColor;
for (int r = 0; r < c =" 0" o =" myWorld.ViewPlane.eyePoint;" count =" 0;" random1 =" (" random1 =" random1" random2 =" (" random2 =" random2" d =" myWorld.ViewPlane.from_screen_to_world(c+random1," tmpcolor =" myWorld.trace_ray(ray);"> 1){
tmpColor.r = 1.0;
}
if (tmpColor.g > 1){
tmpColor.g = 1.0;
}
if (tmpColor.b > 1){
tmpColor.b = 1.0;
}
tmpColor = tmpColor * inv_num_samples;
pixelColor = pixelColor + tmpColor;
}
myWorld.myfile << " " << (ceil( 255 * pixelColor.r)) << " " << (ceil( 255 * pixelColor.g)) << " " << (ceil( 255 * pixelColor.b)) << " "; // Don't forget to zero this out! This jacked me up bad. pixelColor = RGBColor(0, 0,0); ....
....
RGBColor pixelColor = RGBColor(0,0,0);
int num_samples = 16;
float inv_num_samples = (1 / (float)num_samples);
RGBColor tmpColor;
for (int r = 0; r < c =" 0" o =" myWorld.ViewPlane.eyePoint;" count =" 0;" random1 =" (" random1 =" random1" random2 =" (" random2 =" random2" d =" myWorld.ViewPlane.from_screen_to_world(c+random1," tmpcolor =" myWorld.trace_ray(ray);"> 1){
tmpColor.r = 1.0;
}
if (tmpColor.g > 1){
tmpColor.g = 1.0;
}
if (tmpColor.b > 1){
tmpColor.b = 1.0;
}
tmpColor = tmpColor * inv_num_samples;
pixelColor = pixelColor + tmpColor;
}
myWorld.myfile << " " << (ceil( 255 * pixelColor.r)) << " " << (ceil( 255 * pixelColor.g)) << " " << (ceil( 255 * pixelColor.b)) << " "; // Don't forget to zero this out! This jacked me up bad. pixelColor = RGBColor(0, 0,0); ....
Sphere Texturing Done - Just need Anti-Aliasing
Things are looking all right with the spheres. You can completely see the moire patterns due to aliasing on the big sphere. Once I get a little more time to add content to this blog, I'll go over the math behind translating between world coordinated - polar coordinates - image coordinates.
Looking all right, if a bit aliased.
I'm not completely sure if I have the texture mapping completely right - it looks like only 1/4 of the below smiley texture mapping onto 1/2 of the sphere - I am fairly certain my polar - y image index is OK, but my polar - x may still need a little work. These concepts are not extremely difficult mathematically, but it takes a LONG time for me to code them up in C++.
If people like checking this stuff out, leave me a comment! I've seen some hits from all over the world on this, and I would like to hear what you guys think.
If people like checking this stuff out, leave me a comment! I've seen some hits from all over the world on this, and I would like to hear what you guys think.
Sunday, March 2, 2008
Looking Better
The texture mapping is going better. I think I may almost be done with the sphere. After contemplating a handball, and talking with my friend from Kazakhstan, I realized that when looking at a sphere from my angles, you will see the full -radius to +radius in two dimensions. However, the third dimension you will only see one radius worth of sphere. This is due to the self occlusion of the sphere; once you reach a (relative) peak, the sphere will be blocking itself. Maybe this seems obvious to many people, but for me it was a wonderful revelation while looking at the handball.
Ultimately, I realize that the Z-axis and Y-axis are incorrectly labeled in my code (they are switched). This hasn't been noticeable before, due to the self similar nature of all the objects I have ray-traced, but it explains why my relative positions look a little different than my class mates. Now, because of the above property, it makes a huge difference. I was repeating the texture below and above the equation.
Ultimately, I realize that the Z-axis and Y-axis are incorrectly labeled in my code (they are switched). This hasn't been noticeable before, due to the self similar nature of all the objects I have ray-traced, but it explains why my relative positions look a little different than my class mates. Now, because of the above property, it makes a huge difference. I was repeating the texture below and above the equation.
More coming Soon
200 x 200 texture
200 x 200 texture
Attempt at Texture Mapping on a Sphere
There is something weird going on around the poles; I may be calculating rho incorrectly by somewhere taking an absolute value or something. I should index different parts of the image if I am close to 0 or if I am close to Pi.
The red around the border is intentional - I was concerned with accessing elements of my image in a non sequential way, I thought this was the source of my problem. However, the non sequential accesses are as they should be, right around the edges of the sphere where I wrap around to the other side to get my texture.
The red around the border is intentional - I was concerned with accessing elements of my image in a non sequential way, I thought this was the source of my problem. However, the non sequential accesses are as they should be, right around the edges of the sphere where I wrap around to the other side to get my texture.
Subscribe to:
Posts (Atom)