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
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2012-11-10 14:26:39 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-11-10 14:26:39 +0400
commit250109f5ace8471451a6d8bda8f67ffc955eb4b7 (patch)
tree6228de4b3b9dd229e2b129549e69e6edf06c84be /source
parentfecc3b9d68102630fc53f451a3f405f180b31384 (diff)
add argument so recent bge function mesh.transform_uv() so you can optionally transform between UV1 / UV2
Diffstat (limited to 'source')
-rw-r--r--source/gameengine/Ketsji/KX_MeshProxy.cpp30
-rw-r--r--source/gameengine/Ketsji/KX_VertexProxy.cpp19
-rw-r--r--source/gameengine/Ketsji/KX_VertexProxy.h4
-rw-r--r--source/gameengine/Rasterizer/RAS_TexVert.cpp19
-rw-r--r--source/gameengine/Rasterizer/RAS_TexVert.h8
5 files changed, 54 insertions, 26 deletions
diff --git a/source/gameengine/Ketsji/KX_MeshProxy.cpp b/source/gameengine/Ketsji/KX_MeshProxy.cpp
index be4b0cd8031..9430179e344 100644
--- a/source/gameengine/Ketsji/KX_MeshProxy.cpp
+++ b/source/gameengine/Ketsji/KX_MeshProxy.cpp
@@ -260,7 +260,8 @@ PyObject *KX_MeshProxy::PyTransform(PyObject *args, PyObject *kwds)
for (slot->begin(it); !slot->end(it); slot->next(it)) {
size_t i;
for (i = it.startvertex; i < it.endvertex; i++) {
- it.vertex[i].Transform(transform, ntransform);
+ RAS_TexVert *vert = &it.vertex[i];
+ vert->Transform(transform, ntransform);
}
}
@@ -286,11 +287,12 @@ PyObject *KX_MeshProxy::PyTransformUV(PyObject *args, PyObject *kwds)
int matindex;
PyObject *pymat;
int uvindex = -1;
+ int uvindex_from = -1;
bool ok = false;
MT_Matrix4x4 transform;
- if (!PyArg_ParseTuple(args,"iO|ii:transform_uv", &matindex, &pymat, &uvindex) ||
+ if (!PyArg_ParseTuple(args,"iO|iii:transform_uv", &matindex, &pymat, &uvindex, &uvindex_from) ||
!PyMatTo(pymat, transform))
{
return NULL;
@@ -298,9 +300,17 @@ PyObject *KX_MeshProxy::PyTransformUV(PyObject *args, PyObject *kwds)
if (uvindex < -1 || uvindex > 1) {
PyErr_Format(PyExc_ValueError,
- "mesh.transform_uv(...): invalid uv index %d", uvindex);
+ "mesh.transform_uv(...): invalid uv_index %d", uvindex);
return NULL;
}
+ if (uvindex_from < -1 || uvindex_from > 1 || uvindex == -1) {
+ PyErr_Format(PyExc_ValueError,
+ "mesh.transform_uv(...): invalid uv_index_from %d", uvindex);
+ return NULL;
+ }
+ if (uvindex_from == uvindex) {
+ uvindex_from = -1;
+ }
/* transform mesh verts */
unsigned int mit_index = 0;
@@ -326,16 +336,22 @@ PyObject *KX_MeshProxy::PyTransformUV(PyObject *args, PyObject *kwds)
size_t i;
for (i = it.startvertex; i < it.endvertex; i++) {
+ RAS_TexVert *vert = &it.vertex[i];
+ if (uvindex_from != -1) {
+ if (uvindex_from == 0) vert->SetUV2(vert->getUV1());
+ else vert->SetUV1(vert->getUV2());
+ }
+
switch (uvindex) {
case 0:
- it.vertex[i].TransformUV(transform);
+ vert->TransformUV1(transform);
break;
case 1:
- it.vertex[i].TransformUV2(transform);
+ vert->TransformUV2(transform);
break;
case -1:
- it.vertex[i].TransformUV(transform);
- it.vertex[i].TransformUV2(transform);
+ vert->TransformUV1(transform);
+ vert->TransformUV2(transform);
break;
}
}
diff --git a/source/gameengine/Ketsji/KX_VertexProxy.cpp b/source/gameengine/Ketsji/KX_VertexProxy.cpp
index 02333f8ae2f..82e414d7c42 100644
--- a/source/gameengine/Ketsji/KX_VertexProxy.cpp
+++ b/source/gameengine/Ketsji/KX_VertexProxy.cpp
@@ -63,8 +63,8 @@ PyTypeObject KX_VertexProxy::Type = {
PyMethodDef KX_VertexProxy::Methods[] = {
{"getXYZ", (PyCFunction)KX_VertexProxy::sPyGetXYZ,METH_NOARGS},
{"setXYZ", (PyCFunction)KX_VertexProxy::sPySetXYZ,METH_O},
- {"getUV", (PyCFunction)KX_VertexProxy::sPyGetUV,METH_NOARGS},
- {"setUV", (PyCFunction)KX_VertexProxy::sPySetUV,METH_O},
+ {"getUV", (PyCFunction)KX_VertexProxy::sPyGetUV1, METH_NOARGS},
+ {"setUV", (PyCFunction)KX_VertexProxy::sPySetUV1, METH_O},
{"getUV2", (PyCFunction)KX_VertexProxy::sPyGetUV2,METH_NOARGS},
{"setUV2", (PyCFunction)KX_VertexProxy::sPySetUV2,METH_VARARGS},
@@ -247,7 +247,7 @@ int KX_VertexProxy::pyattr_set_u(void *self_v, const struct KX_PYATTRIBUTE_DEF *
float val = PyFloat_AsDouble(value);
MT_Point2 uv = self->m_vertex->getUV1();
uv[0] = val;
- self->m_vertex->SetUV(uv);
+ self->m_vertex->SetUV1(uv);
self->m_mesh->SetMeshModified(true);
return PY_SET_ATTR_SUCCESS;
}
@@ -262,7 +262,7 @@ int KX_VertexProxy::pyattr_set_v(void *self_v, const struct KX_PYATTRIBUTE_DEF *
float val = PyFloat_AsDouble(value);
MT_Point2 uv = self->m_vertex->getUV1();
uv[1] = val;
- self->m_vertex->SetUV(uv);
+ self->m_vertex->SetUV1(uv);
self->m_mesh->SetMeshModified(true);
return PY_SET_ATTR_SUCCESS;
}
@@ -389,9 +389,8 @@ int KX_VertexProxy::pyattr_set_UV(void *self_v, const struct KX_PYATTRIBUTE_DEF
if (PySequence_Check(value))
{
MT_Point2 vec;
- if (PyVecTo(value, vec))
- {
- self->m_vertex->SetUV(vec);
+ if (PyVecTo(value, vec)) {
+ self->m_vertex->SetUV1(vec);
self->m_mesh->SetMeshModified(true);
return PY_SET_ATTR_SUCCESS;
}
@@ -521,18 +520,18 @@ PyObject *KX_VertexProxy::PySetRGBA(PyObject *value)
}
-PyObject *KX_VertexProxy::PyGetUV()
+PyObject *KX_VertexProxy::PyGetUV1()
{
return PyObjectFrom(MT_Vector2(m_vertex->getUV1()));
}
-PyObject *KX_VertexProxy::PySetUV(PyObject *value)
+PyObject *KX_VertexProxy::PySetUV1(PyObject *value)
{
MT_Point2 vec;
if (!PyVecTo(value, vec))
return NULL;
- m_vertex->SetUV(vec);
+ m_vertex->SetUV1(vec);
m_mesh->SetMeshModified(true);
Py_RETURN_NONE;
}
diff --git a/source/gameengine/Ketsji/KX_VertexProxy.h b/source/gameengine/Ketsji/KX_VertexProxy.h
index 6e193d35b4c..4247d138a66 100644
--- a/source/gameengine/Ketsji/KX_VertexProxy.h
+++ b/source/gameengine/Ketsji/KX_VertexProxy.h
@@ -92,8 +92,8 @@ public:
KX_PYMETHOD_NOARGS(KX_VertexProxy,GetXYZ);
KX_PYMETHOD_O(KX_VertexProxy,SetXYZ);
- KX_PYMETHOD_NOARGS(KX_VertexProxy,GetUV);
- KX_PYMETHOD_O(KX_VertexProxy,SetUV);
+ KX_PYMETHOD_NOARGS(KX_VertexProxy,GetUV1);
+ KX_PYMETHOD_O(KX_VertexProxy,SetUV1);
KX_PYMETHOD_NOARGS(KX_VertexProxy,GetUV2);
KX_PYMETHOD_VARARGS(KX_VertexProxy,SetUV2);
diff --git a/source/gameengine/Rasterizer/RAS_TexVert.cpp b/source/gameengine/Rasterizer/RAS_TexVert.cpp
index 6d8cbfece15..945644ff3e6 100644
--- a/source/gameengine/Rasterizer/RAS_TexVert.cpp
+++ b/source/gameengine/Rasterizer/RAS_TexVert.cpp
@@ -75,21 +75,32 @@ void RAS_TexVert::SetXYZ(const MT_Point3& xyz)
xyz.getValue(m_localxyz);
}
-void RAS_TexVert::SetXYZ(const float *xyz)
+void RAS_TexVert::SetXYZ(const float xyz[3])
{
m_localxyz[0] = xyz[0]; m_localxyz[1] = xyz[1]; m_localxyz[2] = xyz[2];
}
-void RAS_TexVert::SetUV(const MT_Point2& uv)
+void RAS_TexVert::SetUV1(const MT_Point2& uv)
{
uv.getValue(m_uv1);
}
+void RAS_TexVert::SetUV1(const float uv[3])
+{
+ m_uv1[0] = uv[0];
+ m_uv1[1] = uv[1];
+}
+
void RAS_TexVert::SetUV2(const MT_Point2& uv)
{
uv.getValue(m_uv2);
}
+void RAS_TexVert::SetUV2(const float uv[3])
+{
+ m_uv2[0] = uv[0];
+ m_uv2[1] = uv[1];
+}
void RAS_TexVert::SetRGBA(const unsigned int rgba)
{
@@ -151,9 +162,9 @@ void RAS_TexVert::Transform(const MT_Matrix4x4& mat, const MT_Matrix4x4& nmat)
SetTangent((nmat*MT_Vector4(m_tangent[0], m_tangent[1], m_tangent[2], 1.0)).getValue());
}
-void RAS_TexVert::TransformUV(const MT_Matrix4x4& mat)
+void RAS_TexVert::TransformUV1(const MT_Matrix4x4& mat)
{
- SetUV((mat * MT_Vector4(m_uv1[0], m_uv1[1], 0.0, 1.0)).getValue());
+ SetUV1((mat * MT_Vector4(m_uv1[0], m_uv1[1], 0.0, 1.0)).getValue());
}
void RAS_TexVert::TransformUV2(const MT_Matrix4x4& mat)
diff --git a/source/gameengine/Rasterizer/RAS_TexVert.h b/source/gameengine/Rasterizer/RAS_TexVert.h
index bb151a64814..98ea4dd60aa 100644
--- a/source/gameengine/Rasterizer/RAS_TexVert.h
+++ b/source/gameengine/Rasterizer/RAS_TexVert.h
@@ -122,9 +122,11 @@ public:
}
void SetXYZ(const MT_Point3& xyz);
- void SetXYZ(const float *xyz);
- void SetUV(const MT_Point2& uv);
+ void SetXYZ(const float xyz[3]);
+ void SetUV1(const MT_Point2& uv);
void SetUV2(const MT_Point2& uv);
+ void SetUV1(const float uv[2]);
+ void SetUV2(const float uv[2]);
void SetRGBA(const unsigned int rgba);
void SetNormal(const MT_Vector3& normal);
@@ -137,7 +139,7 @@ public:
void Transform(const class MT_Matrix4x4& mat,
const class MT_Matrix4x4& nmat);
- void TransformUV(const MT_Matrix4x4& mat);
+ void TransformUV1(const MT_Matrix4x4& mat);
void TransformUV2(const MT_Matrix4x4& mat);
// compare two vertices, to test if they can be shared, used for