[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17761] trunk/blender/source/gameengine/ VideoTexture: ImageMirror: add clip attribute to limit clipping distance of mirror rendering

Benoit Bolsee benoit.bolsee at online.be
Tue Dec 9 15:16:10 CET 2008


Revision: 17761
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17761
Author:   ben2610
Date:     2008-12-09 15:16:10 +0100 (Tue, 09 Dec 2008)

Log Message:
-----------
ImageMirror: add clip attribute to limit clipping distance of mirror rendering

Modified Paths:
--------------
    trunk/blender/source/gameengine/VideoTexture/ImageRender.cpp
    trunk/blender/source/gameengine/VideoTexture/ImageRender.h

Modified: trunk/blender/source/gameengine/VideoTexture/ImageRender.cpp
===================================================================
--- trunk/blender/source/gameengine/VideoTexture/ImageRender.cpp	2008-12-09 11:29:40 UTC (rev 17760)
+++ trunk/blender/source/gameengine/VideoTexture/ImageRender.cpp	2008-12-09 14:16:10 UTC (rev 17761)
@@ -61,7 +61,8 @@
     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 @@
         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 @@
 	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 @@
 	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 */

Modified: trunk/blender/source/gameengine/VideoTexture/ImageRender.h
===================================================================
--- trunk/blender/source/gameengine/VideoTexture/ImageRender.h	2008-12-09 11:29:40 UTC (rev 17760)
+++ trunk/blender/source/gameengine/VideoTexture/ImageRender.h	2008-12-09 14:16:10 UTC (rev 17761)
@@ -52,6 +52,11 @@
 	/// 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 @@
     /// 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





More information about the Bf-blender-cvs mailing list