51 void OrthographicLens::
52 write(std::ostream &out,
int indent_level)
const {
61 bool OrthographicLens::
62 do_extrude_depth(
const CData *cdata,
63 const LPoint3 &point2d, LPoint3 &point3d)
const {
64 return do_extrude_depth_with_mat(cdata, point2d, point3d);
71 void OrthographicLens::
72 do_compute_projection_mat(Lens::CData *lens_cdata) {
73 CoordinateSystem cs = lens_cdata->_cs;
74 if (cs == CS_default) {
75 cs = get_default_coordinate_system();
78 PN_stdfloat a = 2.0f / (lens_cdata->_far_distance - lens_cdata->_near_distance);
79 PN_stdfloat b = -(lens_cdata->_far_distance + lens_cdata->_near_distance) / (lens_cdata->_far_distance - lens_cdata->_near_distance);
84 canonical.set(1.0f, 0.0f, 0.0f, 0.0f,
86 0.0f, 1.0f, 0.0f, 0.0f,
91 canonical.set(1.0f, 0.0f, 0.0f, 0.0f,
92 0.0f, 1.0f, 0.0f, 0.0f,
98 canonical.set(1.0f, 0.0f, 0.0f, 0.0f,
100 0.0f, 1.0f, 0.0f, 0.0f,
101 0.0f, 0.0f, b, 1.0f);
105 canonical.set(1.0f, 0.0f, 0.0f, 0.0f,
106 0.0f, 1.0f, 0.0f, 0.0f,
108 0.0f, 0.0f, b, 1.0f);
113 <<
"Invalid coordinate system " << (int)cs <<
" in OrthographicLens!\n";
114 canonical = LMatrix4::ident_mat();
117 lens_cdata->_projection_mat = do_get_lens_mat_inv(lens_cdata) * canonical * do_get_film_mat(lens_cdata);
118 lens_cdata->_projection_mat_left = lens_cdata->_projection_mat_right = lens_cdata->_projection_mat;
120 do_adjust_comp_flags(lens_cdata,
121 CF_projection_mat_inv | CF_projection_mat_left_inv | CF_projection_mat_right_inv,
145 lens->fillin(scan, manager);