Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





CAMARA FPS DX9

Iniciado por x-alien, 11 de Enero de 2003, 05:00:40 AM

« anterior - próximo »

Lord Trancos

                               
CitarPD: la cámara como tal no existe

No hay cuchara .... xDDDDDD

Nop, ahora en serio. Tienes toda la razon ^_^                                
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.

ethernet

Bueno, en D3d hay 3 matrices no ? ademas de la modelview y la de proyeccion cual teneis?

saludos

x-alien

                                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.                                
oy Grafista, no Programador, aun así programo mejor que un 'programador'

Grugnorr

                                X-Alien, las colisiones, octrees y demás cosas que mencionas no tienne nada que ver con la Api gráfica que uses.                                
hat the hells!

x-alien

                                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                                
oy Grafista, no Programador, aun así programo mejor que un 'programador'

Mars Attacks

                                ¿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.                                

ethernet

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.

Findeton

                                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?                                

Mars Attacks

                                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.                                

fiero

                                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                                
www.videopanoramas.com Videopanoramas 3D player

x-alien

                                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                                
oy Grafista, no Programador, aun así programo mejor que un 'programador'

ethernet

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

x-alien

                                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!                                
oy Grafista, no Programador, aun así programo mejor que un 'programador'

Mars Attacks

                                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).                                

CoLSoN2

                               
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 ;-)                                
Manuel F. Lara
Descargar juegos indie  - blog sobre juegos indie y casual
El Desarrollo Personal.com  - blog sobre productividad, motivación y espíritu emprendedor






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.