Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenoit Bolsee <benoit.bolsee@online.be>2008-12-09 17:16:10 +0300
committerBenoit Bolsee <benoit.bolsee@online.be>2008-12-09 17:16:10 +0300
commitcd47292745ca8e0ff62c16b1e57671b35de16214 (patch)
tree9d8f6de5a1f85caa71bc02fc59b2b6405380bbce
parent12fbd936dda29cffd7c69b938474d10655952a18 (diff)
ImageMirror: add clip attribute to limit clipping distance of mirror rendering
-rw-r--r--source/gameengine/VideoTexture/ImageRender.cpp52
-rw-r--r--source/gameengine/VideoTexture/ImageRender.h6
2 files changed, 54 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 */
diff --git a/source/gameengine/VideoTexture/ImageRender.h b/source/gameengine/VideoTexture/ImageRender.h
index f92be275d75..c94e2f1e718 100644
--- a/source/gameengine/VideoTexture/ImageRender.h
+++ b/source/gameengine/VideoTexture/ImageRender.h
@@ -52,6 +52,11 @@ public:
/// set background color
void setBackground (int red, int green, int blue, int alpha);
+ /// clipping distance
+ float getClip (void) { return m_clip; }
+ /// set whole buffer use
+ void setClip (float clip) { m_clip = clip; }
+
protected:
/// true if ready to render
bool m_render;
@@ -64,6 +69,7 @@ protected:
/// for mirror operation
KX_GameObject * m_observer;
KX_GameObject * m_mirror;
+ float m_clip; // clipping distance
float m_mirrorHalfWidth; // mirror width in mirror space
float m_mirrorHalfHeight; // mirror height in mirror space
MT_Point3 m_mirrorPos; // mirror center position in local space