Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Cómo implementais el zoom?

Iniciado por fiero, 01 de Enero de 1970, 01:00:00 AM

« anterior - próximo »

fiero

                                Yo utilizo lo siguiente, meto los valores del zoom en la matriz de proyección:


D3DMATRIX zoom = D3DMATRIX(1*m_camara->zoom,0,0,0
  ,0,1*m_camara->zoom,0,0,0,0, 1*m_camara->zoom,0,0,0,0,1);
D3DMath_MatrixMultiply(m_matProjec, m_matProjec,zoom);


.
Lo que pasa con eso es que al calcular el frustum, cuando el zoom es superior a 1.0 desaparece toda la imagen, o sea que se sale toda del frustum.

Esto me lleva a la siguiente cuestión, resulta que siempre me habia pasado que al renderizar con DX me desaparecia la imagen al aumentar el zoom más de 1.0, ¿quiere esto decir que DX implementa el frustum a nivel de triangulos internamente?
Usaba esto con DX7:


m_pd3dDeviceActual->DrawIndexedPrimitive( D3DPT_TRIANGLELIST
  ,D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_DIFFUSE|D3DFVF_TEX0|D3DFVF_TEX1
  ,m_p3D, m_nump, m_indice, m_numindices,0);


un saludo


[ Este Mensaje fue editado por: fiero el 2002-06-08 22:35 ]                                
www.videopanoramas.com Videopanoramas 3D player

_Grey

                               
Me meto en terreno ageno..

pero no seria mejor y mas real aplicar el zoom jugando con el valor del angulo de vision?                                

fiero

                                No entiendo lo del ángulo de visión. Lo que yo hacia hasta ahora es multiplicar la matriz de proyección por una matriz de escala, así se aumentan o disminuyen todos los objetos de la escena. El problema es que ahora con el frustum no funciona :triste:

Estoy probando a escalar otra de las matrices, como la de cámara o la de vista, pero no acaba de quedar bien...

un saludo                                
www.videopanoramas.com Videopanoramas 3D player

_Grey

                                Me refiero a esto...

D3DXMatrixPerspectiveFovLH( &matrizProject, ANGULO_DE_VISION_EN_GRADOS * (6.28f/360.0f), 1.0f, 1.0f, 1000.0f );                                

Lord Trancos

                                Supongo que te refieres al tipico efecto del zoom de rifle de francotirador :riendo:



 D3DXMatrixPerspectiveFovLH(matProj, FOV, ASPECT, NEAR_PLANE, FAR_PLANE);
 D3DDEV8.SetTransform(D3DTS_PROJECTION, matProj);



yo lo hago asi. FOV es el valor que tienes que cambiar para hacer el Zoom . Basta con incrementarlo o disminuirlo (por ejemplo PI/4 seria algo normal, y PI/24 seria con zoom). ASPECT es la resolucion horizontal dividida entre la resolucion vertical (Ej: 640/480). Y el NEAR y el FAR plane delimitan la profundidad del campo de vision; NEAR es la distancia más cercana a la camara donde se cortaran los poligonos, y FAR la más lejana.
                               
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.

fiero

                                ok, gracias, con modificar el valor del FOV poniendo FOV/zoom funciona correctamente. Es que yo me habia emperrado en hacerlo con matrices para poder escalar los 3 ejes por separado, aunque ésto no tiene mucho sentido.

Otra cosa, como curiosidad, haciendo pruebas con las matrices he logrado ver si mi implementación del frustum culling funciona bien. Haciendo un escalado de la matriz de viewport se consiguen ver los triángulos que se pintan:


D3DMATRIX zoom = D3DMATRIX(0.5,0,0,0, 0,0.5,0,0, 0,0,0.5,0, 0,0,0,1);
D3DMath_MatrixMultiply(m_matViewport,zoom,m_matViewport);


saludos                                
www.videopanoramas.com Videopanoramas 3D player






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.