75 lines
1.5 KiB
Plaintext
75 lines
1.5 KiB
Plaintext
//cmd: +w300 +h300 +am2 +a0.01
|
|
|
|
#version 3.7;
|
|
|
|
#global_settings {assumed_gamma 1}
|
|
#default{ finish{ ambient 0.1 diffuse 0.9 }}
|
|
background {rgb 0}
|
|
|
|
|
|
#macro mapInit(DimX, DimY)
|
|
#local Map = array[DimX][DimY];
|
|
mapFillSolid(Map, rgb<0,0,0>)
|
|
Map
|
|
#end
|
|
|
|
|
|
#macro mapFillSolid(Map, Colour)
|
|
mapFillRect(Map,<0,0>,<dimension_size(Map,1),dimension_size(Map,2)>, Colour)
|
|
#end
|
|
|
|
|
|
#macro mapFillRect(Map, RectLowerLeft, RectUpperRight, Colour)
|
|
#for (X, RectLowerLeft.x, RectUpperRight.x - 1)
|
|
#for (Y, RectLowerLeft.y, RectUpperRight.y - 1)
|
|
#local Map[X][Y] = Colour;
|
|
#end
|
|
#end
|
|
#end
|
|
|
|
|
|
#macro mapSetPixel(Map, Pixel, Colour)
|
|
#local Map[Pixel.x][Pixel.y] = Colour;
|
|
#end
|
|
|
|
|
|
#macro mapGetPixel(Map, Pixel)
|
|
Map[Pixel.x][Pixel.y]
|
|
#end
|
|
|
|
|
|
#macro mapObject(Map)
|
|
// to visualize the map, each pixel is rendered as a sphere
|
|
#for (X,0,dimension_size(Map,1)-1)
|
|
#for (Y,0,dimension_size(Map,2)-1)
|
|
sphere{
|
|
<X, Y, 0>, 0.5
|
|
pigment{colour Map[X][Y]}
|
|
}
|
|
#end
|
|
#end
|
|
#end
|
|
|
|
//== Scene
|
|
|
|
#declare DimX = 100;
|
|
#declare DimY = 100;
|
|
#declare ImgMap = mapInit(DimX, DimY);
|
|
mapFillSolid(ImgMap, rgb<1, 0, 0>)
|
|
mapSetPixel(ImgMap, <25,25>, rgb<1,1,1>)
|
|
mapFillRect(ImgMap, <50,50>, <75,75>, rgb<0,0,1>)
|
|
|
|
#debug concat("Colour at: <", vstr(2,<25,25>,", ",0,0),"> is: <", vstr(3, mapGetPixel(ImgMap, <25,25>),", ",0,0),">\n")
|
|
|
|
mapObject(ImgMap)
|
|
|
|
camera{
|
|
location <DimX/2, DimY/2, -110>
|
|
look_at <DimX/2, DimY/2, 0>
|
|
right x*image_width/image_height
|
|
}
|
|
light_source{
|
|
<DimX/2, DimY/2, -3000>
|
|
rgb 1
|
|
}
|