diff options
author | Benoit Bolsee <benoit.bolsee@online.be> | 2008-12-09 17:16:10 +0300 |
---|---|---|
committer | Benoit Bolsee <benoit.bolsee@online.be> | 2008-12-09 17:16:10 +0300 |
commit | cd47292745ca8e0ff62c16b1e57671b35de16214 (patch) | |
tree | 9d8f6de5a1f85caa71bc02fc59b2b6405380bbce /source/gameengine/VideoTexture/ImageRender.cpp | |
parent | 12fbd936dda29cffd7c69b938474d10655952a18 (diff) |
ImageMirror: add clip attribute to limit clipping distance of mirror rendering
Diffstat (limited to 'source/gameengine/VideoTexture/ImageRender.cpp')
-rw-r--r-- | source/gameengine/VideoTexture/ImageRender.cpp | 52 |
1 files changed, 48 insertions, 4 deletions
diff --git a/source/gameengine/VideoTexture/ImageRender.cpp b/source/gameengine/VideoTexture/ImageRender.cpp index 961d6d3b885..1bf970babf0 100644 --- a/source/gameengine/VideoTexture/ImageRender.cpp +++ b/source/gameengine/VideoTexture/ImageRender.cpp @@ -61,7 +61,8 @@ ImageRender::ImageRender (KX_Scene * scene, KX_Camera * camera) : m_camera(camera), m_owncamera(false), m_observer(NULL), - m_mirror(NULL) + m_mirror(NULL), + m_clip(100.f) { // initialize background colour setBackground(0, 0, 255, 255); @@ -178,7 +179,7 @@ void ImageRender::Render() frustrum.y1 = mirrorOffset[1]-height; frustrum.y2 = mirrorOffset[1]+height; frustrum.camnear = -mirrorOffset[2]; - frustrum.camfar = -mirrorOffset[2]+100.f; + frustrum.camfar = -mirrorOffset[2]+m_clip; } const float ortho = 100.0; const RAS_IRasterizer::StereoMode stereomode = m_rasterizer->GetStereoMode(); @@ -479,13 +480,56 @@ static int ImageMirror_init (PyObject * pySelf, PyObject * args, PyObject * kwds return 0; } +// get background color +PyObject * getClip (PyImage * self, void * closure) +{ + return PyFloat_FromDouble(getImageRender(self)->getClip()); +} + +// set clip +static int setClip (PyImage * self, PyObject * value, void * closure) +{ + // check validity of parameter + double clip; + if (value == NULL || !PyFloat_Check(value) || (clip = PyFloat_AsDouble(value)) < 0.01 || clip > 5000.0) + { + PyErr_SetString(PyExc_TypeError, "The value must be an float between 0.01 and 5000"); + return -1; + } + // set background color + getImageRender(self)->setClip(float(clip)); + // success + return 0; +} + +// attributes structure +static PyGetSetDef imageMirrorGetSets[] = +{ + {(char*)"clip", (getter)getClip, (setter)setClip, (char*)"clipping distance", NULL}, + // attribute from ImageRender + {(char*)"background", (getter)getBackground, (setter)setBackground, (char*)"background color", NULL}, + // attribute from ImageViewport + {(char*)"capsize", (getter)ImageViewport_getCaptureSize, (setter)ImageViewport_setCaptureSize, (char*)"size of render area", NULL}, + {(char*)"alpha", (getter)ImageViewport_getAlpha, (setter)ImageViewport_setAlpha, (char*)"use alpha in texture", NULL}, + {(char*)"whole", (getter)ImageViewport_getWhole, (setter)ImageViewport_setWhole, (char*)"use whole viewport to render", NULL}, + // attributes from ImageBase class + {(char*)"image", (getter)Image_getImage, NULL, (char*)"image data", NULL}, + {(char*)"size", (getter)Image_getSize, NULL, (char*)"image size", NULL}, + {(char*)"scale", (getter)Image_getScale, (setter)Image_setScale, (char*)"fast scale of image (near neighbour)", NULL}, + {(char*)"flip", (getter)Image_getFlip, (setter)Image_setFlip, (char*)"flip image vertically", NULL}, + {(char*)"filter", (getter)Image_getFilter, (setter)Image_setFilter, (char*)"pixel filter", NULL}, + {NULL} +}; + + // constructor ImageRender::ImageRender (KX_Scene * scene, KX_GameObject * observer, KX_GameObject * mirror, RAS_IPolyMaterial * mat) : ImageViewport(), m_render(false), m_scene(scene), m_observer(observer), - m_mirror(mirror) + m_mirror(mirror), + m_clip(100.f) { // this constructor is used for automatic planar mirror // create a camera, take all data by default, in any case we will recompute the frustrum on each frame @@ -670,7 +714,7 @@ PyTypeObject ImageMirrorType = 0, /* tp_iternext */ imageRenderMethods, /* tp_methods */ 0, /* tp_members */ - imageRenderGetSets, /* tp_getset */ + imageMirrorGetSets, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ |