@@ -71,7 +71,7 @@ func MakeHex(mat patterns.Material, transform primitives.Matrix) shapes.Shape {
71
71
bottom := shapes .MakeCone (true )
72
72
bottom .SetMaterial (mat )
73
73
bottom .SetTransform (primitives .RotationY (i * math .Pi / 3 ).Multiply (
74
- primitives .Translation (0 , - 1 , 0 ).Multiply (
74
+ primitives .Translation (0 , - 1 , 0 ).Multiply (
75
75
primitives .RotationX (3 * math .Pi / 4 ).Multiply (
76
76
primitives .Scaling (0.25 , math .Sqrt (2 ), 0.25 )))))
77
77
hex .AddShape (corner )
@@ -88,13 +88,13 @@ func main() {
88
88
var threads int
89
89
var fov float64
90
90
flag .IntVar (& threads , "threads" , runtime .NumCPU (), "Number of threads for rendering" )
91
- flag .UintVar (& width , "width" , 320 , "Width of rendered image" )
92
- flag .UintVar (& height , "height" , 240 , "Height of rendered image" )
93
- flag .Float64Var (& fov , "fov" , math .Pi / 4 , "Field of View (in Radians)" )
91
+ flag .UintVar (& width , "width" , 480 , "Width of rendered image" )
92
+ flag .UintVar (& height , "height" , 270 , "Height of rendered image" )
93
+ flag .Float64Var (& fov , "fov" , math .Pi / 3 , "Field of View (in Radians)" )
94
94
flag .Parse ()
95
95
camera = components .MakeCamera (width , height , fov )
96
- camera .ViewTransform (primitives .MakePoint (- 20 , 50 , - 35 ),
97
- primitives .MakePoint (15 , 10 , 15 ),
96
+ camera .ViewTransform (primitives .MakePoint (0 , 1.5 , - 4.5 ),
97
+ primitives .MakePoint (0 , 1 , 0 ),
98
98
primitives .MakeVector (0 , 1 , 0 ))
99
99
ch = make (chan XY , 1000 )
100
100
imgMutex = & sync.Mutex {}
@@ -104,25 +104,93 @@ func main() {
104
104
img = image .NewRGBA (image.Rectangle {upLeft , lowRight })
105
105
world = components .MakeWorld ()
106
106
world .SetBackground (* patterns .MakeRGB (0.9 , 0.9 , 0.9 ))
107
- for x := 0.0 ; x < 10 ; x ++ {
108
- for y := 0.0 ; y < 10 ; y ++ {
109
- for z := 0.0 ; z < 10 ; z ++ {
110
- mat := patterns.Material {Pat : patterns .MakeRGB (x * 0.1 , y * 0.1 , z * 0.1 ),
111
- Ambient : 0.1 , Diffuse : 0.7 , Specular : 0.5 ,
112
- Shininess : 200 , Reflective : 0.1 , Transparency : 0 , RefractiveIndex : 0 }
113
- hex := MakeHex (mat , primitives .Translation (x * 4 , y * 3 , z * 4 ))
114
- world .AddObject (hex )
115
- }
116
- }
107
+ d4 := shapes .MakeGroup ()
108
+ d4 .SetTransform (primitives .Translation (1.75 , 0.5 , 0.5 ).Multiply (
109
+ primitives .RotationY (math .Pi / 2 ).Multiply (
110
+ primitives .Translation (0 , 1.0 / 3.0 , 0 ))))
111
+ d4_mat := patterns.Material {Pat : patterns .MakeRGB (0.8 , 0 , 0.8 ), Ambient : 0.1 , Diffuse : 0.7 , Specular : 0.5 ,
112
+ Shininess : 200 , Reflective : 0.1 , Transparency : 0 , RefractiveIndex : 0 }
113
+ d4_points := []primitives.PV {primitives .MakePoint (0 , - 1.0 / 3.0 , math .Sqrt (8.0 / 9.0 )),
114
+ primitives .MakePoint (math .Sqrt (2.0 / 3.0 ), - 1.0 / 3.0 , - math .Sqrt (2.0 / 9.0 )),
115
+ primitives .MakePoint (- math .Sqrt (2.0 / 3.0 ), - 1.0 / 3.0 , - math .Sqrt (2.0 / 9.0 )),
116
+ primitives .MakePoint (0 , 1 , 0 )}
117
+ d4_triangles := []* shapes.Triangle {shapes .MakeTriangle (d4_points [0 ], d4_points [1 ], d4_points [2 ]),
118
+ shapes .MakeTriangle (d4_points [0 ], d4_points [1 ], d4_points [3 ]),
119
+ shapes .MakeTriangle (d4_points [0 ], d4_points [2 ], d4_points [3 ]),
120
+ shapes .MakeTriangle (d4_points [1 ], d4_points [2 ], d4_points [3 ])}
121
+ for _ , triangle := range d4_triangles {
122
+ triangle .SetMaterial (d4_mat )
123
+ d4 .AddShape (triangle )
117
124
}
118
-
119
- // Render time without bounding boxes
120
- // Render finished : 1m34.8119446s
121
- // Render time with bounding boxes
122
- // Render finished : 2.4859576s
123
-
125
+ world .AddObject (d4 )
126
+ d8 := shapes .MakeGroup ()
127
+ d8 .SetTransform (primitives .Translation (0 , 1 , 0.5 ).Multiply (
128
+ primitives .Scaling (0.75 , 0.75 , 0.75 )))
129
+ d8_mat := patterns.Material {Pat : patterns .MakeRGB (0 , 0.8 , 0 ), Ambient : 0.1 , Diffuse : 0.7 , Specular : 0.5 ,
130
+ Shininess : 200 , Reflective : 0.1 , Transparency : 0 , RefractiveIndex : 0 }
131
+ d8_points := []primitives.PV {primitives .MakePoint (0 , 1 , 0 ),
132
+ primitives .MakePoint (1 , 0 , 0 ),
133
+ primitives .MakePoint (0 , 0 , 1 ),
134
+ primitives .MakePoint (- 1 , 0 , 0 ),
135
+ primitives .MakePoint (0 , 0 , - 1 ),
136
+ primitives .MakePoint (0 , - 1 , 0 )}
137
+ d8_triangles := []* shapes.Triangle {shapes .MakeTriangle (d8_points [0 ], d8_points [1 ], d8_points [2 ]),
138
+ shapes .MakeTriangle (d8_points [0 ], d8_points [2 ], d8_points [3 ]),
139
+ shapes .MakeTriangle (d8_points [0 ], d8_points [3 ], d8_points [4 ]),
140
+ shapes .MakeTriangle (d8_points [0 ], d8_points [4 ], d8_points [1 ]),
141
+ shapes .MakeTriangle (d8_points [5 ], d8_points [1 ], d8_points [2 ]),
142
+ shapes .MakeTriangle (d8_points [5 ], d8_points [2 ], d8_points [3 ]),
143
+ shapes .MakeTriangle (d8_points [5 ], d8_points [3 ], d8_points [4 ]),
144
+ shapes .MakeTriangle (d8_points [5 ], d8_points [4 ], d8_points [1 ])}
145
+ for _ , triangle := range d8_triangles {
146
+ triangle .SetMaterial (d8_mat )
147
+ d8 .AddShape (triangle )
148
+ }
149
+ world .AddObject (d8 )
150
+ d20 := shapes .MakeGroup ()
151
+ d20 .SetTransform (primitives .Translation (- 2 , 1 , 2 ).Multiply (
152
+ primitives .Scaling (0.5 , 0.5 , 0.5 )))
153
+ d20_mat := patterns.Material {Pat : patterns .MakeRGB (0.9 , 0 , 0 ), Ambient : 0.1 , Diffuse : 0.7 , Specular : 0.5 ,
154
+ Shininess : 200 , Reflective : 0.1 , Transparency : 0 , RefractiveIndex : 0 }
155
+ d20_points := []primitives.PV {primitives .MakePoint (0 , - 1 , - math .Phi ), // 0
156
+ primitives .MakePoint (0 , - 1 , math .Phi ), // 1
157
+ primitives .MakePoint (0 , 1 , - math .Phi ), // 2
158
+ primitives .MakePoint (0 , 1 , math .Phi ), // 3
159
+ primitives .MakePoint (- 1 , - math .Phi , 0 ), // 4
160
+ primitives .MakePoint (- 1 , math .Phi , 0 ), // 5
161
+ primitives .MakePoint (1 , - math .Phi , 0 ), // 6
162
+ primitives .MakePoint (1 , math .Phi , 0 ), // 7
163
+ primitives .MakePoint (- math .Phi , 0 , - 1 ), // 8
164
+ primitives .MakePoint (math .Phi , 0 , - 1 ), // 9
165
+ primitives .MakePoint (- math .Phi , 0 , 1 ), // 10
166
+ primitives .MakePoint (math .Phi , 0 , 1 )} // 11
167
+ d20_triangles := []* shapes.Triangle {shapes .MakeTriangle (d20_points [0 ], d20_points [2 ], d20_points [8 ]), // front
168
+ shapes .MakeTriangle (d20_points [0 ], d20_points [2 ], d20_points [9 ]),
169
+ shapes .MakeTriangle (d20_points [1 ], d20_points [3 ], d20_points [10 ]), // back
170
+ shapes .MakeTriangle (d20_points [1 ], d20_points [3 ], d20_points [11 ]),
171
+ shapes .MakeTriangle (d20_points [9 ], d20_points [11 ], d20_points [6 ]), // right
172
+ shapes .MakeTriangle (d20_points [9 ], d20_points [11 ], d20_points [7 ]),
173
+ shapes .MakeTriangle (d20_points [8 ], d20_points [10 ], d20_points [4 ]), // left
174
+ shapes .MakeTriangle (d20_points [8 ], d20_points [10 ], d20_points [5 ]),
175
+ shapes .MakeTriangle (d20_points [4 ], d20_points [6 ], d20_points [0 ]), // bottom
176
+ shapes .MakeTriangle (d20_points [4 ], d20_points [6 ], d20_points [1 ]),
177
+ shapes .MakeTriangle (d20_points [4 ], d20_points [8 ], d20_points [0 ]), // bottom split
178
+ shapes .MakeTriangle (d20_points [4 ], d20_points [10 ], d20_points [1 ]),
179
+ shapes .MakeTriangle (d20_points [6 ], d20_points [9 ], d20_points [0 ]),
180
+ shapes .MakeTriangle (d20_points [6 ], d20_points [11 ], d20_points [1 ]),
181
+ shapes .MakeTriangle (d20_points [5 ], d20_points [7 ], d20_points [2 ]), // top
182
+ shapes .MakeTriangle (d20_points [5 ], d20_points [7 ], d20_points [3 ]),
183
+ shapes .MakeTriangle (d20_points [5 ], d20_points [8 ], d20_points [2 ]), //top split
184
+ shapes .MakeTriangle (d20_points [5 ], d20_points [10 ], d20_points [3 ]),
185
+ shapes .MakeTriangle (d20_points [7 ], d20_points [9 ], d20_points [2 ]),
186
+ shapes .MakeTriangle (d20_points [7 ], d20_points [11 ], d20_points [3 ])}
187
+ for _ , triangle := range d20_triangles {
188
+ triangle .SetMaterial (d20_mat )
189
+ d20 .AddShape (triangle )
190
+ }
191
+ world .AddObject (d20 )
124
192
light := components.PointLight {Intensity : patterns .MakeRGB (1 , 1 , 1 ),
125
- Position : primitives .MakePoint (- 30 , 60 , - 30 )}
193
+ Position : primitives .MakePoint (- 1 , 0.5 , - 5 )}
126
194
world .AddLight (light )
127
195
fmt .Println ("Creating goroutines" )
128
196
wg .Add (threads )
0 commit comments