@@ -42,22 +42,28 @@ fn main(@builtin(global_invocation_id) GlobalInvocationID: vec3<u32>) {
42
42
let p: vec3<f32> = vec3<f32>((x / f32(params.screenWidth)) - 0.5,
43
43
(y / f32(params.screenHeight)) - 0.5,
44
44
params.focalLength);
45
- let offset: f32 = sin(f32(params.time) / 1000) * 0.2;
45
+ let offsetX: f32 = sin(f32(params.time) / 1000) * 0.2;
46
+ let offsetY: f32 = cos(f32(params.time) / 1000) * 0.2;
46
47
let offsetZ: f32 = cos(f32(params.time) / 1000) * 0.1;
47
- let c: vec3<f32> = vec3<f32>(params.sphereCenterX + offset, params.sphereCenterY, params.sphereCenterZ + offsetZ);
48
+ let c: vec3<f32> = vec3<f32>(params.sphereCenterX + offsetX,
49
+ params.sphereCenterY + offsetY,
50
+ params.sphereCenterZ + offsetZ);
48
51
let len: f32 = length(p);
49
52
50
53
let dir: vec3<f32> = vec3<f32>(p.x / len, p.y / len, p.z / len);
51
54
52
- let maxIter: u32 = 20;
53
55
let dist: f32 = 0.0;
54
56
out[GlobalInvocationID.y * params.screenWidth + GlobalInvocationID.x] = 0.0;
57
+
58
+ let maxIter: u32 = 40;
59
+
55
60
for (var i: u32 = 0; i < maxIter; i++) {
56
- let step : f32 = sdf(p, c, params.sphereRadius);
57
- if (step < .001) {
61
+ let dist : f32 = sdf(p, c, params.sphereRadius);
62
+ if (abs(dist) < .001) {
58
63
return;
59
64
}
60
- out[GlobalInvocationID.y * params.screenWidth + GlobalInvocationID.x] += step;
65
+ out[GlobalInvocationID.y * params.screenWidth + GlobalInvocationID.x] += dist;
66
+ // TODO(avh) : march the ray - comment for now until we get the scaling right
61
67
// p = p + dir * step;
62
68
}
63
69
@@ -74,7 +80,7 @@ std::uint32_t getCurrentTimeInMilliseconds() {
74
80
int main (int argc, char **argv) {
75
81
76
82
constexpr size_t NROWS = 16 ;
77
- constexpr size_t NCOLS = 64 ;
83
+ constexpr size_t NCOLS = 96 ;
78
84
79
85
std::array<float , NROWS * NCOLS> screen;
80
86
@@ -96,7 +102,6 @@ int main(int argc, char **argv) {
96
102
/* z */ 5.0 ,
97
103
0 };
98
104
99
-
100
105
std::fill (begin (screen), end (screen), 0 .0f );
101
106
102
107
GPUContext ctx = CreateContext ();
@@ -107,36 +112,36 @@ int main(int argc, char **argv) {
107
112
params.time = getCurrentTimeInMilliseconds () - zeroTime;
108
113
Kernel render =
109
114
CreateKernel (ctx, CreateShader (kSDF ), {}, 0 , devScreen, params);
110
- // ToGPU(ctx, ¶ms, render.buffers[render.numBuffers - 1], sizeof(params));
115
+ // ToGPU(ctx, ¶ms, render.buffers[render.numBuffers - 1],
116
+ // sizeof(params));
111
117
DispatchKernel (ctx, render);
112
118
Wait (ctx, render.future );
113
119
ToCPU (ctx, devScreen, screen.data (), sizeof (screen));
114
120
115
- // https://stackoverflow.com/questions/30097953/ascii-art-sorting-an-array-of-ascii-characters-by-brightness-levels-c-c
116
-
117
- static const char intensity[] = " .:-=+*#%@" ;
118
- static const char intensityReversed[] = " @%#*+=-:. " ;
121
+ static const char intensity[] = " @%#*+=-:. " ;
119
122
// clear the screen
120
123
printf (" \033 [2J" );
121
124
122
- fprintf (stdout, " %s" , show<float , NROWS, NCOLS>(screen, " Raw values" ).c_str ());
125
+ fprintf (stdout, " %s" ,
126
+ show<float , NROWS, NCOLS>(screen, " Raw values" ).c_str ());
123
127
124
128
// normalize values
125
129
float min = *std::min_element (screen.begin (), screen.end ());
126
130
float max = *std::max_element (screen.begin (), screen.end ());
127
- // float min = 20 .0;
128
- // float max = 100 .0;
131
+ // float min = 0 .0;
132
+ // float max = 5 .0;
129
133
130
134
for (size_t i = 0 ; i < screen.size (); ++i) {
131
135
screen[i] = (screen[i] - min) / (max - min);
132
136
}
133
- fprintf (stdout, " %s" , show<float , NROWS, NCOLS>(screen, " Normalized" ).c_str ());
137
+ fprintf (stdout, " %s" ,
138
+ show<float , NROWS, NCOLS>(screen, " Normalized" ).c_str ());
134
139
135
140
// index into intensity array
136
141
std::array<char , NROWS *(NCOLS + 1 )> raster;
137
142
for (size_t i = 0 ; i < screen.size (); ++i) {
138
- raster[i] = intensityReversed[ static_cast < size_t >(
139
- screen[i] * (sizeof (intensity) - 1 ))];
143
+ raster[i] =
144
+ intensity[ static_cast < size_t >( screen[i] * (sizeof (intensity) - 1 ))];
140
145
}
141
146
142
147
for (size_t row = 0 ; row < NROWS; ++row) {
0 commit comments