/*-----------------------------------------------*/ RigidBody::RigidBody() { /* PURPOSE: Constructor for RigidBody object RECEIVES: RETURNS: RigidBody object REMARKS: */ rtf = RigTForm(); scale = Matrix4(); children = NULL; numOfChildren = 0; color = Cvec3(.5, .5, .5); originalColor = color; geom = NULL; isVisible = true; isChildVisible = true; material = SOLID; mode = GL_TRIANGLES; }
Cvec3 xyz_to_rgb(struct colourSystem *cs, const Cvec3 xyz) { double xr, yr, zr, xg, yg, zg, xb, yb, zb; double xw, yw, zw; double rx, ry, rz, gx, gy, gz, bx, by, bz; double rw, gw, bw; Cvec3 rgbColor; xr = cs->xRed; yr = cs->yRed; zr = 1 - (xr + yr); xg = cs->xGreen; yg = cs->yGreen; zg = 1 - (xg + yg); xb = cs->xBlue; yb = cs->yBlue; zb = 1 - (xb + yb); xw = cs->xWhite; yw = cs->yWhite; zw = 1 - (xw + yw); /* xyz -> rgb matrix, before scaling to white. */ rx = (yg * zb) - (yb * zg); ry = (xb * zg) - (xg * zb); rz = (xg * yb) - (xb * yg); gx = (yb * zr) - (yr * zb); gy = (xr * zb) - (xb * zr); gz = (xb * yr) - (xr * yb); bx = (yr * zg) - (yg * zr); by = (xg * zr) - (xr * zg); bz = (xr * yg) - (xg * yr); /* White scaling factors. Dividing by yw scales the white luminance to unity, as conventional. */ rw = ((rx * xw) + (ry * yw) + (rz * zw)) / yw; gw = ((gx * xw) + (gy * yw) + (gz * zw)) / yw; bw = ((bx * xw) + (by * yw) + (bz * zw)) / yw; /* xyz -> rgb matrix, correctly scaled to white. */ rx = rx / rw; ry = ry / rw; rz = rz / rw; gx = gx / gw; gy = gy / gw; gz = gz / gw; bx = bx / bw; by = by / bw; bz = bz / bw; /* rgb of the desired point */ rgbColor = Cvec3((rx * xyz[0]) + (ry * xyz[1]) + (rz * xyz[2]), (gx * xyz[0]) + (gy * xyz[1]) + (gz * xyz[2]), (bx * xyz[0]) + (by * xyz[1]) + (bz * xyz[2])); return rgbColor; }