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


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to