static void glossyReflectiveConstructor(GlossyReflectiveClass *self, va_list *list) { Phong->__constructor__(self, list); MATERIAL(self)->shadeRGB = &glossyReflectiveShadeRGB; MATERIAL(self)->shadePath = &glossyReflectiveShadePath; }
static Color emissiveGetLe(EmissiveClass *self) { Color color; color = MATERIAL(self)->color; colorMult(&color, PRIV(mLs)); return (color); }
static Color emissiveShadeRGB(EmissiveClass *self, HitRecordStruct *hitRecord) { Color color; color = MATERIAL(self)->color; colorMult(&color, emissiveShade(self, hitRecord, NULL)); return (color); }
void *emissiveUnserialize(SceneSerializerClass *serializer, xmlNodePtr node) { EmissiveClass *self; MaterialIdAssoc *assoc; char *strId; char *strLs; float ls; self = new(Emissive); if (materialUnserializeSet(serializer, node, self) != 0) return (0); serializer->setStrsFromProp(serializer, node, "id", &strId, "ls", &strLs, NULL); assoc = xmalloc(sizeof(*assoc)); *assoc = (MaterialIdAssoc) {false, strId, MATERIAL(self)}; if (setFloatFromStr(strLs, &ls) != 0) { fprintf(stderr, "Error: bad attributes\n"); return (0); } self->scaleRadiance(self, ls); return (assoc); }
Cube::Cube(Object *parent, const material_t material, const point3d_t dim, const point3d_t p, const point3d_t d) : Shape(parent, material, p, d), dim(dim), top1(this, MATERIAL(COLOR_RED), POINT3D(dim.x/2.0, dim.y/2.0, dim.z/2.0), // (x, y, z) POINT3D(dim.x/2.0, dim.y/2.0, -dim.z/2.0), // (x, y, -z) POINT3D(-dim.x/2.0, dim.y/2.0, dim.z/2.0)), // (-x, y, z) top2(this, MATERIAL(COLOR_RED), POINT3D(-dim.x/2.0, dim.y/2.0, dim.z/2.0), // (-x, y, z) POINT3D(dim.x/2.0, dim.y/2.0, -dim.z/2.0), // (x, y, -z) POINT3D(-dim.x/2.0, dim.y/2.0, -dim.z/2.0)), // (-x, y, -z) bottom1(this, MATERIAL(COLOR_RED), POINT3D(-dim.x/2.0, -dim.y/2.0, dim.z/2.0), // (-x, -y, z) POINT3D(dim.x/2.0, -dim.y/2.0, -dim.z/2.0), // (x, -y, -z) POINT3D(dim.x/2.0, -dim.y/2.0, dim.z/2.0)), // (x, -y, z) bottom2(this, MATERIAL(COLOR_RED), POINT3D(-dim.x/2.0, -dim.y/2.0, -dim.z/2.0), // (-x, -y, -z) POINT3D(dim.x/2.0, -dim.y/2.0, -dim.z/2.0), // (x, -y, -z) POINT3D(-dim.x/2.0, -dim.y/2.0, dim.z/2.0)), // (-x. -y. z) left1(this, MATERIAL(COLOR_BLUE), POINT3D(-dim.x/2.0, dim.y/2.0, dim.z/2.0), // (-x, y, z) POINT3D(-dim.x/2.0, dim.y/2.0, -dim.z/2.0), // (-x, y, -z) POINT3D(-dim.x/2.0, -dim.y/2.0, dim.z/2.0)), // (-x, -y, z) left2(this, MATERIAL(COLOR_BLUE), POINT3D(-dim.x/2.0, dim.y/2.0, -dim.z/2.0), // (-x, y, -z) POINT3D(-dim.x/2.0, -dim.y/2.0, -dim.z/2.0), // (-x, -y, -z) POINT3D(-dim.x/2.0, -dim.y/2.0, dim.z/2.0)), // (-x, -y, z) right1(this, MATERIAL(COLOR_BLUE), POINT3D(dim.x/2.0, -dim.y/2.0, dim.z/2.0), // (x, -y, z) POINT3D(dim.x/2.0, -dim.y/2.0, -dim.z/2.0), // (x, -y, -z) POINT3D(dim.x/2.0, dim.y/2.0, -dim.z/2.0)), // (x, y, -z) right2(this, MATERIAL(COLOR_BLUE), POINT3D(dim.x/2.0, -dim.y/2.0, dim.z/2.0), // (x, -y, z) POINT3D(dim.x/2.0, dim.y/2.0, -dim.z/2.0), // (x, y, -z) POINT3D(dim.x/2.0, dim.y/2.0, dim.z/2.0)), // (x, y, z) front1(this, MATERIAL(COLOR_GREEN), POINT3D(dim.x/2.0, dim.y/2.0, dim.z/2.0), // (x, y, z) POINT3D(-dim.x/2.0, -dim.y/2.0, dim.z/2.0), // (-x, -y ,z) POINT3D(dim.x/2.0, -dim.y/2.0, dim.z/2.0)), // (x, -y, z) front2(this, MATERIAL(COLOR_GREEN), POINT3D(dim.x/2.0, dim.y/2.0, dim.z/2.0), // (x, y, z) POINT3D(-dim.x/2.0, dim.y/2.0, dim.z/2.0), // (-x, y, z) POINT3D(-dim.x/2.0, -dim.y/2.0, dim.z/2.0)), // (-x, -y, z) back1(this, MATERIAL(COLOR_GREEN), POINT3D(dim.x/2.0, -dim.y/2.0, -dim.z/2.0), // (x, -y, -z) POINT3D(-dim.x/2.0, -dim.y/2.0, -dim.z/2.0), // (-x, -y, -z) POINT3D(dim.x/2.0, dim.y/2.0, -dim.z/2.0)), // (x, y, -z) back2(this, MATERIAL(COLOR_GREEN), POINT3D(-dim.x/2.0, -dim.y/2.0, -dim.z/2.0), // (-x, -y, -z) POINT3D(-dim.x/2.0, dim.y/2.0, -dim.z/2.0), // (-x, y, -z) POINT3D(dim.x/2.0, dim.y/2.0, -dim.z/2.0)) // (x, y, -z) { }