|
Pythonlópes El Python que yo sé Parte I: los comienzos son siempre duros
La naturaleza es más sabia que el hombre: |
|
Python es un lenguaje de programación de alto nivel, que quiere decir que tenemos que esforzarnos menos por aprenderlo y expresarnos con él (programar), aunque suele ocurrir que se vuelve más lento en la ejecución de los programas. De todas formas la lentitud de Python no se debe a que sea de alto nivel...
Sino a que, en lugar de compilar nuestros programas escritos en este lenguaje para obtener ficheros binarios y librerías, los ejecutamos sobre la marcha. Esto se llama lenguaje interpretado, y salvo la famosa lentitud en la ejecución, sólo nos ofrece ventajas: * Los códigos son siempre legibles, con lo que podemos aprender mucho de los demás * No hay que hacer pasos intermedios entre que tocamos el código y lo ejecutamos * Es más fácil encontrar errores y probar el programa, ya que el programa corre hasta que encuentra uno, en lugar de ser un compilador el que se detiene, sin haber ejecutado ninguna instrucción * Esto puede ser también una desventaja, porque tales errores podrían ser críticos y un compilador los filtraría, pero el hecho de que sea de alto nivel hace que no sea fácil provocar estos errores * Es sumamente utilizado para programar sobre otros programas, o sea, hacer scripts (guiones, aunque los llamaremos scripts) y manipular explícitamente los datos del proyecto activo, o sea, lo que vamos a hacer sobre Blender. Dónde encontrar información: primero en www.python.org, y de allí es fácil acceder a casi cualquier recurso y documentación en varios idiomas. Especialmente recomendable es el manual de introducción de Guido Van Rossum, creador de Python, o el libro Dive into Python, ambos traducidos al español. En cuanto a la documentación sobre el API de Blender, o la lista de módulos y objetos que sirven para comunicarse con el proyecto, se puede encontrar en http://www.blender.org/modules/documentation/228PythonDoc/index.html Para preguntar dudas, presentar trabajos o charlar sobre Blender-Python hay un for hispano en el portal http://www.nicodigital.com ¿Hay que instalar alguna cosa? Para usar Python con Blender es recomendable bajarse el intérprete completo de www.python.org, versión 2.20 a 2.22, pero no es necesario para empezar a aprender, ya que Blender lleva incluido su propio intérprete (API) con todos los comandos de la librería principal. Sin embargo, se puede hacer uso de librerías externas que hacen necesario instalar Python en el sistema (o, al menos, las librerías típicas: string, math... en un directorio) Una vez instalado, hay que indicar en una variable de sistema llamada PYTHONPATH dónde están esas librerías. Python está disponible para todos los sistemas operativos en los que podemos instalar Blender |
|
Blender tiene un editor de texto con el que podemos abrir cualquier fichero y escribir, pero está pensado para programar scripts. Si no sabes dónde está, probablemente no conozcas Blender lo suficiente como para programar scripts, así que busca una guía de Blender, y vuelve más tarde a leer desde aquí.
Con el botón derecho accedemos al menú de archivos. Con AltF hacemos un búsqueda de texto, y sigue buscando Con CtrlAltF buscamos otra cosa Copiar con AltC y CtrlC Pegar con CtrlV y AltV Copiar a windows con CtrlMaysC Pegar de windows con CtrlMaysV Deshacer con AltZ y CtrlZ Rehacer con AltR Reabrir fichero con CtrlR Abajo hay un icono para mostrar números de línea, lo que viene realmente bien. Y creo que ya está todo. Ah, sí, a día de hoy el teclado en español no funciona. Conviene con figurarse el teclado en inglés, o bien poner un texto en la cabecera de todos tus scripts con los signos que no puedes escribir directamente, para copiar y pegar. |
|
Llamaremos "proyecto" a lo que estamos haciendo bajo Blender. O sea, el conjunto de Objetos y Relaciones que manejamos sin saberlo. Ahora sí lo sabremos.
No voy a contar cómo se organizan los Objetos en Blender (que a partir de ahora llamaremos BlObjetos) ni los de Python (que llamaremos PyObjetos), ni cómo se relacionan. Esto se irá viendo conforme hagamos cosas con el API. Diré sin embargo, que un BlObjeto pasa a ser PyObjeto cuando lo capturamos, usualmente con el método Get(), y tenemos acceso a sus atributos como un PyObjeto según su clase, es decir, el objeto llamado "obj" puede tener unas coordenadas a las que se accede con "obj.loc", o un enlace a otro objeto que podemos visualizar con "obj.data". También hay métodos funcionales, que sirven por ejemplo para manipular de una forma más efectiva los objetos: por ejempo, "obj.loc" es de sólo lectura, siendo preferible acceder a las coordenadas con "obj.getLocation()" y aplicar unas nuevas con "obj.setLocation(x,y,z)" Por otro lado, el API de Blender dispone de varias librerías de funciones, asociadas a cada clase, que nos permiten operar directamente en los objetos. Así, la librería "Object" sirve para capturar objetos por su nombre ("Object.Get('Plane.002')"), objetos que estén en la selección actual ("Object.GetSelected()") Un aspecto importante del concepto de Objeto: en Blender hay objetos de varias clases: clase Lámpara, clase Escena, clase Material... y clase OBJETO. Este OBJETO se refiere a "Objeto3D", que es como lo llamaremos en adelante, y consta de una referencia de lugar, orientación y tamaño que va asociada a otro bloque de datos (otro BlObjeto), que será de unos de estos tipos: malla ('Mesh'), lámpara ('Lamp'), curva ('Curve'), cámara ('Camera'), y aunque no estén implementados en el API en todo momento, hay otros: Armature, Lattice, Metaball, Surface... Es a estos objetos3D, visibles en una escena, a los que se refiere el módulo/librería "Blender.Object" |
|
Dependiendo de su funcionalidad, los scripts son de estos tipos:
De ejecución manual: sirven para realizar una tarea en el diseño del proyecto. Es decir, se ejecutan y ya está. Empezaremos con ellos por ser los más sencillos. Se ejecutan dejando el cursor sobre la ventana de texto y pulsando AltP. A su vez pueden tener un entorno gráfico, usando instrucciones OpenGl, y funcionando por eventos. De ejecución automática: se ejecutan cada vez que (a)Blender redibuja el entorno, o (b)cambiamos de frame. Así podemos aplicar instrucciones a un objeto, por ejemplo, para darle una localización dependiendo del tiempo. Para hacer esto, pulsa el botón de script linking (el que tiene un papel dibujado, en la ventana de botones) y asocia el script pulsando uno de los botones Add. Se asocian a toda una escena (mitad derecha), o a ciertos objetos3D (mitad izquierda), afectando a alguno de los distintos objetos enganchados a este: objeto3D, material, etc. Logicbrick: se emplean en el motor de tiempo real para toma de decisiones, aplicación de atributos, etc. |
|
Iniciemos Blender con la configuración de fábrica, o sea, que nos aparezca el plano y la cámara. Debemos saber que el plano es un BlObjeto de clase objeto3D llamado 'Plane', de tipo 'Mesh', asociado por tanto a un objeto de clase Mesh llamado también 'Plane'.
Por otro lado, la cámara es un BlObjeto de clase objeto3D llamado 'Camera', de tipo 'Camera', asociado por tanto a un objeto de clase Camera llamado también 'Camera'.Escribamos el siguiente código:
Ahora hacemos AltP y miramos en la consola, o ventana que se abre cuando ejecutamos Blender, o mejor aún, desde la cual hemos abierto blender escribiendo "blender.exe" o algo así. Si ha habido algún problema, ahí es donde aparecerá el error. Si no, nos aparecerá una frase informándonos de la posición que ocupa el objeto3d "Plane". En el caso de los Mac, es frecuente preguntar "dónde está la consola esa". Bien, hay una consola en el menú Utilities, en Terminal. No creo que haya código más sencillo, pero creo que me toca explicarlo:
La cosa parece, pues, que puede complicarse cuanto queramos. Pero no es mucho más que esto, pues todas las dudas aparecen al preguntarse si tal o cual cosa debe hacerse accediendo a un atributo del objeto para cambiarlo, a un método de este, o a una función del módulo "Blender.Object". Para despejar algunas dudas, vamos a ejecutar este script:
|
Haremos un script ahora que manipula los objetos3D y añade algunos más, explicando el significado de cada paso nuevo.
|
|
V.18,9,3 - © 2003 Carlos López Escríbeme y dime algo... ¡tú puedes hacerlo! Gracias a todos los reporteros de fallos que hacen que esto se vaya corrigiendo ;-) |