[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58985] trunk/blender/source/gameengine/ Ketsji: Adding a fov attribute to KX_Camera.

Daniel Stokes kupomail at gmail.com
Wed Aug 7 07:24:47 CEST 2013


Revision: 58985
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58985
Author:   kupoman
Date:     2013-08-07 05:24:47 +0000 (Wed, 07 Aug 2013)
Log Message:
-----------
Adding a fov attribute to KX_Camera. This attribute converts the field of view value and uses it to set lens.

Modified Paths:
--------------
    trunk/blender/source/gameengine/Ketsji/KX_Camera.cpp
    trunk/blender/source/gameengine/Ketsji/KX_Camera.h

Modified: trunk/blender/source/gameengine/Ketsji/KX_Camera.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_Camera.cpp	2013-08-07 04:31:05 UTC (rev 58984)
+++ trunk/blender/source/gameengine/Ketsji/KX_Camera.cpp	2013-08-07 05:24:47 UTC (rev 58985)
@@ -521,6 +521,7 @@
 	KX_PYATTRIBUTE_RW_FUNCTION("perspective", KX_Camera, pyattr_get_perspective, pyattr_set_perspective),
 	
 	KX_PYATTRIBUTE_RW_FUNCTION("lens",	KX_Camera,	pyattr_get_lens, pyattr_set_lens),
+	KX_PYATTRIBUTE_RW_FUNCTION("fov",	KX_Camera,	pyattr_get_fov,  pyattr_set_fov),
 	KX_PYATTRIBUTE_RW_FUNCTION("ortho_scale",	KX_Camera,	pyattr_get_ortho_scale, pyattr_set_ortho_scale),
 	KX_PYATTRIBUTE_RW_FUNCTION("near",	KX_Camera,	pyattr_get_near, pyattr_set_near),
 	KX_PYATTRIBUTE_RW_FUNCTION("far",	KX_Camera,	pyattr_get_far,  pyattr_set_far),
@@ -752,6 +753,35 @@
 	return PY_SET_ATTR_SUCCESS;
 }
 
+PyObject *KX_Camera::pyattr_get_fov(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+	KX_Camera* self = static_cast<KX_Camera*>(self_v);
+
+	float lens = self->m_camdata.m_lens;
+	float width = self->m_camdata.m_sensor_x;
+	float fov = 2.0 * atan(0.5 * width / lens);
+
+	return PyFloat_FromDouble(fov * MT_DEGS_PER_RAD);
+}
+
+int KX_Camera::pyattr_set_fov(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+	KX_Camera* self = static_cast<KX_Camera*>(self_v);
+	float fov = PyFloat_AsDouble(value);
+	if (fov <= 0.0) {
+		PyErr_SetString(PyExc_AttributeError, "camera.fov = float: KX_Camera, expected a float greater then zero");
+		return PY_SET_ATTR_FAIL;
+	}
+
+	fov *= MT_RADS_PER_DEG;
+	float width = self->m_camdata.m_sensor_x;
+	float lens = width / (2.0 * tan(0.5 * fov));
+	
+	self->m_camdata.m_lens= lens;
+	self->m_set_projection_matrix = false;
+	return PY_SET_ATTR_SUCCESS;
+}
+
 PyObject *KX_Camera::pyattr_get_ortho_scale(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
 {
 	KX_Camera* self = static_cast<KX_Camera*>(self_v);

Modified: trunk/blender/source/gameengine/Ketsji/KX_Camera.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_Camera.h	2013-08-07 04:31:05 UTC (rev 58984)
+++ trunk/blender/source/gameengine/Ketsji/KX_Camera.h	2013-08-07 05:24:47 UTC (rev 58985)
@@ -298,6 +298,8 @@
 
 	static PyObject*	pyattr_get_lens(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
 	static int			pyattr_set_lens(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+	static PyObject*	pyattr_get_fov(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+	static int			pyattr_set_fov(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
 	static PyObject*	pyattr_get_ortho_scale(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
 	static int			pyattr_set_ortho_scale(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
 	static PyObject*	pyattr_get_near(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);




More information about the Bf-blender-cvs mailing list