I have finished 95% percent of the raytracer, and since it is written in C# and doesn't use unsafe code, I could use it with asp.net. A parser interprets XML for the raytracer and produces a final image at the bottom of the page. The online sample lacks textures and meshes, which I plan to add later. Also the documentation of the markup language is not complete, but you can get the hang of it by taking a look at the samples. Everyday I will update the raytracer and parser for the bugs. Please use the report page to report any bug or exception that comes up! You can find the website here.
Monday, December 24, 2012
Monday, September 17, 2012
Friday, September 7, 2012
Break: Calculating perfect numbers
Till now there have been 4 perfect numbers discovered, but it would be also nice to know how to calculate them. The logic is very simple. I will write the logic and code in C++/CLI.
First lets define perfect numbers. Perfect numbers are numbers that are equal to their divisors. For example number 6, its divisors are 1,2,3 (excluding the number itself). 1 + 2 + 3 = 6. There are about 47 perfect numbers discovered till now, the first 4 are very easy to get; the rest go from 8 digits to millions of digits. The logic is very simple, Here is the code:
long count = 1;
for( ; ;)
{
long current = 0;
for(long i = count - 1; i > 0; i--)
{
if(count % i == 0) // make sure the current number is divisble with the numbers smaller than it
{
current += i;
}
}
if(current == count)
{
Console::WriteLine(count);
}
count++;
}
First lets define perfect numbers. Perfect numbers are numbers that are equal to their divisors. For example number 6, its divisors are 1,2,3 (excluding the number itself). 1 + 2 + 3 = 6. There are about 47 perfect numbers discovered till now, the first 4 are very easy to get; the rest go from 8 digits to millions of digits. The logic is very simple, Here is the code:
long count = 1;
for( ; ;)
{
long current = 0;
for(long i = count - 1; i > 0; i--)
{
if(count % i == 0) // make sure the current number is divisble with the numbers smaller than it
{
current += i;
}
}
if(current == count)
{
Console::WriteLine(count);
}
count++;
}
Monday, August 27, 2012
C# raytracer from scratch
I am building a complete C# raytracer. It uses my own math library and it will be part of the Disque Engine. The raytracer is close to completion. Right now it can render the basic shapes such as spheres, cubes, cones, cylinders, disks, rectangles, and triangles. I am also trying to implement a ply file reader so that I can render the Stanford bunny or other standard models. After I finish the raytracer I will post tutorials on how to build your own.
Here are some samples(time format is h:m:s.ms) :
Here are some samples(time format is h:m:s.ms) :
Simple image rendered at 256 samples per pixel, total render time: 00:09:43.838
An image of 1000 random spheres rendered at 121 samples per pixel, total render time: 02:13:45.002
I will provide more samples as the raytracer advances.
Thursday, July 12, 2012
How to create a sphere programmatically in XNA
I "discovered" an easy but silly way to create a sphere programmatically in XNA, it is very simple. The idea came to me when I wanted to create huge planets in XNA to make an endless map. Any way the method is very simple, I don't know If someone knows it or it was used before, but till now it is working and efficient. You can control the resolution or how "round" the sphere is.
The code is written in C# with microsoft's XNA 4.0.
Here is a high resolution sphere in wire frame:
The sphere contains 8100 vertices and 48600 indices.
Code:
public class Sphere { VertexPositionColor[] vertices; //later, I will provide another example with VertexPositionNormalTexture VertexBuffer vbuffer; short[] indices; //my laptop can only afford Reach, no HiDef :( IndexBuffer ibuffer;
Subscribe to:
Posts (Atom)