mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-02 01:44:06 -04:00
properly support a different coordinate system per camera (or lens)
This commit is contained in:
parent
19ddfa1ba2
commit
9a93914d58
@ -208,7 +208,7 @@ cull_callback(CullTraverser *trav, CullTraverserData &data) {
|
|||||||
new CullableObject(geom, point_state,
|
new CullableObject(geom, point_state,
|
||||||
xform_data.get_net_transform(trav),
|
xform_data.get_net_transform(trav),
|
||||||
xform_data.get_modelview_transform(trav),
|
xform_data.get_modelview_transform(trav),
|
||||||
trav->get_gsg());
|
trav->get_scene());
|
||||||
|
|
||||||
trav->get_cull_handler()->record_object(object, trav);
|
trav->get_cull_handler()->record_object(object, trav);
|
||||||
}
|
}
|
||||||
@ -239,7 +239,7 @@ cull_callback(CullTraverser *trav, CullTraverserData &data) {
|
|||||||
new CullableObject(geom, empty_state,
|
new CullableObject(geom, empty_state,
|
||||||
xform_data.get_net_transform(trav),
|
xform_data.get_net_transform(trav),
|
||||||
xform_data.get_modelview_transform(trav),
|
xform_data.get_modelview_transform(trav),
|
||||||
trav->get_gsg());
|
trav->get_scene());
|
||||||
|
|
||||||
trav->get_cull_handler()->record_object(object, trav);
|
trav->get_cull_handler()->record_object(object, trav);
|
||||||
}
|
}
|
||||||
|
@ -1884,6 +1884,9 @@ setup_scene(GraphicsStateGuardian *gsg, DisplayRegionPipelineReader *dr) {
|
|||||||
scene_setup->set_camera_transform(camera_transform);
|
scene_setup->set_camera_transform(camera_transform);
|
||||||
scene_setup->set_world_transform(world_transform);
|
scene_setup->set_world_transform(world_transform);
|
||||||
|
|
||||||
|
CPT(TransformState) cs_transform = gsg->get_cs_transform_for(lens->get_coordinate_system());
|
||||||
|
scene_setup->set_cs_transform(cs_transform);
|
||||||
|
|
||||||
return scene_setup;
|
return scene_setup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -341,10 +341,15 @@ get_supports_cg_profile(const string &name) const {
|
|||||||
// used by the scene graph, external to to GSG.
|
// used by the scene graph, external to to GSG.
|
||||||
//
|
//
|
||||||
// Normally, this will be the default coordinate system,
|
// Normally, this will be the default coordinate system,
|
||||||
// but it might be set differently at runtime.
|
// but it might be set differently at runtime. It will
|
||||||
|
// automatically be copied from the current lens's
|
||||||
|
// coordinate system as each DisplayRegion is rendered.
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
void GraphicsStateGuardian::
|
void GraphicsStateGuardian::
|
||||||
set_coordinate_system(CoordinateSystem cs) {
|
set_coordinate_system(CoordinateSystem cs) {
|
||||||
|
if (cs == CS_default) {
|
||||||
|
cs = get_default_coordinate_system();
|
||||||
|
}
|
||||||
_coordinate_system = cs;
|
_coordinate_system = cs;
|
||||||
|
|
||||||
// Changing the external coordinate system changes the cs_transform.
|
// Changing the external coordinate system changes the cs_transform.
|
||||||
@ -556,6 +561,8 @@ set_scene(SceneSetup *scene_setup) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
set_coordinate_system(_current_lens->get_coordinate_system());
|
||||||
|
|
||||||
_projection_mat = calc_projection_mat(_current_lens);
|
_projection_mat = calc_projection_mat(_current_lens);
|
||||||
if (_projection_mat == 0) {
|
if (_projection_mat == 0) {
|
||||||
return false;
|
return false;
|
||||||
@ -1856,6 +1863,27 @@ get_render_buffer(int buffer_type, const FrameBufferProperties &prop) {
|
|||||||
return RenderBuffer(this, buffer_type & prop.get_buffer_mask() & _stereo_buffer_mask);
|
return RenderBuffer(this, buffer_type & prop.get_buffer_mask() & _stereo_buffer_mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: GraphicsStateGuardian::get_cs_transform_for
|
||||||
|
// Access: Public, Virtual
|
||||||
|
// Description: Returns what the cs_transform would be set to after a
|
||||||
|
// call to set_coordinate_system(cs). This is another
|
||||||
|
// way of saying the cs_transform when rendering the
|
||||||
|
// scene for a camera with the indicated coordinate
|
||||||
|
// system.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
const TransformState *GraphicsStateGuardian::
|
||||||
|
get_cs_transform_for(CoordinateSystem cs) const {
|
||||||
|
if (_internal_coordinate_system == CS_default ||
|
||||||
|
_internal_coordinate_system == cs) {
|
||||||
|
return TransformState::make_identity();
|
||||||
|
|
||||||
|
} else {
|
||||||
|
return TransformState::make_mat
|
||||||
|
(LMatrix4::convert_mat(cs, _internal_coordinate_system));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: GraphicsStateGuardian::get_cs_transform
|
// Function: GraphicsStateGuardian::get_cs_transform
|
||||||
// Access: Public, Virtual
|
// Access: Public, Virtual
|
||||||
|
@ -296,6 +296,7 @@ public:
|
|||||||
INLINE int get_current_tex_view_offset() const;
|
INLINE int get_current_tex_view_offset() const;
|
||||||
INLINE const Lens *get_current_lens() const;
|
INLINE const Lens *get_current_lens() const;
|
||||||
|
|
||||||
|
virtual const TransformState *get_cs_transform_for(CoordinateSystem cs) const;
|
||||||
virtual const TransformState *get_cs_transform() const;
|
virtual const TransformState *get_cs_transform() const;
|
||||||
INLINE const TransformState *get_inv_cs_transform() const;
|
INLINE const TransformState *get_inv_cs_transform() const;
|
||||||
|
|
||||||
|
@ -650,7 +650,7 @@ perform_occlusion_test(const Geom *geom, const TransformState *net_transform,
|
|||||||
|
|
||||||
CullableObject *viz =
|
CullableObject *viz =
|
||||||
new CullableObject(geom, _solid_test_state,
|
new CullableObject(geom, _solid_test_state,
|
||||||
net_transform, modelview_transform, gsg);
|
net_transform, modelview_transform, get_scene());
|
||||||
|
|
||||||
static ConfigVariableBool test_occlude("test-occlude", false);
|
static ConfigVariableBool test_occlude("test-occlude", false);
|
||||||
if (test_occlude) {
|
if (test_occlude) {
|
||||||
@ -702,13 +702,13 @@ show_results(int num_fragments, const Geom *geom,
|
|||||||
|
|
||||||
CullableObject *internal_viz =
|
CullableObject *internal_viz =
|
||||||
new CullableObject(geom, state,
|
new CullableObject(geom, state,
|
||||||
net_transform, modelview_transform, gsg);
|
net_transform, modelview_transform, get_scene());
|
||||||
_internal_cull_handler->record_object(internal_viz, _internal_trav);
|
_internal_cull_handler->record_object(internal_viz, _internal_trav);
|
||||||
|
|
||||||
// Also render the viz in the main scene.
|
// Also render the viz in the main scene.
|
||||||
modelview_transform = get_world_transform()->compose(net_transform);
|
modelview_transform = get_world_transform()->compose(net_transform);
|
||||||
CullableObject *main_viz =
|
CullableObject *main_viz =
|
||||||
new CullableObject(geom, state,
|
new CullableObject(geom, state,
|
||||||
net_transform, modelview_transform, gsg);
|
net_transform, modelview_transform, get_scene());
|
||||||
_true_cull_handler->record_object(main_viz, this);
|
_true_cull_handler->record_object(main_viz, this);
|
||||||
}
|
}
|
||||||
|
@ -211,6 +211,7 @@ public:
|
|||||||
(Texture *tex, int z, const DisplayRegion *dr, const RenderBuffer &rb)=0;
|
(Texture *tex, int z, const DisplayRegion *dr, const RenderBuffer &rb)=0;
|
||||||
|
|
||||||
virtual CoordinateSystem get_internal_coordinate_system() const=0;
|
virtual CoordinateSystem get_internal_coordinate_system() const=0;
|
||||||
|
virtual const TransformState *get_cs_transform_for(CoordinateSystem cs) const=0;
|
||||||
virtual const TransformState *get_cs_transform() const=0;
|
virtual const TransformState *get_cs_transform() const=0;
|
||||||
|
|
||||||
virtual void bind_light(PointLight *light_obj, const NodePath &light,
|
virtual void bind_light(PointLight *light_obj, const NodePath &light,
|
||||||
|
@ -384,7 +384,7 @@ render_thread(CullTraverser *trav, CullTraverserData &data,
|
|||||||
new CullableObject(geom, state,
|
new CullableObject(geom, state,
|
||||||
data.get_net_transform(trav),
|
data.get_net_transform(trav),
|
||||||
data.get_modelview_transform(trav),
|
data.get_modelview_transform(trav),
|
||||||
trav->get_gsg());
|
trav->get_scene());
|
||||||
trav->get_cull_handler()->record_object(object, trav);
|
trav->get_cull_handler()->record_object(object, trav);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -436,7 +436,7 @@ render_tape(CullTraverser *trav, CullTraverserData &data,
|
|||||||
new CullableObject(geom, state,
|
new CullableObject(geom, state,
|
||||||
data.get_net_transform(trav),
|
data.get_net_transform(trav),
|
||||||
data.get_modelview_transform(trav),
|
data.get_modelview_transform(trav),
|
||||||
trav->get_gsg());
|
trav->get_scene());
|
||||||
trav->get_cull_handler()->record_object(object, trav);
|
trav->get_cull_handler()->record_object(object, trav);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -495,7 +495,7 @@ render_billboard(CullTraverser *trav, CullTraverserData &data,
|
|||||||
new CullableObject(geom, state,
|
new CullableObject(geom, state,
|
||||||
data.get_net_transform(trav),
|
data.get_net_transform(trav),
|
||||||
data.get_modelview_transform(trav),
|
data.get_modelview_transform(trav),
|
||||||
trav->get_gsg());
|
trav->get_scene());
|
||||||
trav->get_cull_handler()->record_object(object, trav);
|
trav->get_cull_handler()->record_object(object, trav);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -561,7 +561,7 @@ render_tube(CullTraverser *trav, CullTraverserData &data,
|
|||||||
new CullableObject(geom, state,
|
new CullableObject(geom, state,
|
||||||
data.get_net_transform(trav),
|
data.get_net_transform(trav),
|
||||||
data.get_modelview_transform(trav),
|
data.get_modelview_transform(trav),
|
||||||
trav->get_gsg());
|
trav->get_scene());
|
||||||
trav->get_cull_handler()->record_object(object, trav);
|
trav->get_cull_handler()->record_object(object, trav);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -377,7 +377,7 @@ render_sheet(CullTraverser *trav, CullTraverserData &data,
|
|||||||
new CullableObject(geom, state,
|
new CullableObject(geom, state,
|
||||||
data.get_net_transform(trav),
|
data.get_net_transform(trav),
|
||||||
data.get_modelview_transform(trav),
|
data.get_modelview_transform(trav),
|
||||||
trav->get_gsg());
|
trav->get_scene());
|
||||||
trav->get_cull_handler()->record_object(object, trav);
|
trav->get_cull_handler()->record_object(object, trav);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -320,12 +320,12 @@ draw_bounding_volume(const BoundingVolume *vol,
|
|||||||
_geoms_pcollector.add_level(2);
|
_geoms_pcollector.add_level(2);
|
||||||
CullableObject *outer_viz =
|
CullableObject *outer_viz =
|
||||||
new CullableObject(bounds_viz, get_bounds_outer_viz_state(),
|
new CullableObject(bounds_viz, get_bounds_outer_viz_state(),
|
||||||
net_transform, modelview_transform, get_gsg());
|
net_transform, modelview_transform, get_scene());
|
||||||
_cull_handler->record_object(outer_viz, this);
|
_cull_handler->record_object(outer_viz, this);
|
||||||
|
|
||||||
CullableObject *inner_viz =
|
CullableObject *inner_viz =
|
||||||
new CullableObject(bounds_viz, get_bounds_inner_viz_state(),
|
new CullableObject(bounds_viz, get_bounds_inner_viz_state(),
|
||||||
net_transform, modelview_transform, get_gsg());
|
net_transform, modelview_transform, get_scene());
|
||||||
_cull_handler->record_object(inner_viz, this);
|
_cull_handler->record_object(inner_viz, this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -363,7 +363,7 @@ show_bounds(CullTraverserData &data, bool tight) {
|
|||||||
CullableObject *outer_viz =
|
CullableObject *outer_viz =
|
||||||
new CullableObject(bounds_viz, get_bounds_outer_viz_state(),
|
new CullableObject(bounds_viz, get_bounds_outer_viz_state(),
|
||||||
net_transform, modelview_transform,
|
net_transform, modelview_transform,
|
||||||
get_gsg());
|
get_scene());
|
||||||
_cull_handler->record_object(outer_viz, this);
|
_cull_handler->record_object(outer_viz, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -706,7 +706,7 @@ start_decal(const CullTraverserData &data) {
|
|||||||
_geoms_pcollector.add_level(num_geoms);
|
_geoms_pcollector.add_level(num_geoms);
|
||||||
CPT(TransformState) net_transform = data.get_net_transform(this);
|
CPT(TransformState) net_transform = data.get_net_transform(this);
|
||||||
CPT(TransformState) modelview_transform = data.get_modelview_transform(this);
|
CPT(TransformState) modelview_transform = data.get_modelview_transform(this);
|
||||||
CPT(TransformState) internal_transform = get_gsg()->get_cs_transform()->compose(modelview_transform);
|
CPT(TransformState) internal_transform = _scene_setup->get_cs_transform()->compose(modelview_transform);
|
||||||
|
|
||||||
for (int i = num_geoms - 1; i >= 0; i--) {
|
for (int i = num_geoms - 1; i >= 0; i--) {
|
||||||
const Geom *geom = geoms.get_geom(i);
|
const Geom *geom = geoms.get_geom(i);
|
||||||
@ -819,7 +819,7 @@ r_get_decals(CullTraverserData &data, CullableObject *decals) {
|
|||||||
_geoms_pcollector.add_level(num_geoms);
|
_geoms_pcollector.add_level(num_geoms);
|
||||||
CPT(TransformState) net_transform = data.get_net_transform(this);
|
CPT(TransformState) net_transform = data.get_net_transform(this);
|
||||||
CPT(TransformState) modelview_transform = data.get_modelview_transform(this);
|
CPT(TransformState) modelview_transform = data.get_modelview_transform(this);
|
||||||
CPT(TransformState) internal_transform = get_gsg()->get_cs_transform()->compose(modelview_transform);
|
CPT(TransformState) internal_transform = _scene_setup->get_cs_transform()->compose(modelview_transform);
|
||||||
|
|
||||||
for (int i = num_geoms - 1; i >= 0; i--) {
|
for (int i = num_geoms - 1; i >= 0; i--) {
|
||||||
const Geom *geom = geoms.get_geom(i);
|
const Geom *geom = geoms.get_geom(i);
|
||||||
|
@ -37,12 +37,12 @@ INLINE CullableObject::
|
|||||||
CullableObject(const Geom *geom, const RenderState *state,
|
CullableObject(const Geom *geom, const RenderState *state,
|
||||||
const TransformState *net_transform,
|
const TransformState *net_transform,
|
||||||
const TransformState *modelview_transform,
|
const TransformState *modelview_transform,
|
||||||
const GraphicsStateGuardianBase *gsg) :
|
SceneSetup *scene_setup) :
|
||||||
_geom(geom),
|
_geom(geom),
|
||||||
_state(state),
|
_state(state),
|
||||||
_net_transform(net_transform),
|
_net_transform(net_transform),
|
||||||
_modelview_transform(modelview_transform),
|
_modelview_transform(modelview_transform),
|
||||||
_internal_transform(gsg->get_cs_transform()->compose(modelview_transform)),
|
_internal_transform(scene_setup->get_cs_transform()->compose(modelview_transform)),
|
||||||
_fancy(false)
|
_fancy(false)
|
||||||
{
|
{
|
||||||
#ifdef DO_MEMORY_USAGE
|
#ifdef DO_MEMORY_USAGE
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
#include "pStatCollector.h"
|
#include "pStatCollector.h"
|
||||||
#include "deletedChain.h"
|
#include "deletedChain.h"
|
||||||
#include "graphicsStateGuardianBase.h"
|
#include "graphicsStateGuardianBase.h"
|
||||||
|
#include "sceneSetup.h"
|
||||||
#include "lightMutex.h"
|
#include "lightMutex.h"
|
||||||
#include "callbackObject.h"
|
#include "callbackObject.h"
|
||||||
|
|
||||||
@ -51,7 +52,7 @@ public:
|
|||||||
INLINE CullableObject(const Geom *geom, const RenderState *state,
|
INLINE CullableObject(const Geom *geom, const RenderState *state,
|
||||||
const TransformState *net_transform,
|
const TransformState *net_transform,
|
||||||
const TransformState *modelview_transform,
|
const TransformState *modelview_transform,
|
||||||
const GraphicsStateGuardianBase *gsg);
|
SceneSetup *scene_setup);
|
||||||
INLINE CullableObject(const Geom *geom, const RenderState *state,
|
INLINE CullableObject(const Geom *geom, const RenderState *state,
|
||||||
const TransformState *net_transform,
|
const TransformState *net_transform,
|
||||||
const TransformState *modelview_transform,
|
const TransformState *modelview_transform,
|
||||||
|
@ -543,7 +543,7 @@ add_for_draw(CullTraverser *trav, CullTraverserData &data) {
|
|||||||
trav->_geoms_pcollector.add_level(num_geoms);
|
trav->_geoms_pcollector.add_level(num_geoms);
|
||||||
CPT(TransformState) net_transform = data.get_net_transform(trav);
|
CPT(TransformState) net_transform = data.get_net_transform(trav);
|
||||||
CPT(TransformState) modelview_transform = data.get_modelview_transform(trav);
|
CPT(TransformState) modelview_transform = data.get_modelview_transform(trav);
|
||||||
CPT(TransformState) internal_transform = trav->get_gsg()->get_cs_transform()->compose(modelview_transform);
|
CPT(TransformState) internal_transform = trav->get_scene()->get_cs_transform()->compose(modelview_transform);
|
||||||
|
|
||||||
for (int i = 0; i < num_geoms; i++) {
|
for (int i = 0; i < num_geoms; i++) {
|
||||||
const Geom *geom = geoms.get_geom(i);
|
const Geom *geom = geoms.get_geom(i);
|
||||||
|
@ -168,7 +168,7 @@ cull_callback(CullTraverser *trav, CullTraverserData &data) {
|
|||||||
new CullableObject(get_occluder_viz(trav, data), get_occluder_viz_state(trav, data),
|
new CullableObject(get_occluder_viz(trav, data), get_occluder_viz_state(trav, data),
|
||||||
data.get_net_transform(trav),
|
data.get_net_transform(trav),
|
||||||
data.get_modelview_transform(trav),
|
data.get_modelview_transform(trav),
|
||||||
trav->get_gsg());
|
trav->get_scene());
|
||||||
trav->get_cull_handler()->record_object(occluder_viz, trav);
|
trav->get_cull_handler()->record_object(occluder_viz, trav);
|
||||||
|
|
||||||
// Also get the frame.
|
// Also get the frame.
|
||||||
@ -177,7 +177,7 @@ cull_callback(CullTraverser *trav, CullTraverserData &data) {
|
|||||||
new CullableObject(_frame_viz, get_frame_viz_state(trav, data),
|
new CullableObject(_frame_viz, get_frame_viz_state(trav, data),
|
||||||
data.get_net_transform(trav),
|
data.get_net_transform(trav),
|
||||||
data.get_modelview_transform(trav),
|
data.get_modelview_transform(trav),
|
||||||
trav->get_gsg());
|
trav->get_scene());
|
||||||
trav->get_cull_handler()->record_object(frame_viz, trav);
|
trav->get_cull_handler()->record_object(frame_viz, trav);
|
||||||
|
|
||||||
// Now carry on to render our child nodes.
|
// Now carry on to render our child nodes.
|
||||||
|
@ -170,7 +170,7 @@ cull_callback(CullTraverser *trav, CullTraverserData &data) {
|
|||||||
new CullableObject(get_viz(trav, data), data._state,
|
new CullableObject(get_viz(trav, data), data._state,
|
||||||
data.get_net_transform(trav),
|
data.get_net_transform(trav),
|
||||||
data.get_modelview_transform(trav),
|
data.get_modelview_transform(trav),
|
||||||
trav->get_gsg());
|
trav->get_scene());
|
||||||
trav->get_cull_handler()->record_object(plane_viz, trav);
|
trav->get_cull_handler()->record_object(plane_viz, trav);
|
||||||
|
|
||||||
// Now carry on to render our child nodes.
|
// Now carry on to render our child nodes.
|
||||||
|
@ -27,6 +27,7 @@ SceneSetup() {
|
|||||||
_initial_state = RenderState::make_empty();
|
_initial_state = RenderState::make_empty();
|
||||||
_camera_transform = TransformState::make_identity();
|
_camera_transform = TransformState::make_identity();
|
||||||
_world_transform = TransformState::make_identity();
|
_world_transform = TransformState::make_identity();
|
||||||
|
_cs_transform = TransformState::make_identity();
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
@ -293,3 +294,25 @@ INLINE const TransformState *SceneSetup::
|
|||||||
get_world_transform() const {
|
get_world_transform() const {
|
||||||
return _world_transform;
|
return _world_transform;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: SceneSetup::set_cs_transform
|
||||||
|
// Access: Published
|
||||||
|
// Description: Specifies the transform from the camera's coordinate
|
||||||
|
// system to the GSG's internal coordinate system.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
INLINE void SceneSetup::
|
||||||
|
set_cs_transform(const TransformState *cs_transform) {
|
||||||
|
_cs_transform = cs_transform;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: SceneSetup::get_cs_transform
|
||||||
|
// Access: Published
|
||||||
|
// Description: Returns the transform from the camera's coordinate
|
||||||
|
// system to the GSG's internal coordinate system.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
INLINE const TransformState *SceneSetup::
|
||||||
|
get_cs_transform() const {
|
||||||
|
return _cs_transform;
|
||||||
|
}
|
||||||
|
@ -71,6 +71,9 @@ PUBLISHED:
|
|||||||
INLINE void set_world_transform(const TransformState *world_transform);
|
INLINE void set_world_transform(const TransformState *world_transform);
|
||||||
INLINE const TransformState *get_world_transform() const;
|
INLINE const TransformState *get_world_transform() const;
|
||||||
|
|
||||||
|
INLINE void set_cs_transform(const TransformState *cs_transform);
|
||||||
|
INLINE const TransformState *get_cs_transform() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DisplayRegion *_display_region;
|
DisplayRegion *_display_region;
|
||||||
int _viewport_width;
|
int _viewport_width;
|
||||||
@ -83,6 +86,7 @@ private:
|
|||||||
CPT(RenderState) _initial_state;
|
CPT(RenderState) _initial_state;
|
||||||
CPT(TransformState) _camera_transform;
|
CPT(TransformState) _camera_transform;
|
||||||
CPT(TransformState) _world_transform;
|
CPT(TransformState) _world_transform;
|
||||||
|
CPT(TransformState) _cs_transform;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static TypeHandle get_class_type() {
|
static TypeHandle get_class_type() {
|
||||||
|
@ -162,7 +162,7 @@ add_for_draw(CullTraverser *trav, CullTraverserData &data) {
|
|||||||
new CullableObject(NULL, data._state,
|
new CullableObject(NULL, data._state,
|
||||||
data.get_net_transform(trav),
|
data.get_net_transform(trav),
|
||||||
data.get_modelview_transform(trav),
|
data.get_modelview_transform(trav),
|
||||||
trav->get_gsg());
|
trav->get_scene());
|
||||||
object->set_draw_callback(cbobj);
|
object->set_draw_callback(cbobj);
|
||||||
trav->get_cull_handler()->record_object(object, trav);
|
trav->get_cull_handler()->record_object(object, trav);
|
||||||
}
|
}
|
||||||
|
@ -59,7 +59,7 @@ upcall() {
|
|||||||
new CullableObject(NULL, _data._state,
|
new CullableObject(NULL, _data._state,
|
||||||
_data.get_net_transform(_trav),
|
_data.get_net_transform(_trav),
|
||||||
_data.get_modelview_transform(_trav),
|
_data.get_modelview_transform(_trav),
|
||||||
_trav->get_gsg());
|
_trav->get_scene());
|
||||||
object->set_draw_callback(cbobj);
|
object->set_draw_callback(cbobj);
|
||||||
_trav->get_cull_handler()->record_object(object, _trav);
|
_trav->get_cull_handler()->record_object(object, _trav);
|
||||||
}
|
}
|
||||||
|
@ -130,7 +130,7 @@ render_geom(const Geom* geom, const RenderState* state, const Rocket::Core::Vect
|
|||||||
CullableObject *object =
|
CullableObject *object =
|
||||||
new CullableObject(geom, _net_state->compose(state),
|
new CullableObject(geom, _net_state->compose(state),
|
||||||
net_transform, modelview_transform,
|
net_transform, modelview_transform,
|
||||||
_trav->get_gsg());
|
_trav->get_scene());
|
||||||
_trav->get_cull_handler()->record_object(object, _trav);
|
_trav->get_cull_handler()->record_object(object, _trav);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -984,7 +984,7 @@ cull_callback(CullTraverser *trav, CullTraverserData &data) {
|
|||||||
// Compute the modelview and camera transforms, to pass to the
|
// Compute the modelview and camera transforms, to pass to the
|
||||||
// SpeedTree CView structure.
|
// SpeedTree CView structure.
|
||||||
CPT(TransformState) orig_modelview = data.get_modelview_transform(trav);
|
CPT(TransformState) orig_modelview = data.get_modelview_transform(trav);
|
||||||
CPT(TransformState) modelview = gsg->get_cs_transform()->compose(orig_modelview);
|
CPT(TransformState) modelview = trav->get_scene()->get_cs_transform()->compose(orig_modelview);
|
||||||
CPT(TransformState) camera_transform = modelview->invert_compose(TransformState::make_identity());
|
CPT(TransformState) camera_transform = modelview->invert_compose(TransformState::make_identity());
|
||||||
LMatrix4f modelview_mat = LCAST(float, modelview->get_mat());
|
LMatrix4f modelview_mat = LCAST(float, modelview->get_mat());
|
||||||
const LPoint3 &camera_pos = camera_transform->get_pos();
|
const LPoint3 &camera_pos = camera_transform->get_pos();
|
||||||
@ -1122,7 +1122,7 @@ add_for_draw(CullTraverser *trav, CullTraverserData &data) {
|
|||||||
new CullableObject(NULL, data._state,
|
new CullableObject(NULL, data._state,
|
||||||
TransformState::make_identity(),
|
TransformState::make_identity(),
|
||||||
TransformState::make_identity(),
|
TransformState::make_identity(),
|
||||||
trav->get_gsg());
|
trav->get_scene());
|
||||||
object->set_draw_callback(new DrawCallback(this));
|
object->set_draw_callback(new DrawCallback(this));
|
||||||
trav->get_cull_handler()->record_object(object, trav);
|
trav->get_cull_handler()->record_object(object, trav);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user