4Material sierpinskiTetrahedronSDF(float3 position,
int iterations,
float bailout,
float* distance)
8 float r = position.x * position.x + position.y * position.y + position.z * position.z;
14 for (i = 0; i < iterations && r < bailout; i++) {
39 r = x * x + y * y + z * z;
42 *distance = (sqrt(r) - 2.0f) * pow(2.0f, -i);
46 material.
ambient = (float3)(0.5f, 0.5f, 0.5f);
48 material.
specular = (float3)(0.5f, 0.5f, 0.5f);
54Material sierpinskiCubeSDF(float3 position,
int iterations,
float* distance)
58 float d = boxSDF(position, (float3)(1), (float3)(1));
59 float3 res = (float3)(0);
62 for (
int m = 0; m < iterations; m++)
64 float3 a = mod(position * s, 2.0f) - 1.0f;
66 float3 r = absolute(1.0f - 3.0f * absolute(a));
68 float da = max(r.x, r.y);
69 float db = max(r.y, r.z);
70 float dc = max(r.z, r.x);
71 float c = (min(da, min(db, dc)) - 1.0f) / s;
76 res = (float3)(d, 0.2f * da * db * dc, (1.0f + (
float)(m)) / 4.0f);
86 material.
specular = (float3)(0.5f, 0.5f, 0.5f);
A struct representing a geometry material, for use with the Phong reflection model.