Hola,
¿Alguien sabe como puedo obtener, en python, el plano de proyección de la cámara?
Es decir, el plano en el que se proyectan todos los objetos que la camara vé.
Lo que quiero hacer es lo siguiente:
Tengo 2 objetos en el espacio, y tengo la camara apuntando a estos dos objetos. Pues lo que quiero hacer es hallar la distancia de estos dos objetos en la proyección del plano de la camara. Para hallar su punto medio en el plano, y dirigir la camara con un TrackTo a este punto medio.
Espero haberme explicado bien...
Para comenzar con esta idea que tengo primero necesito hallar el plano de la camara... que no sé como obtenerlo en python.
A ver si me pueden dar una ayudita...
Saludos,
kevek
plano de proyección de la camara
Re: plano de proyección de la camara
Si lo que quieres es centrar el punto de gravedad entre los dos objetos, selecciona los dos objetos, pulsa CNTRL + J. Después se leccionalo y pulsa ALT + CONTRL + SHIFT + C y clica en Origin to Geometry. Entre ambos objetos veras un punto naranja que representa su punto de gravedad.
Re: plano de proyección de la camara
Mmmm... no, eso no es lo que estoy buscando.
Lo que estoy buscando es el punto medio entre los dos objetos en la vista de la camara, que no es lo mismo que el punto medio entre los dos objetos.
Visto desde la cámara... el resultado es diferente, ya lo comprobé.
Desde el punto de vista de la camara, si un objeto está mas alejado que el otro, el punto medio entre ellos no queda centrado en el centro de la pantalla (aunque tenga la camara dirigida a ese punto con un trackto).
Por eso, lo que busco es el punto medio en la proyección de la camara. No en el espacio.
Gracias de todas formas.
Lo que estoy buscando es el punto medio entre los dos objetos en la vista de la camara, que no es lo mismo que el punto medio entre los dos objetos.
Visto desde la cámara... el resultado es diferente, ya lo comprobé.
Desde el punto de vista de la camara, si un objeto está mas alejado que el otro, el punto medio entre ellos no queda centrado en el centro de la pantalla (aunque tenga la camara dirigida a ese punto con un trackto).
Por eso, lo que busco es el punto medio en la proyección de la camara. No en el espacio.
Gracias de todas formas.
Re: plano de proyección de la camara
Suena interesante, no se casi nada de phyton, pero se me ocurre que buscando en las referencias de las funciones de la camara talvez encuentres alguna para desplegar la vista de camara. Me puse a buscar y encontre este libro y en la pagina 58 usan codigo para crear una camara y configurarla, talvez ahi encuentres algo.
http://blenderartists.org/forum/showthr ... ender-2.5x
El libro lo encontre aquí: http://wiki.blender.org/index.php/Doc:2.6/Books
Salu2
http://blenderartists.org/forum/showthr ... ender-2.5x
El libro lo encontre aquí: http://wiki.blender.org/index.php/Doc:2.6/Books
Salu2
Re: plano de proyección de la camara
Encontré la solución.
El punto medio de los dos objetos lo calculo a partir de las posiciones en la pantalla 2D, es decir, con las posiciones de cada uno de los dos objetos que me devuelve el método getScreePosition().
Luego, encontré por internet un código ya hecho que consistía en seguir con la cámara el puntero del ratón. Pues... lo modifiqué para que, en lugar de seguir el puntero del ratón, siguiera el punto medio que calculé anteriormente.
En fin, este el código python:
El punto medio de los dos objetos lo calculo a partir de las posiciones en la pantalla 2D, es decir, con las posiciones de cada uno de los dos objetos que me devuelve el método getScreePosition().
Luego, encontré por internet un código ya hecho que consistía en seguir con la cámara el puntero del ratón. Pues... lo modifiqué para que, en lugar de seguir el puntero del ratón, siguiera el punto medio que calculé anteriormente.
En fin, este el código python:
Código: Seleccionar todo
import GameLogic as g
import math as m
cont = g.getCurrentController()
owner = cont.owner
scene = g.getCurrentScene()
cam = scene.active_camera
cube_cam = scene.objects[\"Cube_cam\"]
player = scene.objects[\"Cube1\"]
enemy = scene.objects[\"Cube2\"]
posPlayer = cam.getScreenPosition(player)
posEnemy = cam.getScreenPosition(enemy)
sensitivity = 1.0
# Cálculo del punto medio en la pantalla
posX = ( posPlayer[0] + posEnemy[0] ) / 2
posY = ( posPlayer[1] + posEnemy[1] ) / 2
x = round(0.5 - posX, 2)
y = round(0.5 - posY, 2)
x *= sensitivity
y *= sensitivity
if \"oldX\" not in owner:
owner[\"oldX\"] = 0.0
owner[\"oldY\"] = 0.0
else:
# Smooth movement
owner[\'oldX\'] = (owner[\'oldX\']*0.1 + x*0.1)
owner[\'oldY\'] = (owner[\'oldY\']*0.1 + y*0.1)
x = owner[\'oldX\']
y = owner[\'oldY\']
# set the values
owner.applyRotation([0, 0, x], False)
owner.applyRotation([y, 0, 0], True)