mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-02 09:52:27 -04:00
Lens::set_custom_film_mat()
This commit is contained in:
parent
830fbcde1f
commit
d3a295623e
@ -681,6 +681,18 @@ get_keystone() const {
|
|||||||
return cdata->_keystone;
|
return cdata->_keystone;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: Lens::get_custom_film_mat
|
||||||
|
// Access: Published
|
||||||
|
// Description: Returns the custom_film_mat specified for the
|
||||||
|
// lens.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
INLINE const LMatrix4 &Lens::
|
||||||
|
get_custom_film_mat() const {
|
||||||
|
CDReader cdata(_cycler);
|
||||||
|
return cdata->_custom_film_mat;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: Lens::get_projection_mat
|
// Function: Lens::get_projection_mat
|
||||||
// Access: Published
|
// Access: Published
|
||||||
|
@ -340,6 +340,46 @@ clear_keystone() {
|
|||||||
do_throw_change_event(cdata);
|
do_throw_change_event(cdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: Lens::set_custom_film_mat
|
||||||
|
// Access: Published
|
||||||
|
// Description: Specifies a custom matrix to transform the points on
|
||||||
|
// the film after they have been converted into nominal
|
||||||
|
// film space (-1 .. 1 in U and V). This can be used to
|
||||||
|
// introduce arbitrary scales, rotations, or other
|
||||||
|
// linear transforms to the media plane. This is
|
||||||
|
// normally a 2-d matrix, but a full 4x4 matrix may be
|
||||||
|
// specified. This is applied on top of any film size,
|
||||||
|
// lens shift, and/or keystone correction.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void Lens::
|
||||||
|
set_custom_film_mat(const LMatrix4 &custom_film_mat) {
|
||||||
|
nassertv(!custom_film_mat.is_nan());
|
||||||
|
CDWriter cdata(_cycler, true);
|
||||||
|
cdata->_custom_film_mat = custom_film_mat;
|
||||||
|
do_adjust_user_flags(cdata, 0, UF_custom_film_mat);
|
||||||
|
do_adjust_comp_flags(cdata, CF_projection_mat | CF_projection_mat_inv |
|
||||||
|
CF_projection_mat_left_inv | CF_projection_mat_right_inv |
|
||||||
|
CF_film_mat | CF_film_mat_inv, 0);
|
||||||
|
do_throw_change_event(cdata);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: Lens::clear_custom_film_mat
|
||||||
|
// Access: Published
|
||||||
|
// Description: Disables the lens custom_film_mat correction.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void Lens::
|
||||||
|
clear_custom_film_mat() {
|
||||||
|
CDWriter cdata(_cycler, true);
|
||||||
|
cdata->_custom_film_mat = LMatrix4::ident_mat();
|
||||||
|
do_adjust_user_flags(cdata, UF_custom_film_mat, 0);
|
||||||
|
do_adjust_comp_flags(cdata, CF_projection_mat | CF_projection_mat_inv |
|
||||||
|
CF_projection_mat_left_inv | CF_projection_mat_right_inv |
|
||||||
|
CF_film_mat | CF_film_mat_inv, 0);
|
||||||
|
do_throw_change_event(cdata);
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: Lens::set_frustum_from_corners
|
// Function: Lens::set_frustum_from_corners
|
||||||
// Access: Published
|
// Access: Published
|
||||||
@ -1618,6 +1658,10 @@ do_compute_film_mat(CData *cdata) {
|
|||||||
0.0f, 0.0f, 0.0f, 1.0f) * cdata->_film_mat;
|
0.0f, 0.0f, 0.0f, 1.0f) * cdata->_film_mat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((cdata->_user_flags & UF_custom_film_mat) != 0) {
|
||||||
|
cdata->_film_mat = cdata->_film_mat * cdata->_custom_film_mat;
|
||||||
|
}
|
||||||
|
|
||||||
do_adjust_comp_flags(cdata, CF_film_mat_inv, CF_film_mat);
|
do_adjust_comp_flags(cdata, CF_film_mat_inv, CF_film_mat);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2155,6 +2199,7 @@ clear() {
|
|||||||
_view_vector.set(0.0f, 1.0f, 0.0f);
|
_view_vector.set(0.0f, 1.0f, 0.0f);
|
||||||
_up_vector.set(0.0f, 0.0f, 1.0f);
|
_up_vector.set(0.0f, 0.0f, 1.0f);
|
||||||
_keystone.set(0.0f, 0.0f);
|
_keystone.set(0.0f, 0.0f);
|
||||||
|
_custom_film_mat = LMatrix4::ident_mat();
|
||||||
|
|
||||||
_user_flags = 0;
|
_user_flags = 0;
|
||||||
_comp_flags = CF_fov;
|
_comp_flags = CF_fov;
|
||||||
|
@ -131,6 +131,10 @@ PUBLISHED:
|
|||||||
INLINE const LVecBase2 &get_keystone() const;
|
INLINE const LVecBase2 &get_keystone() const;
|
||||||
void clear_keystone();
|
void clear_keystone();
|
||||||
|
|
||||||
|
void set_custom_film_mat(const LMatrix4 &custom_film_mat);
|
||||||
|
INLINE const LMatrix4 &get_custom_film_mat() const;
|
||||||
|
void clear_custom_film_mat();
|
||||||
|
|
||||||
// These flags are passed in as the last parameter to control the
|
// These flags are passed in as the last parameter to control the
|
||||||
// behavior of set_frustum_from_corners(). See the documentation
|
// behavior of set_frustum_from_corners(). See the documentation
|
||||||
// for that method for an explanation of each flag.
|
// for that method for an explanation of each flag.
|
||||||
@ -266,6 +270,7 @@ protected:
|
|||||||
UF_view_mat = 0x0400,
|
UF_view_mat = 0x0400,
|
||||||
UF_keystone = 0x0800,
|
UF_keystone = 0x0800,
|
||||||
UF_min_fov = 0x1000,
|
UF_min_fov = 0x1000,
|
||||||
|
UF_custom_film_mat = 0x2000,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum CompFlags {
|
enum CompFlags {
|
||||||
@ -320,6 +325,7 @@ protected:
|
|||||||
PN_stdfloat _interocular_distance;
|
PN_stdfloat _interocular_distance;
|
||||||
PN_stdfloat _convergence_distance;
|
PN_stdfloat _convergence_distance;
|
||||||
LVecBase2 _keystone;
|
LVecBase2 _keystone;
|
||||||
|
LMatrix4 _custom_film_mat;
|
||||||
|
|
||||||
LMatrix4 _film_mat, _film_mat_inv;
|
LMatrix4 _film_mat, _film_mat_inv;
|
||||||
LMatrix4 _lens_mat, _lens_mat_inv;
|
LMatrix4 _lens_mat, _lens_mat_inv;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user