Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Arma en FPS

Iniciado por SkyNetBCN, 02 de Septiembre de 2008, 07:52:10 AM

« anterior - próximo »

SkyNetBCN

Que tal compañeros. Estaba haciendo una minidemo de un juego muy sencillo en DirectX y me preguntaba como hacer para que en un FPS, el renderizado del arma quede siempre bien cuadrado en la imagen como si el personaje la sostuviera en su mano derecha. Porque si el personaje se va moviendo por el escenario, habrá que colocar en cada frame el arma en "las manos" del mismo y la verdad es que no se me ocurre como hacerlo, alguna idea?  ???

Gracias,

Buffon

Cuando "creas" el personaje para luego renderizarlo, en la estructura de datos puedes poner partes clave, como la posición donde irá el sombrero más la dirección donde mira.

En tu caso puedes poner la dirección donde está la mano y la dirección donde apunta el brazo para así colocar el arma.

Aunque normalmente tienes un esqueleto base para todos tus personajes y estos puntos ya están definidos.

tamat

posicionando el arma en espacio de camara. es decir, pegando el arma a la camara
Por un stratos menos tenso

SkyNetBCN

Y como hago para girar el arma hacia donde está mirando la cámara? Si posiciono el arma en el punto en el que se encuentra la cámara, me saldrá centrada en la pantalla, y me gustaría que quedase a un lado como si estuviese apoyada sobre el lateral del personaje (como en todos los fps comerciales)...

tamat

aplicandole una traslacion. Oye, si estas trabajando con 3D deberia echarle una ojeada al tema de matrices, traslaciones, rotaciones, escalados, etc. En serio, intentar hacer 3D sin saber como se ubican las cosas en la escena es absurdo.

Busca por aquí: http://www.google.com/search?hl=en&client=firefox-a&rls=org.mozilla%3Aes-ES%3Aofficial&hs=mI9&q=transformaciones+geometricas+3d&btnG=Search
Por un stratos menos tenso

SkyNetBCN

 :P Obviamente que se rotar, mover, escalar, etc etc ect!! Quizás no me he explicado bien, si yo roto mi personaje como puedo conseguir el ángulo de giro para hacer que el arma gire la misma cantidad de grados? por ejemplo, si yo paso de mirar (imaginaos un reloj) a las 12 y roto mi personaje (con el ratón) de tal modo que queda mirando a las 9, como sé cuánto tengo que rotar el arma para que mire al mismo sitio que mi personaje?

Buffon

Tampoco es que nosotros tengamos que saber en que coordenadas estás dibujando <.< y ahora dudo que estés en primera persona como entendí tras el mensaje de tamat.

Si te refieres a que puedes ver a tu personaje en 3ra persona, se pintaría igual que en primera pero situando antes la cámara en el centro del personaje.


senior wapo

#7
Elige un punto del personaje como un punto de anclaje del arma y una orientación respecto a ese punto. Las coordenadas de ese punto son relativas al modelo del personaje. Convierte esa traslación y rotación en una matriz. Llamémosla matriz relativa.

Ahora piensa: ¿ que ocurre si para pintar el arma usas exactamente las mismas matrices que para el personaje ? Pues que te sale el arma en la barriga del personaje o entre los pies, según donde tenga el personaje su punto (0,0,0).
¿ Pero a que el arma se gira a la vez que el personaje ?

Pues limitate a premultiplicar la matriz relativa por la del personaje y ya tienes la matriz a usar.

El arma siempre tiene que girar los mismos grados que el personaje, solo que sus puntos no han de estar centrados en (0,0,0) sino que has de aplicarle antes la posición relativa de la mano como traslación y el ángulo del brazo antes de aplicar la rotación.

Ese desplazamiento y rotación es el que tenga el personaje en ese fotograma de animación por lo que lo suyo es que lo cojas de un hueso tras haber animado.

The-Force

#8
No basta con hacer glLoadIdentity() (el equivalente en direct3d) despues de renderizar la escena, hacer un traslate hacia la derecha y pintar el arma sobre la escena? De ese modo siempre pintas el arma a la derecha y apuntando en la misma direccion que  la camara. Es mas si la malla esta desplazada ya sobre su origen no habria ni ke hacer el traslate.

P.D: creo que a esto se referia tamat

Prompt

Se hablan 2 cosas:
- Rotar sobre un punto
- Camera::Matrix == Gun::Matrix

Lo normal para ir "apuntando" por ahi es hacer que la mano y la pistola tengan la misma matriz que la camara, con lo cual el arma sale justo delante como un HL.

Luego ya, aquello de poner un arma pegado al tio, normalmente se le coloca en un bone especifico.

SkyNetBCN

Gracias a todos por vuestra ayuda. Ya casi he terminado lo que quería hacer y si todo va OK en breve os enseñaré algo... Aunque no esperéis el Quake5 porque como ya habréis notado, soy novatillo...  :P

Gracias,

rijkaard

Es que cuando rotas tu personaje a la derecha, realmente estas rotando el mundo a la izquierda y la camara siempre está fija, al menos en OpenGL. Prueba a posicionar el arma justo antes de comenzar a aplicar las transformaciones a tu escena.

Saludos.

fjfnaranjo

Porque los motores de materia oscura no mueven la nave.

La nave se queda quieta, y los motores mueven el resto del universo.
fjfnaranjo.com - Creating entertainment - Creando entretenimiento
fjfnaranjo [4t] gm4il [d0t] c0m (mail y msn)

rijkaard

Cita de: fjfnaranjo en 15 de Diciembre de 2008, 10:21:05 AM
Porque los motores de materia oscura no mueven la nave.

La nave se queda quieta, y los motores mueven el resto del universo.

Jajaja. Curiosa forma de verlo. Para los que se lian con las transformaciones puede serles útil  ;)






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.