custom_materials.lua


NAME
    custom_materials

NOTES
    Package of custom materials.

    Example 1:
        require("custom_materials")
        mat = custom_materials.new(true)
        mat:turquoise()
        mat:show()

    Example 2:
        ...
        require("custom_materials")
        mat = custom_materials.new()
        mat:turquoise()
        plot:add(mat.material)

SOURCE

require("register")

local P = {}

if _REQUIREDNAME == nil then
    custom_materials = P
else
    _G[_REQUIREDNAME] = P
end

function P.new(test)
    if (test) then
        local render, scene, root, light, material, shape, xyz, nor =
            zeGrf.new("render", "scene", "node", "light", "material", "polygon", "vertex", "vertex")
        render:add(scene)
        scene:set{node = root}
        root:add(light, material, shape)
        light:set{position = {1, 1, 1}}
        shape:set{type = "triangles", vertex = xyz, vertex_normal = nor}
        P.render = render
        P.material = material
        local arr = zeUtl.new("double")
        zeMake.sphere(arr, 150, 5)
        xyz:add(arr)
        arr:shift(3)
        nor:add(arr)
    else
        P.material = zeGrf.new("material")
    end
    return P
end

function P.show(self)
    require("towindow")
    towindow(self.render, 521, 512)
end

function P.black_plastic(self, side)
    if not side then side = 0 end
    self.material:set{ambient = {0, 0, 0, 1, side},
                      diffuse = {.01, .01, .01, 1, side},
                      specular = {.5, .5, .5, 1, side},
                      shininess = {32, side}}
end

function P.white_plastic(self, side)
    if not side then side = 0 end
    self.material:set{ambient = {0, 0, 0, 1, side},
                      diffuse = {.55, .55, .55, 1, side},
                      specular = {.7, .7, .7, 1, side},
                      shininess = {32, side}}
end

function P.brass(self, side)
    if not side then side = 0 end
    self.material:set{ambient = {.329412, .223529, .027451, 1, side},
                      diffuse = {.780392, .568627, .113725, 1, side},
                      specular = {.992157, .941176, .807843, 1, side},
                      shininess = {27.8974, side}}
end

function P.bronze(self, side)
    if not side then side = 0 end
    self.material:set{ambient = {.2125, .1275, .054, 1, side},
                      diffuse = {.714, .4284, .18144, 1, side},
                      specular = {.393548, .271906, .166712, 1, side},
                      shininess = {25.6, side}}
end

function P.chrome(self, side)
    if not side then side = 0 end
    self.material:set{ambient = {.25, .25, .25, 1, side},
                      diffuse = {.4, .4, .4, 1, side},
                      specular = {.774597, .774597, .774597, 1, side},
                      shininess = {76.8, side}}
end

function P.copper(self, side)
    if not side then side = 0 end
    self.material:set{ambient = {.19125, .0735, .0225, 1, side},
                      diffuse = {.7038, .27018, .0828, 1, side},
                      specular = {.256777, .137622, .086014, 1, side},
                      shininess = {12.8, side}}
end

function P.emerald(self, side)
    if not side then side = 0 end
    self.material:set{ambient = {.0215, .1745, .0215, 1, side},
                      diffuse = {.07568, .61424, .07568, 1, side},
                      specular = {.633, .727811, .633, 1, side},
                      shininess = {78.8, side}}
end

function P.gold(self, side)
    if not side then side = 0 end
    self.material:set{ambient = {.24725, .1995, .0745, 1, side},
                      diffuse = {.75164, .60648, .22648, 1, side},
                      specular = {.628281, .555802, .366065, 1, side},
                      shininess = {51.2, side}}
end

function P.jade(self, side)
    if not side then side = 0 end
    self.material:set{ambient = {.135, .2225, .1575, 1, side},
                      diffuse = {.135, .2225, .1575, 1, side},
                      specular = {0.316228, 0.316228, 0.316228, 1, side},
                      shininess = {12.8, side}}
end

function P.obsidian(self, side)
    if not side then side = 0 end
    self.material:set{ambient = {.05375, .05, .06625, 1, side},
                      diffuse = {.18275, .17, .22525, 1, side},
                      specular = {0.332741, 0.328634, 0.346435, 1, side},
                      shininess = {38.4, side}}
end

function P.pearl(self, side)
    if not side then side = 0 end
    self.material:set{ambient = {.25, .20725, .20725, 1, side},
                      diffuse = {1, .829, .829, 1, side},
                      specular = {.296648, .296648, .296648, 1, side},
                      shininess = {11.264, side}}
end

function P.pewter(self, side)
    if not side then side = 0 end
    self.material:set{ambient = {.105822, .058824, .113725, 1, side},
                      diffuse = {.427451, .470588, .541176, 1, side},
                      specular = {.333333, .333333, .521569, 1, side},
                      shininess = {9.84615, side}}
end

function P.polished_bronze(self, side)
    if not side then side = 0 end
    self.material:set{ambient = {.25, .148, .06475, 1, side},
                      diffuse = {.4, .2368, .1036, 1, side},
                      specular = {.774597, .458461, .200621, 1, side},
                      shininess = {76.8, side}}
end

function P.polished_copper(self, side)
    if not side then side = 0 end
    self.material:set{ambient = {.2295, .08825, .0275, 1, side},
                      diffuse = {.5508, .2118, .066, 1, side},
                      specular = {.580594, .223257, .0695701, 1, side},
                      shininess = {51.2, side}}
end

function P.polished_gold(self, side)
    if not side then side = 0 end
    self.material:set{ambient = {.24725, .2245, .0645, 1, side},
                      diffuse = {.34615, .3143, .0903, 1, side},
                      specular = {.797357, .723991, .208006, 1, side},
                      shininess = {83.2, side}}
end

function P.polished_silver(self, side)
    if not side then side = 0 end
    self.material:set{ambient = {0.23125, 0.23125, 0.23125, 1, side},
                      diffuse = {0.2775, 0.2775, 0.2775, 1, side},
                      specular = {0.773911, 0.773911, 0.773911, 1, side},
                      shininess = {89.6, side}}
end

function P.rubber(self, side)
    if not side then side = 0 end
    self.material:set{ambient = {.02, .02, .02, 1, side},
                      diffuse = {.01, .01, .01, 1, side},
                      specular = {.4, .4, .4, 1, side},
                      shininess = {10.0, side}}
end

function P.ruby(self, side)
    if not side then side = 0 end
    self.material:set{ambient = {.1745, .01175, .01175, 1, side},
                      diffuse = {.61424, .04136, .04136, 1, side},
                      specular = {.727811, .626959, .626959, 1, side},
                      shininess = {76.8, side}}
end

function P.silver(self, side)
    if not side then side = 0 end
    self.material:set{ambient = {.19225, .19225, .19225, 1, side},
                      diffuse = {.50754, .50754, .50754, 1, side},
                      specular = {.508275, .508275, .508275, 1, side},
                      shininess = {51.2, side}}
end

function P.turquoise(self, side)
    if not side then side = 0 end
    self.material:set{ambient = {.1, .18725, .174, 1, side},
                      diffuse = {.396, .74151, .69102, 1, side},
                      specular = {.297254, .30829, .306675, 1, side},
                      shininess = {12.8, side}}
end