// Here we set up transformations. These are just examples, set up so // that our unit tests can transform among spaces in ways that we will // recognize as correct. The "shader" and "object" spaces are required // by OSL and the ShaderGlobals will need to have references to them. // For good measure, we also set up a "myspace" space, registering it // with the RendererServices. // static void setup_transformations (SimpleRenderer &rend, OSL::Matrix44 &Mshad, OSL::Matrix44 &Mobj) { Matrix44 M (1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1); rend.camera_params (M, ustring("perspective"), 90.0f, 0.1f, 1000.0f, xres, yres); // Make a "shader" space that is translated one unit in x and rotated // 45deg about the z axis. Mshad.makeIdentity (); Mshad.translate (OSL::Vec3 (1.0, 0.0, 0.0)); Mshad.rotate (OSL::Vec3 (0.0, 0.0, M_PI_4)); // std::cout << "shader-to-common matrix: " << Mshad << "\n"; // Make an object space that is translated one unit in y and rotated // 90deg about the z axis. Mobj.makeIdentity (); Mobj.translate (OSL::Vec3 (0.0, 1.0, 0.0)); Mobj.rotate (OSL::Vec3 (0.0, 0.0, M_PI_2)); // std::cout << "object-to-common matrix: " << Mobj << "\n"; OSL::Matrix44 Mmyspace; Mmyspace.scale (OSL::Vec3 (1.0, 2.0, 1.0)); // std::cout << "myspace-to-common matrix: " << Mmyspace << "\n"; rend.name_transform ("myspace", Mmyspace); }
bool OSLRenderServices::get_matrix(OSL::ShaderGlobals *sg, OSL::Matrix44 &result, ustring from, float time) { ShaderData *sd = (ShaderData *)(sg->renderstate); KernelGlobals *kg = sd->osl_globals; if (from == u_ndc) { copy_matrix(result, kernel_data.cam.ndctoworld); return true; } else if (from == u_raster) { copy_matrix(result, kernel_data.cam.rastertoworld); return true; } else if (from == u_screen) { copy_matrix(result, kernel_data.cam.screentoworld); return true; } else if (from == u_camera) { copy_matrix(result, kernel_data.cam.cameratoworld); return true; } else if (from == u_world) { result.makeIdentity(); return true; } return false; }
bool OSLRenderServices::get_inverse_matrix(OSL::ShaderGlobals *sg, OSL::Matrix44 &result, ustring to, float time) { ShaderData *sd = (ShaderData *)(sg->renderstate); KernelGlobals *kg = sd->osl_globals; if (to == u_ndc) { copy_matrix(result, kernel_data.cam.worldtondc); return true; } else if (to == u_raster) { copy_matrix(result, kernel_data.cam.worldtoraster); return true; } else if (to == u_screen) { copy_matrix(result, kernel_data.cam.worldtoscreen); return true; } else if (to == u_camera) { copy_matrix(result, kernel_data.cam.worldtocamera); return true; } else if (to == u_world) { result.makeIdentity(); return true; } return false; }
bool OSLRenderServices::get_inverse_matrix(OSL::ShaderGlobals *sg, OSL::Matrix44 &result, ustring to, float time) { KernelGlobals *kg = kernel_globals; if(to == u_ndc) { Transform tfm = transform_transpose(kernel_data.cam.worldtondc); COPY_MATRIX44(&result, &tfm); return true; } else if(to == u_raster) { Transform tfm = transform_transpose(kernel_data.cam.worldtoraster); COPY_MATRIX44(&result, &tfm); return true; } else if(to == u_screen) { Transform tfm = transform_transpose(kernel_data.cam.worldtoscreen); COPY_MATRIX44(&result, &tfm); return true; } else if(to == u_camera) { Transform tfm = transform_transpose(kernel_data.cam.worldtocamera); COPY_MATRIX44(&result, &tfm); return true; } else if(to == u_world) { result.makeIdentity(); return true; } return false; }