Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: x-alien en 11 de Enero de 2003, 05:00:40 AM

Título: CAMARA FPS DX9
Publicado por: x-alien en 11 de Enero de 2003, 05:00:40 AM
                                HOLA  no tengo ni pajalera idea de como hacer una camara fps, ni como moverla aunke sea pa lante, patras, y strife...
he estado viendo varios tutos.. uno aleman...(no entendi un pijo),
el de berserker, entendi lo de k la camara nunca se mueve y se mueve el mundo 3d y no la camara =) curioso...
pero no kiero coger su codigo, no me gusta copy and paste y menos usar codigo de la gente...

me gustaria k alguien me ayudara a crear la camara, y explicarme como puedo avanzar la camara, girar, strife etc.

este es el codigo de la camara estatica.



   D3DXVECTOR3 vEyePt( 0.0f, 6.0f,-40.0f );

   D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f );

   D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f );

   D3DXMATRIXA16 matView;

   D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec );

   m_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );



   FLOAT fAspect = ((FLOAT)m_Width) / ((FLOAT)m_Height);

   D3DXMATRIXA16 matProj;

   D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, fAspect, 1.0f, 500.0f );

   m_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );


tambien decir k no uso nada de los putos appwizard.. por el motivo de k no me gusta usar codigo no escrito por mi,
actualmente estoy pillao en la camara y el la carga optimizada de modelos x, como bien sabeis usan triangle list... lo k supone... k hay mas vertices de la cuenta...

alguien me podria explicar lo de la camara paso a paso si no os importa.. thx... actualmente estoy aprendiendo dx, sin nada, solo tengo un misero libro de c/c++, lo k se de win32 lo aprendi en internet, pero no hay mucho de d3d en la red, todo es opengl... =(, alguien tiene algun buen libro de dx8 americano en pdf??
necesito libros en pdf, alguien tiene enlaces con pdfs??

salu2

pd. las 5:07 de la mañana y aun sigo r k r machacando...
k duro es aprender como autodidacta, sin libros y sin ser estudiante de informatica, uh uh :)                                
Título: CAMARA FPS DX9
Publicado por: Lord Trancos en 11 de Enero de 2003, 09:45:28 AM
                                No lo he probado, pero igual funciona....

Primero creas una matriz con





D3DXMATRIX* D3DXMatrixRotationYawPitchRoll(

 D3DXMATRIX* pOut,

 FLOAT Yaw,

 FLOAT Pitch,

 FLOAT Roll

);





a partir de las rotaciones de la camara.

Y despues creas otra matriz de translacion con la posicion de tu personaje





D3DXMATRIX* D3DXMatrixTranslation(

 D3DXMATRIX* pOut,

 FLOAT x,

 FLOAT y,

 FLOAT z

);





y finalmente las multiplicas. (D3DXMatrixMultiply) :)

Lo veo facil de entender y no sabria q explicar.... ^_^;

pd1. no lo he probado y soy malo q te cagas con las mates (suspendi la de COU y luego me cambie las asignaturas para no tener que volver a verlas nunca mais)

pd2. aunque ahora que lo pienso, no se si te valdra pq estarias usando codigo de otros... :-/ (M$)                                
Título: CAMARA FPS DX9
Publicado por: ethernet en 11 de Enero de 2003, 12:17:44 PM
Hay unos 100k tutoriales de camara en internet mas o menos, de todas formas no hay q ser ingeniero industrial para intuirlo basico, una suma de vectores multiplicado por un factor y un par de angulos. En ogl hay una funcion llamada gluLookAt quizas en DX haya algo similar. Pero como digo no hace falta nada mas q pensar 3 minutos (1,5 minutos para un ingeniero industrial)

saludos
Título: CAMARA FPS DX9
Publicado por: CoLSoN2 en 11 de Enero de 2003, 01:30:47 PM
                               
Citar
HOLA no tengo ni pajalera idea de como hacer una camara fps, ni como moverla aunke sea pa lante, patras, y strife...  

Pues en caso de alante,atrás y strafe, es bien simple. Tu tienes la dirección de la cámara (el 2º vector(lookAt)), simplemente haces:

pos = pos + dir*step  donde step es la cantidad a avanzar (suponemos que dir está normalizado). Para átrás sería restando.

y para el strafe, haz igual pero en vez de dir, utiliza el vector resultante del producto vectorial (y luego normalizar) entre dir y up.

-- saludos                                
Título: ...
Publicado por: Grugnorr en 11 de Enero de 2003, 02:06:18 PM
                                Busca por google, yo veo muchos tutoriales para DX. Además de la SDK. Y la teoría 3d es igual en OGL y en DX.

El equivalente a gluLookAt() es D3DXMatrixLookAtLH (si usas un sistema coordenadas basado en la regla de la mano izda, RH si dzcha)

Así de cabeza te pongo unos cuantos tutoriales:

http://www.andypike.com/tutorials/directx8/

http://www.drunkenhyena.com/

Los de Berserker ya los tienes ;)

Aparte de Flipcode y Gamedev, SDK y demás obvios

DrunkenHyena ha hecho los tutoriales en NeHe en DX(supongo que son los que has encontrado en OGL ;) ), acaba de sacar justo el de moverse por un mundo 3d, así que ya sabes...

PD: Intenta comprender algo de la teoría...                                
Título: CAMARA FPS DX9
Publicado por: x-alien en 11 de Enero de 2003, 08:11:43 PM
                                gracias a tos por intentar ayudarme.

me kedo con la explicacion de lord trancos.
tutoriales hay muchos pero casi ninguno esta explicado. me mirare algunos tutos, solo kiero entenderlos para poder hacer la camara a mi estilo. y si hay alguno explicado, explica k hace pero no la teoria matematica k es lo k yo kiero... yo habria usado cos, sen, u otras formas para girar la camara...
drunkenhyena y webs similares no explica nada, te da el codigo para bajar, y yo no kiero usar el codigo, sino aprender, no usar sin entender...

he visto k algunos usan quaternions en la camara... intentare hacerme una camara... ciertamente opengl me fue mucho mas facil k directx... a mi parecer.

yo con matrices soy un negao, tengo suspendido algebra en la carrera, evito las asignaturas k tienen matrices por ahora solo me centro en las ecuaciones diferenciales de calculo... claro k no puedo llevar grafismo , programacion y estudios todo a la vez... en algun lao patino jejeje

salu2                                
Título: CAMARA FPS DX9
Publicado por: x-alien en 11 de Enero de 2003, 09:33:51 PM
                                bueno, he resuelto mi duda solo, =(, la solucion...
lo mio... dibujar, he dibujado la camara en el espacio LH de dx, sus vectores y aplicar simple matematica algebraica y de vectores, ahora solo me keda saber como implementarlo en dx... me mirare las opciones k tiene para las matrices, a ver k me sale.
buske paginas de mates, y vi lo k yo keria y preguntaba... mates, ya vi  cuales eran las matrices de traslacion, rotaciones y escala... eso no lo he dado yo en algebra... ley en este foro k dabais en clases este tipo de matrices..., ojala hubiera dao eso yo, no habria estao indefenso ante la injenuidad...

lo k ley en el tuto de berserker.... de k la camara nunca se mueve eso es verdad o es una trola??, es la unika web k he visto k pone eso...
algo curioso... no se pork entonces en algunos programas pone la posicion de la camara con coordenadas x, y ,z, incluso en el max... la camara como objeto con sus coordenadas y separada del eje de coordenadas el 0,0,0... algo rarito de creer jeje

salu2

thx por intentar ayudarme

pd. muchos tutoriales y todos de lo mismo, texturizar, triangulito, cubito, y nada de lo k busco y bien explicado... colisiones(con todos sus tipos), frustum culling, octrees, raycasting, raytrace, metaballs, phisics etc... nada de lo k busco, eso esta en los libros caros de importacion... como gems...

pdd alguien k tenga el gems.. lo escanee y lo ponga pa bajar xd                                
Título: CAMARA FPS DX9
Publicado por: Mars Attacks en 11 de Enero de 2003, 09:40:58 PM
                                La cámara puede moverse perfectamente. Lo de las matrices de transformación se suele dar en informática gráfica. Si quieres, en www4.uji.es/~ribelles está la información (apuntes de teoría y de práctica -aunque se programa en opengl-) sobre lo que damos en la UJI.                                
Título: CAMARA FPS DX9
Publicado por: ethernet en 11 de Enero de 2003, 10:23:39 PM
Citar
pd. muchos tutoriales y todos de lo mismo, texturizar, triangulito, cubito, y nada de lo k busco y bien explicado... colisiones(con todos sus tipos), frustum culling, octrees, raycasting, raytrace, metaballs, phisics etc... nada de lo k busco, eso esta en los libros caros de importacion... como gems...

colisiones: gamedev.net flipcode.com gamasutra.com hay unos 10 por cada pagina por lo menos, con codigo de ejemplo y tutorial con imagenes.

frustrum culling: hay muchisimo, Lord trancos por ejemplo tiene codigo en su web,

octrees: gametutorials.com cone3d.gamedev.net

raycasting y raytracing: no sabia q te diera por ese tipo de render ahora :D, de todas maneras hay tutoriales basicos por ahi y no tan basicos (web de facultades americanas)-> http://www.cs.virginia.edu/~gfx/Courses/20...nthesis/papers/.  

Metaballs: angelcode.com hay un tutorial para DX, de todas maneras busca info acerce de marching cubes. Es la manera de implementarlos. En español con codigo: http://www.telecable.es/personales/ffelagu.../metaballs.html
fisica: en gamedev hay una seccion entera.

para las cosas matematicas simplement pillate cualquier libro de mates de cualquier ingeniero industrial y tienes toda el algebra q necesitas y mucha mas.
De todas maneras como digo la camara no es algo q creo q pueda causar muchos problemas a nadie, como digo son  2 vectores y 2 angulso, incluso colson lo sabe ( ;PPPPPP) .

saludos
Título: CAMARA FPS DX9
Publicado por: ethernet en 11 de Enero de 2003, 10:26:59 PM
[qoute]
yo con matrices soy un negao, tengo suspendido algebra en la carrera, evito las asignaturas k tienen matrices por ahora solo me centro en las ecuaciones diferenciales de calculo... claro k no puedo llevar grafismo , programacion y estudios todo a la vez... en algun lao patino jejeje
[/quote]

De mis tiempos de estudiantes recuerdo q para resolver ecuaciones diferenciasles habia una tecnica q usaba los autovalores de la matriz de las ecuaciones :DD

saludos
Título: CAMARA FPS DX9
Publicado por: ethernet en 11 de Enero de 2003, 10:30:44 PM
Perdon, el codigo q tiene lord trancos en su web se refiere al octree aunque porsupuesto usa frustrum culling :DD

puto BBcode xDD
saludos
Título: CAMARA FPS DX9
Publicado por: BeRSeRKeR en 11 de Enero de 2003, 11:46:41 PM
                                Pues como ser humano que soy puedo equivocarme, pero no es el caso. Lo de que la cámara no se mueve no es una trola. La matriz de vista (que es "la matriz de la cámara"), lo que hace es transformar los vértices a coordenadas de vista por lo que, lo que estás moviendo/rotando no es la cámara sino la geometría...y es que cuando tú trasladas la cámara x unidades en el eje Z, lo que estás haciendo realmente es crear una matriz de traslación que traslada la geometría -x unidades en el eje Z...

Saludos

PD: la cámara como tal no existe (como te la pintan los programas como MAX)...en realidad es una transformación más...no es un objeto que tú muevas como puedas hacer en el MAX. De todas formas en MAX, cuando pones en un viewport la cámara activa, lo que realmente se está haciendo ahí es exactamente lo que he dicho...negar la traslación y la rotación de la cámara para transformar la geometría correctamente y posicionarla de forma que se vea a través de nuestra cámara tal como si hubiésemos movido la cámara.                                
Título: CAMARA FPS DX9
Publicado por: Mars Attacks en 12 de Enero de 2003, 12:17:36 AM
                               
Citar[qoute]
De mis tiempos de estudiantes recuerdo q para resolver ecuaciones diferenciasles habia una tecnica q usaba los autovalores de la matriz de las ecuaciones :DD

Concretamente se usa para resolver sistemas de ecuaciones diferenciales del tipo X(t)'=AX(t)+f(t)
Se sacan los autovalores lambda y los autovectores v y tienes soluciones de la forma Xgi=e^lambdai*t  *vi
etc etc, hay variantes dependiendo de si los valores de lambda son iguales, imaginarios etc. Entonces la solución cambia, pero a fin de cuentas la matriz final acaba siendo Xh=[x0 x1 ... xi]*[C0 C1 ... Ci]'

Y tal y cual. Sólo quería fardar un poco, en realidad llevo unas cuantas cosillas más como esa para Ampliación de Matemáticas  :llorando:  A ver si la apruebo ya de una furcia vez. De hecho, en este tipo de preguntas siempre clavo la respuesta, pero luego pone una función de calor bidimensional extraña que se la saca de la manga y nos jode vivos  :(                                
Título: CAMARA FPS DX9
Publicado por: Mars Attacks en 12 de Enero de 2003, 12:26:11 AM
                               
CitarCosas chungas

Tío, vale, pero no te pongas filosófico XD Supongo que lo que x-alien preguntaba era que si para "moverse" por el mundo tenía que aplicar una transformación al mundo o a la cámara. Lo que tú explicas será la representación interna que esa cámara hace del mundo. Pero no me lo líes que acabará moviendo lo que no toca ;)

Esto me recuerda a una anécdota de un tal Einstein, que una maravillosa tarde de abril trataba de explicar a dos señoras que estaban de visita en su casa su nueva teoría de la Relatividad. Tras varios e infructuosos intentos para hacerse entender, al final les preguntó:
-¿No han tenido ustedes alguna vez esa sensación estando dentro de un tren, de que es el mundo el que se mueve en lugar de ustedes?
-Sí, sí -afirmaron alegremente las señoras, contentas por comenzar a entenderlo.
-Pues eso no tiene absolutamente nada que ver con la teoría de la Relatividad.

Aunque más que de Einstein, parece de Grouxo XD En fin... no disparen, yo sólo soy el pianista.                                
Título: CAMARA FPS DX9
Publicado por: Mars Attacks en 12 de Enero de 2003, 12:34:54 AM
                                http://www4.uji.es/~ribelles/Practica5/practica5.htm

En esa web tienes la "teoría" orientada a la práctica del tema de los ángulos y la cámara.                                
Título: CAMARA FPS DX9
Publicado por: Lord Trancos en 12 de Enero de 2003, 12:46:48 AM
                               
CitarPD: la cámara como tal no existe

No hay cuchara .... xDDDDDD

Nop, ahora en serio. Tienes toda la razon ^_^                                
Título: CAMARA FPS DX9
Publicado por: ethernet en 12 de Enero de 2003, 02:15:24 AM
Bueno, en D3d hay 3 matrices no ? ademas de la modelview y la de proyeccion cual teneis?

saludos
Título: CAMARA FPS DX9
Publicado por: x-alien en 12 de Enero de 2003, 02:24:24 AM
                                thx a tos por los links.

berserker me parecia extraño lo k decias en tu tuto de la camara, y dije extraño pork me he leido tantos tutos y en ninguno decia nada, por cierto donde has leido tu eso?? k libro o te lo han enseñado?, no lo digo pork dude, lo digo pork kiero aprender donde otros han aprendido, o pillarme libros nuevos.

supongo k si se hacer transformaciones de objetos podre hacerla a la camara.

he estado en gamedev y en la zona de directx no vi na de colisiones, tal vez este en otra, como opengl, o alguna zona a la k no suelo visitar.
toy con direct3d y siempre ignoro todo lo k no sea direct3d  :).

ahora mismo no tengo agilidad programando, poko a poko la pulire como he hecho siempre... ahora soy incapaz de programar una integral de rieman, una doble, un p serie...

salu2

pd. libros de mates tengo...muchos y mu feos como el larson,.. pero k me dice ami y como se yo... k una matriz de 4x4, con la diagonal con 1, y la fila ultima x, y, z, 1 es la matriz de traslacion...? eso no me viene en ningun lao... el 80% de lo k estudio son operaciones con integrales de todos los tipos, estoy solo educado para resolver problemas segun los metodos de mi campo  :D por desgracia.                                
Título: ...
Publicado por: Grugnorr en 12 de Enero de 2003, 02:41:27 AM
                                X-Alien, las colisiones, octrees y demás cosas que mencionas no tienne nada que ver con la Api gráfica que uses.                                
Título: CAMARA FPS DX9
Publicado por: x-alien en 12 de Enero de 2003, 03:46:03 AM
                                lo se, pero es por ver k funciones matematicas del dx usan los k implementen eso en dx... y hay tantas... k todos los tutos de camaras k he visto... ni uno coincide... todos usan funciones distintas, el mas raro k he visto... usa quaterniones.. uhh uhh D3DXQuaternionIdentity Function, facil para kien lleva tiempo con el dx y se conoce todas esas funciones, pero para el k las ve por primera vez como yo...cuesta, todos empezamos alguna vez  :), ojala el sdk del dx fuera como el manual de ref y tutoriales del max, paso a paso. uno no aprende si se le dice esto es asi, se aprende viendo paso a paso como se hace... por lo menos asi enseñan las mates  :) .... con lo rapido k yo hacia la camara en opengl con Cvector.... hacia operaciones simples... y ahora .. uff... algunos tutos con_.41 _.42 _.43 _.44.... menos mal k se lo k es...

en definitiva k tengo k aprenderme las funciones matematicas del dx si kiero hacer lo k kiero hacer...


por cierto... pork usando en dx 3 vectores, uno para la posic, otro para look y otro para el up... he visto en algunos tutos 4 vectores?? cual es ese 4?? alguien me explica esto??



class cscCamera

{

private:



LPDIRECT3DDEVICE8 using_d3d_Device;

D3DXMATRIX View;

D3DXMATRIX ViewRX, ViewRY, ViewRZ, ViewT, ViewS;

D3DXMATRIX ViewTT;



D3DXVECTOR3 pos;

D3DXVECTOR3 targ;

D3DXVECTOR3 up;

D3DXVECTOR3 rig;



public:



cscCamera (void);

~cscCamera (void);



void Create (LPDIRECT3DDEVICE8);

void Update (void);



void RotateX (float);

void RotateY (float);

void RotateZ (float);

void Move (float, float, float);

void Scale (float, float, float);



void MoveForward (float);

void Strife (float);



float getX (void);

float getY (void);

float getZ (void);

};



#endif





cscCamera::cscCamera()

{

pos  = D3DXVECTOR3 ( 0.0f,  0.0f,  0.0f);

targ = D3DXVECTOR3 ( 0.0f,  0.0f, 10.0f);

up   = D3DXVECTOR3 ( 0.0f, 10.0f,  0.0f);

rig  = D3DXVECTOR3 (10.0f,  0.0f,  0.0f);





D3DXMatrixIdentity (&View);

D3DXMatrixIdentity (&ViewRZ);

D3DXMatrixIdentity (&ViewRX);

D3DXMatrixIdentity (&ViewRY);

D3DXMatrixIdentity (&ViewT);

D3DXMatrixIdentity (&ViewS);

D3DXMatrixIdentity (&ViewTT);

};





void cscCamera::Create (LPDIRECT3DDEVICE8 dev)

{

using_d3d_Device = dev;

};





void cscCamera::RotateX (float in_x)

{

D3DXMatrixRotationX (&ViewTT, in_x);

ViewRX *= ViewTT;

};

void cscCamera::RotateY (float in_y)

{

D3DXMatrixRotationY (&ViewTT, in_y);

ViewRY *= ViewTT;

};



void cscCamera::RotateZ (float in_z)

{

D3DXMatrixRotationZ (&ViewTT, in_z);

ViewRZ *= ViewTT;

};



void cscCamera::Move (float in_x, float in_y, float in_z)

{

D3DXMatrixTranslation (&ViewTT, in_x, in_y, in_z);

ViewT *= ViewTT;

};



void cscCamera::Scale (float in_x, float in_y, float in_z)

{

D3DXMatrixScaling (&ViewTT, in_x, in_y, in_z);

ViewS *= ViewTT;

};







void cscCamera::MoveForward (float in_s)

{

D3DXVECTOR3 vect;

D3DXVec3Subtract (&vect, &targ, &pos);

vect *= in_s;

Move (vect.x, vect.y, vect.z);

};



void cscCamera::Strife (float in_s)

{

D3DXVECTOR3 vect;

D3DXVec3Subtract (&vect, &rig, &pos);

vect *= in_s;

Move (vect.x, vect.y, vect.z);

};





void cscCamera::Update (void)

{

pos  = D3DXVECTOR3 ( 0.0f,  0.0f,  0.0f);

targ = D3DXVECTOR3 ( 0.0f,  0.0f, 10.0f);

up   = D3DXVECTOR3 ( 0.0f, 10.0f,  0.0f);

rig  = D3DXVECTOR3 (10.0f,  0.0f,  0.0f);



View = ViewRX*ViewRY*ViewT;



D3DXVec3TransformCoord (&pos, &pos, &View);

D3DXVec3TransformCoord (&targ, &targ, &View);

D3DXVec3TransformCoord (&rig, &rig, &View);

D3DXVec3TransformNormal (&up, &up, &View);



D3DXMatrixLookAtLH (&View, &pos, &targ, &up);

using_d3d_Device->SetTransform (D3DTS_VIEW, &View);

};





a ver si alguien k entienda de dx me explica k ha hecho aki.... pork ese 4º vector... si me encuentro tutos como este sin explicacion... sabe dios onde voy a parar  :jaja: y asi todos...
pensaba k con D3DXMATRIX, y D3DXMatrixTranslation conseguiria mover la camara pa lante, patras y strife...
k significan esos nombres ViewT  ViewTT, so se multiplica por la matriz unidad es para k no se mueve na no?? esk yo tengo k hacer todo esto en un papel para ver k efecto tiene, y ver como funciona.... mi big dude aki es.. k coño es rig...



salu2 y perdonad las molestias  :(

pd. busco libro pdf                                
Título: CAMARA FPS DX9
Publicado por: Mars Attacks en 12 de Enero de 2003, 11:33:00 AM
                                ¿Te refieres a ese "targ" raro? Está pos (posición), targ (target, objetivo al que apunta, que es lo mismo que look), up (up XD) y rig (right). Creo que éste último se puede sacar haciendo el producto vectorial del look y el up, pero en fin, si ése lo ha usado explícitamente será para algo en concreto (acelerar algún tipo de cálculos o algo).
No me parece muy bien que deseches todo lo que "no sea DX". El álgebra que se usa en los juegos no la inventó micro$oft; puedes encontrarte cosas muy valiosas de teoría en cualquier tutorial, sea de lo que sea, que te ayudarían a entender qué es lo que quieres hacer. A partir de ahí, ya puedes buscar qué funciones hacen lo que quieres hacer en DX. Pero limitarse a la información que dan en los tutos de DX me parece dejar de lado muchíiiiiisima información.
¿Viste la web que te puse? En la sección de teoría tienes el tema de matrices de transformación, de frustum, algoritmos de renderizado y un gran etcétera. Creo que para calentar motores te iría bien.                                
Título: CAMARA FPS DX9
Publicado por: ethernet en 12 de Enero de 2003, 11:37:17 AM
Los 4 vectores son posicion, view, up y right q creo q con el nombre queda claro lo son.

Creo q deberias parar de usar d3d opengl o cualquier api y ponerte a pensar q es un vector, q es una matriz, q es una transformacion etc. Tb te resultara muy util ls msdn y la extension q trae el SDK de DX para el.

Esa implementacion de camara q has pegado desde luego se pude hacer de manera mas intuitiva, pero como digo se puede sacar por el nombre de las variables y de las funciones q es cada cosa.
Título: CAMARA FPS DX9
Publicado por: Findeton en 12 de Enero de 2003, 12:56:49 PM
                                Uhm, yo todabía estoy empezando con el DirectX pero supongo que 'up' y 'right' serán para definir qué es arriba y a la derecha (respectivamente para la cámara). Es decir, para rotar la visión de la cámara, me equivoco?                                
Título: CAMARA FPS DX9
Publicado por: Mars Attacks en 12 de Enero de 2003, 01:08:41 PM
                                No te equivocas:
http://www3.uji.es/~ribelles/Docencia/E26-...royecciones.pdf

pero el vector right no es imprescindible. Se puede conseguir con la multiplicación vectorial del up y el look.                                
Título: CAMARA FPS DX9
Publicado por: fiero en 12 de Enero de 2003, 03:21:17 PM
                                Pues yo en matematicas soy mas bien 'lento', pero leí hace tiempo el tutorial de BeRSeRKeR (por cierto, gracias). Solo se trata de incrementar la posición de la cámara de acuerdo con el vector Z de la matriz de la misma cámara, claro esto en el caso de ir hacia adelante. Yo simplemente hago esto:

if(TeclaPulsada(VK_DOWN))

{

m_camara.x-=m_matCamara._13*velocidad;

m_camara.y-=m_matCamara._23*velocidad;

m_camara.z-=m_matCamara._33*velocidad;

}



if(TeclaPulsada(VK_UP))

{

m_camara.x+=m_matCamara._13*velocidad;

m_camara.y+=m_matCamara._23*velocidad;

m_camara.z+=m_matCamara._33*velocidad;

}


m_camara es una estructura donde guardo la posición y rotación de la cámara y con esos datos construyo la matriz de cámara:

typedef struct

{

float x,y,z;

float zoom;

float rotx;

float roty;

float rotz;

}camara;


un saludo                                
Título: CAMARA FPS DX9
Publicado por: x-alien en 12 de Enero de 2003, 04:23:42 PM
                                bueno ya he creado la camara, la he creado del mismo modo k hize en opengl, 3 vectores y lo k me dijo colson. pos += direc*vel

en opengl no tengo problemas pork lo conozco y se como hacerlo todo, pero en direct3d he tenido los problemas k todo el mundo ha tenido al principio, conocer sus funciones matematicas(me kedan algunas por saber k es lo k hacen xd), una vez aprendidas ya es facil  :). ademas no se puede hacer lo k suelo hacer yo... programar al voleo sin pensar, hay k estudiar el problema y darle una solucion... no se si llamais a eso analisis en la carrera de informatica.
antes de programar algo de mates es mejor hacerlo en papel y lapiz.

salu2 , thx  por los links.

pd. se perfectamente k es un vector, una matriz y cualkier cosa de mates, lo k estudio es 99% mates. como ya dije no conozco aun todas las funciones matematicas del dx9, no voy a mover un objeto mediante vectores punto a punto, si el objeto tiene 100 puntos no voy a crear 100 vectores, para algo estan las matrices y para algo cada api grafica tiene sus funciones matematicas, k es en lo k estoy ahora centrado, en conocer k es lo k hacen cada una de ellas.

pdd. el vector rig no es imprescindible, es mas no vale pa na por lo menos de la forma de la k yo resuelvo la camara  :D

pddd. ya os enseñare como me van mis primeros pasitos en dx                                
Título: CAMARA FPS DX9
Publicado por: ethernet en 14 de Enero de 2003, 07:45:19 PM
Q tiene q ver el movimiento de la camara con la API q uses ? Ese movimiento es matematica y vision del espacio pura ademas de saber sumar dos vectores y saber multiplicar un escalar por un vector. La implementacion de camara en opengl y D3D es exactamete la misma hasta el ultimo paso q es darle la matriz a la API (en cualquiera de las formas posibles).

Otra cosa del vector rigth: Teniendo 3 condiciones como son e vector up y el view y q es una base ortonormal puedes generarte una base de vectores linealmente independiente, con lo cual el vector rigth se puede obtener y por lo tanto es prescindible.

saludos
Título: CAMARA FPS DX9
Publicado por: x-alien en 14 de Enero de 2003, 09:16:52 PM
                                ethernet pues tiene k ver mucho, no se si has entendido lo k keria decir... pero veo k no usas dx9 =).

si no conoces las funciones matematicas del dx.... como vas a hacer eso k me dices... tendras k conocer las funciones para poder hacerlo.. vamos digo yo  :jaja:  :jaja:  :jaja:  :jaja:

"La implementacion de camara en opengl y D3D es exactamete la misma"

si lo se, no hace falta me lo digas  :jaja: , pero como bien he dicho, cada api tiene sus funciones matematicas, k hacen lo k me has dicho.. multiplicar vectores, restar, multiplicar matrices etc etc etc...

actualmente uso 4 vectores y el 4 es para la direccion.
y hay infinitas maneras de hacer una camara...
como bien has dicho.. ese movimiento es matematica... ok,  pues aplikemos las funciones matematicas del api k usemos =).

tal y como dije en el mi ultimo post, opengl..., como tengo la biblia esa naranja(pdf), conozco bien el opengl y sus funciones, pero de dx no, por eso pedia algun pdf del dx =). me diras k me mire la ayuda del sdk... te dire... no viene mucho, la biblia de opengl explica todo con ejemplos, se aprende mejor con ejemplos, ya he dicho k ojala estubiera el dx documentado como el manual de ref del max =).
apañado estaria un profesor de mi universidad, k nos dice.. tomad esta formula, aplicadla a este tipo de problema y se va de clases... hay k saber de k calculo ha salido esa formula y con su correspondiente explicacion con ejemplos.

y como dije el ultimo post..."la he creado del mismo modo k hize en opengl", pues como es lo mismo, como tu dices ,he hecho eso  :jaja: , pero usando las funciones matesssmaassticas del dx, espero se me haya entendido.

ademas no se k hace el vector right(derecha... derecha k??), nadie me ha dicho cual es su funcion y no pienso comerme el koko en el codigo de otro teniendo yo el mio a mi estilo k hace lo mismo pero a mi gusto y criterio.
si perdiera el tiempo en comerme el koko en ver el codigo de otro cuando ya tengo resulto el problema, taria chalao, bastante harto estoy de los gustos de unos y otros en normalizacion industrial como para k haya una normalizacion de estilo de programar... uh uh
no se... creo k capto una indirecta k me insinua k no se sumar vectores(vaya gilipollez) y ni multiplicar un escalar por un vector, y chorradas del cou como linealmente independiente... madre.
si me insinuas k deje de programar y aprenda mates.. tas muy ekivocado,
si vas por ese camino, informate de k es lo k estudio...
si he malinterpretado lo k me intentas decir lo siento, pero hablame mas llanamente, pork sino puedo entender tus frases como largonas...

estoy en 3º de 'industriales', no he llegado ahi por tener una cara bonita.

ahora mismo toy aprendiendo direct input... ya no me interesa el tema de la camara, pork lo tengo resuelto ya. pokito a pokito se llega lejito, y pokito a pokito se hace un juegito  :D.

salu2

pd. a ver si veo vuestros programas graficos, algo donde se vea colisiones, fisica y esas cosas en 3d, hay muchos k se dan de k saben eso y no enseñan na =(, alguna pantallita!                                
Título: CAMARA FPS DX9
Publicado por: Mars Attacks en 14 de Enero de 2003, 09:41:29 PM
                                El vector right sirve absolutamente para nada (a mi modo de ver) porque bastan los vectores look y up para aplicar cualquier transformación que quieras a la cámara.

¿Qué funciones son específicas para multiplicar matrices y vectores y todo eso en DX? (No estoy ironizando ni nada, no tengo ni absoluta idea de DX -yo soy más de opengl- y espero una respuesta a la pregunta). ¿Es algo que no se pueda implementar uno mismo? (No es muy difícil implementarse cada uno librerías propias sobre multiplicación de vectores/matrices, ¿no?).

Citar
pd. a ver si veo vuestros programas graficos, algo donde se vea colisiones, fisica y esas cosas en 3d, hay muchos k se dan de k saben eso y no enseñan na =(, alguna pantallita!

Hablando de programas gráficos, hoy he usado un par de "horas libres de descanso de clases" para programar un visualizador rudimentario de objetos 3d en opengl, pero me ha dado por usar las glut en lugar de las que usaba antes y he estado más de media hora mirando por qué no aceptaba un evento de teclado. Al final lo he resuelto, pero se me ha acabado el tiempo y sólo me funciona bien el modo examine de la cámara, el de walk hace algunas cosas extrañas y hasta que no acabe con él no empezaré con el fly. Dejaré todo en modo wireframes (haré la prueba con un teapot, ¡sí señor!) y me centraré en las físicas entonces. También me gustaría intentar el efecto ese de rebote y deslizamiento de la web de Ionicboy pero entonces me surge la duda (¿y para esta duda tanto párrafo?): ¿Cómo saco la normal del polígono que tiene debajo un objeto? Teniendo en cuenta que estoy usando los modelos wireframes de la glut (presumo que no tienen asignada la normal por ninguna parte), ¿cómo lo podría hacer? De hecho desconozco un poco (o todo) de los modelos con los que trabajo, no tengo acceso ni a vértices ni a ná de ná, que dice la canción gitana. ¿Qué haríais vosotros? (Aparte de pasar de eso y centrarme en lo otro, lo cual sería muy sensato).                                
Título: CAMARA FPS DX9
Publicado por: CoLSoN2 en 14 de Enero de 2003, 09:51:54 PM
                               
Citar
El vector right sirve absolutamente para nada  
Sirve para hacer un "strafe" con la cámara ;-)
Citar
¿Qué funciones son específicas para multiplicar matrices y vectores y todo eso en DX?  
Pues la librería de ayuda D3DX, entre otras cosas, trae funciones y clases para estos menesteres. Todo lo que empiece por D3DXVec3/4 D3DXMatrix y D3DXQuaternion , xD
Citar
¿Es algo que no se pueda implementar uno mismo?  
Evidentemente, de hecho en OGL tienes que hacerlo xD pero si te lo dan hecho, pues mejor ;-)                                
Título: CAMARA FPS DX9
Publicado por: Mars Attacks en 14 de Enero de 2003, 10:12:16 PM
                               
Citar
Citar
El vector right sirve absolutamente para nada  
Sirve para hacer un "strafe" con la cámara ;-)
Bueno, ya he dicho que a mi modo de ver. Ni siquiera sé qué es un strafe (si haces el favor de explicármelo te lo agradeceré), pero sabiendo que el vector right es la multiplicación vectorial (positiva o negativa según uses RH o LH) del look y del up, ¿para qué necesitas definirlo como tal? (además, tendrás que recalcularlo haciendo precisamente ese producto vectorial, ¿no?)

Citar
Citar
¿Qué funciones son específicas para multiplicar matrices y vectores y todo eso en DX?  
Pues la librería de ayuda D3DX, entre otras cosas, trae funciones y clases para estos menesteres. Todo lo que empiece por D3DXVec3/4 D3DXMatrix y D3DXQuaternion , xD

Hmmm iba a preguntarte lo que me respondes en la siguiente...

Citar
Citar
¿Es algo que no se pueda implementar uno mismo?  
Evidentemente, de hecho en OGL tienes que hacerlo xD pero si te lo dan hecho, pues mejor ;-)

Ahá. Más que nada lo preguntaba por eso de que x-alien prefiere hacer todo el códido posible de su puño y letra (que me parece muy bien, por cierto). Entonces podría hacerse su propia librería de funciones de multiplicar matrices y vectores y personalizársela a su gusto.                                
Título: CAMARA FPS DX9
Publicado por: BeRSeRKeR en 14 de Enero de 2003, 10:30:15 PM
                                Strafe = movimiento lateral. Todos los juegos de tipo FPS lo llevan...

por cierto, strafe significa bombardear por lo que he de suponer que se le da ese nombre a ese movimiento porque es una buena técnica para atacar, es decir, nunca perder de vista al enemigo, hacer movimientos circulares cuyo centro sea el enemigo y disparar a saco :jaja:

Saludos                                
Título: CAMARA FPS DX9
Publicado por: Mars Attacks en 14 de Enero de 2003, 10:41:20 PM
                                Si el movimiento es circular, ¿no puedes aplicarle la rotación a la cámara con respecto el eje up?                                
Título: CAMARA FPS DX9
Publicado por: BeRSeRKeR en 14 de Enero de 2003, 10:50:16 PM
                                No, el strafe no es circular lo que pasa es que si al mismo tiempo que haces strafe, haces un yaw, pues obtienes el movimiento circular. De todas formas el vector right es necesario para saber la dirección del movimiento lateral al igual que lo es el look para el movimiento de avance/retroceso. Y bueno, el vector right lo tienes que calcular para crear la matriz de vista...

Saludos                                
Título: CAMARA FPS DX9
Publicado por: Mars Attacks en 15 de Enero de 2003, 10:01:35 AM
                                Pero aún así supone una redundancia de información, que es a lo que me refiero. Si el shaft sólo es el desplazamiento, entonces tendrías que aplicar el incremento de posición en el vector producto vectorial del look y del up, sin tener que especificar que es el right. Eso sí, supongo que entonces se usará el right a efectos prácticos de calcularlo una vez por frame y no tener que hacer ese producto vectorial cada vez que vas a usarlo, o algo así. ¿Me equivoco?                                
Título: CAMARA FPS DX9
Publicado por: BeRSeRKeR en 15 de Enero de 2003, 01:07:23 PM
                                El vector right es estrictamente necesario para la matriz de vista (si no me equivoco en Direct3D es la primera columna de la matriz mientras que en OpenGL es la primera fila) por lo que hay que calcularlo por cada frame (siempre y cuando pretendas mover la cámara, claro) a través del producto vectorial entre look y up como tú mismo has dicho...

Saludos                                
Título: CAMARA FPS DX9
Publicado por: ethernet en 15 de Enero de 2003, 05:42:59 PM
Cuando digo q el vector rigth no sirve de nada me refiero q se puede calcular a partir de otros, no q no sirva de nada calcularlo o tenerlo calculado q es muy diferente.

x-alien: si estas en tercero de insdustriales debes saber bastante algebra y supongo q para ti el algebra basica sera coser y cantar, ahora, quien es el x.-alien q ha hecho la pregunta del post ? XDDD. Conozco a muchisimos q estan en tercero y no saben hacer la O con un canuto, no por mucho madrugar amanece mas temprano xDD.

El sdk de DX ademas de un monton de ejemplos trae una ayuda fabulosa tipo MSDN. Yo me baje el SDK y me parece bastante mejor q el sdk de opengl xDDD.  Por cierto el book del q hablas es red no oranje :D.

saludos

----

yo soy de kas naranja y tu?
Título: CAMARA FPS DX9
Publicado por: x-alien en 15 de Enero de 2003, 06:33:20 PM
                                no dije k tengo supendio algebra, recuerdo haber dicho k no es mi fuerte, y dije k evito las asignaturas k usan algebra.. lo mio es el calculo, y calculo es todo series, conicas e integrales k es lo k mas me gusta.
y en mi carrera lo k mas se usa son integrales.

termodinamica y transferencia de calor es un ejemplo de k es todo integrales =).

el libro k tengo yo es naranja, se distingir entre naraja y rojo, pero como hay tantos libross uff. =).
ademas no se pork me respondes asi... soy grafista,hace semanas k estoy programando y no tengo la agudeza de un tio k lleva tropocientos años programando como tu, si yo llevo menos de 1 mes programando... pork me vacilas?? lo considero como falta de respeto, no es para k me atakes, si vas a responder mal te callas y responde solo de manera constructiva.
ya has dicho varias veces k no tienes vida social k la perdistes cuando pillastes el pc... pero yo si tengo vida social, no pages tu amargura de insociable conmigo... no has escuchado k el pc y la falta de relacion social hace a la gente agresiva y chala... te recomiendo te des un garbeo.
las indirectas puedes metertelas por donde te kepa. ya estoy harto de gente k salta solo por ofender.
moderadores haced algo!

un saludo y k dios te ampare!


pd. rojo se te pone la cara de sulfurao cuando pongo algo, y veo k aun tienes hostilidades hacia mi, te da coraje k este en 3 de industriales?por lo k veo, pork esas indirectas lo dicen todo... si he captado mal tus ironias lo siento, pero como te dije habla llanamente.

pdd. no se pa k coño me sakas el offtopic k un tio k estudia industriales como yo debe hacerlo en un plis plas, cuando sabes k uno de industriales no sabe programar... luego si no sabe programar no sabe implementar sus conocimientos... tu intolerancia es impresionante, o mejor aun no has dejado las hostilidades hacia mi...
ponte a hacer algo de graficos y enseñalo para k yo te responda de la misma manera k tu sueles hacer... toscamente                                
Título: CAMARA FPS DX9
Publicado por: ethernet en 15 de Enero de 2003, 07:04:58 PM
offtopic: teniendo en cuenta q yo he hecho electronica y q llevo dos años programando (con opengl desde hace un poco menos de una año), no creo q este mucho mejor q nadie en algebra ni en programacion, pero solo pensando lo minimo (cosa q cualquier ingeniero deberia saber hacer) se puede sacar tu pregunta.

Por lo demas me he limitado a contestar a todos, no solo a ti x-alien(no veo el porq de este  post  con tan mala leche, creo q has malinterpretado mis comentarios)

PD: yo ya he terminado la carrera, un consejo, aprovechad todo el tiempo de estudiante al maximo xDD.

saludos

----

Yo soy de kas naranja