diff -r 33f95441790e -r b4e09433934a src/raytracermodule.cc --- a/src/raytracermodule.cc Sat Dec 08 16:02:37 2007 +0100 +++ b/src/raytracermodule.cc Sun Dec 09 10:45:26 2007 +0100 @@ -104,6 +104,9 @@ static PyObject *Material_Constructor(PyObject* self, PyObject* args, PyObject *kwd); static void Material_Destructor(PyObject* self); static PyObject *Material_Getattr(PyObject *self, char *name); +static PyObject *Material_setPhong(PyObject* self, PyObject* args); +static PyObject *Material_setReflectivity(PyObject* self, PyObject* args); +static PyObject *Material_setTransmissivity(PyObject* self, PyObject* args); static PyTypeObject MaterialType = { PyObject_HEAD_INIT(NULL) @@ -125,6 +128,9 @@ }; static PyMethodDef MaterialMethods[] = { + {"setPhong", (PyCFunction)Material_setPhong, METH_VARARGS, "Set ambient, diffuse, specular and shininess Phong model constants."}, + {"setReflectivity", (PyCFunction)Material_setReflectivity, METH_VARARGS, "Set reflectivity."}, + {"setTransmissivity", (PyCFunction)Material_setTransmissivity, METH_VARARGS, "Set transmissivity and refraction index."}, {NULL, NULL} }; @@ -159,6 +165,45 @@ return Py_FindMethod(MaterialMethods, self, name); } +static PyObject *Material_setPhong(PyObject* self, PyObject* args) +{ + Float amb, dif, spec, shin = 0.5; + + if (!PyArg_ParseTuple(args, "fff|f", &amb, &dif, &spec, &shin)) + return NULL; + + ((MaterialObject *)self)->material->setPhong(amb, dif, spec, shin); + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject *Material_setReflectivity(PyObject* self, PyObject* args) +{ + Float refl; + + if (!PyArg_ParseTuple(args, "f", &refl)) + return NULL; + + ((MaterialObject *)self)->material->setReflectivity(refl); + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject *Material_setTransmissivity(PyObject* self, PyObject* args) +{ + Float trans, rindex = 1.3; + + if (!PyArg_ParseTuple(args, "f|f", &trans, &rindex)) + return NULL; + + ((MaterialObject *)self)->material->setTransmissivity(trans, rindex); + + Py_INCREF(Py_None); + return Py_None; +} + //=========================== NormalVertex Object =========================== typedef struct { @@ -555,7 +600,7 @@ if (!PyArg_ParseTuple(args, "(ii)", &w, &h)) return NULL; - printf("[pyrit] Raytracing...\n"); + printf("[pyrit] Running ray tracer\n"); ((RaytracerObject *)self)->raytracer->getTop()->optimize(); data = (Float *) malloc(w*h*3*sizeof(Float)); ((RaytracerObject *)self)->raytracer->render(w, h, data); @@ -565,7 +610,7 @@ } // convert data to char - printf("[pyrit] Converting image data (float to char)...\n"); + printf("[pyrit] Converting image data (float to char)\n"); chardata = (char *) malloc(w*h*3); Float *d = data; for (char *c = chardata; c != chardata + w*h*3; c++, d++) {