plano de proyección de la camara

Preguntas y respuestas relacionadas con el uso y desarrollo de scripts Python y plugins para Blender 3D
Responder
kevek
Mensajes: 27
Registrado: Mar Ene 24, 2012 6:19 pm
Nombre:

plano de proyección de la camara

Mensaje por kevek » Mar Ene 24, 2012 6:48 pm

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

JhLocke
Mensajes: 20
Registrado: Mar Ene 24, 2012 8:21 am
Nombre:

Re: plano de proyección de la camara

Mensaje por JhLocke » Mié Ene 25, 2012 8:30 am

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.

kevek
Mensajes: 27
Registrado: Mar Ene 24, 2012 6:19 pm
Nombre:

Re: plano de proyección de la camara

Mensaje por kevek » Vie Ene 27, 2012 6:00 pm

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.

YahelCB
Mensajes: 3
Registrado: Sab Mar 05, 2011 4:41 pm
Nombre:
Contactar:

Re: plano de proyección de la camara

Mensaje por YahelCB » Dom Ene 29, 2012 5:43 am

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

kevek
Mensajes: 27
Registrado: Mar Ene 24, 2012 6:19 pm
Nombre:

Re: plano de proyección de la camara

Mensaje por kevek » Vie Mar 23, 2012 7:05 pm

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:

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)

Responder