• Create Account

14 years ago on June 15th Gamedev.net was first launched! We want to thank all of you for being part of our community and hope the best years are ahead of us. Happy birthday Gamedev.net!

# Raytracing: how to use Perlin noise functions.

Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

6 replies to this topic

### #1Frénésie  Members   -  Reputation: 101

Like
0Likes
Like

Posted 16 April 2012 - 07:44 AM

Hello guys,

I'm doing a raytracer in C and I need to apply some textures on 3D objects.
I saw the noise functions created by Ken Perlin, http://mrl.nyu.edu/~.../doc/oscar.html and i think I could use the noise3() function to apply texture on my 3D objets.
I tried to use this functions in my program, but it didn't work.
I'm wondering how to use this noise3() function and the return value to get a good texture.
Thanks guys for helping me

### #2JTippetts  Moderators   -  Reputation: 5221

Like
0Likes
Like

Posted 16 April 2012 - 07:55 AM

Clarify "it didn't work." Exactly what happened? And what did you do?

### #3Frénésie  Members   -  Reputation: 101

Like
0Likes
Like

Posted 16 April 2012 - 08:42 AM

I used the noise3() function with all the 3d points of my objects, then i got a return value (double).
I choosed 2 default colors (and the third one was the one of the object).
I choosed 3 default values, 0.25, 0.5 and 0.75.
And i did this:

t_color get_texture(t_color c1, t_color c3, t_color c2, double tab[3])
{
t_color text;
double v;
double f;
int i;

i = 0;
while (i < 8)
{
v = v + noise3(tab);
i++;
}
if (v <= s1)
text.color_int = c1.color_int;
else if (v < s2)
{
f = (v - s1) / (s2 - s1);
text.color_char[0] = 0;
text.color_char[1] = (c1.color_char[1] * (1 - f)) + (c2.color_char[1] * f);
text.color_char[2] = (c1.color_char[2] * (1 - f)) + (c2.color_char[2] * f);
text.color_char[3] = (c1.color_char[3] * (1 - f)) + (c2.color_char[3] * f);
}
else if (v < s3)
{
f = (v - s2) / (s3 - s2);
text.color_char[0] = 0;
text.color_char[1] = (c2.color_char[1] * (1 - f)) + (c3.color_char[1] * f);
text.color_char[2] = (c2.color_char[2] * (1 - f)) + (c3.color_char[2] * f);
text.color_char[3] = (c2.color_char[3] * (1 - f)) + (c3.color_char[3] * f);
}
else
text.color_int = c3.color_int;
return (text);
}

whit t_color as:

typedef union u_color
{
int color_int;
char color_char[4];
}t_color;

The result was a random snow. So i think i didn't use the noise3() function.

### #4Bacterius  Crossbones+   -  Reputation: 3857

Like
0Likes
Like

Posted 16 April 2012 - 09:07 AM

You will need to scale the noise frequency accordingly (by multiplying the input vector by a scalar), otherwise the noise will appear random (if the frequency is too high) or will appear uniform (if the frequency is too low). I believe the default implementation assumes input ranges between 0 and 1, so if your points have coordinates on the order of 100, which is likely, it will appear mostly random.

"The best comment is a deleted comment."
website · blog

### #5Frénésie  Members   -  Reputation: 101

Like
0Likes
Like

Posted 16 April 2012 - 09:19 AM

So i need to transform my coordinates to a value between 0 and 1 ?

### #6Bacterius  Crossbones+   -  Reputation: 3857

Like
0Likes
Like

Posted 16 April 2012 - 09:26 AM

Well first you need to make sure that's the problem, try multiplying your input vector (coordinates) by different scalars, say 0.1, 0.001, then 10, and 100, and see how that affects the results. If you see a difference you should be able to tweak it until it looks just right.

"The best comment is a deleted comment."
website · blog

### #7Frénésie  Members   -  Reputation: 101

Like
0Likes
Like

Posted 16 April 2012 - 09:36 AM

Ok i just multiplied my input coordinates by 0.1 and i got some nice results !
Thank you

I'll post when i'll see new problems.

Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

PARTNERS