Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Generación de frustum a partir de portales en 3D

Iniciado por jal, 16 de Junio de 2003, 02:44:55 PM

« anterior - próximo »

vincent

 Muy buenas,

he estado repasando my rutina de portal rendering y resulta que estava programada horrorosamente.

Os recuerdo lo que hago: Mantengo como variable del clipper un rectángulo que es la caja contenedora en 2D del ultimo portal por el que ha pasado. Así, la rutina de recalcular el frustum ( no en la primera iteración que se hace con la típica función que todo el mundo utiliza ) sinó en las siguientes, lo que hace es passar esta caga 2D a coordenadas de mundo y utilizar sus extremos, junto con la posición de la camara, para calcular el nuevo frustum.

El código viene a ser este:


               D3DXVECTOR3 pMaxXMaxY, pMinXMinY, pMinXMaxY, pMaxXMinY;
D3DXVECTOR3 p00(actualRect.m_iXMin, actualRect.m_iYMin, 0.0f);
D3DXVECTOR3 p01(actualRect.m_iXMin, actualRect.m_iYMax, 0.0f);
D3DXVECTOR3 p10(actualRect.m_iXMax, actualRect.m_iYMin, 0.0f);
               D3DXVECTOR3 p11(actualRect.m_iXMax, actualRect.m_iYMax, 0.0f);

D3DXVec3Unproject(&pMinXMinY, &p00, &clip->pViewport, &clip->proj, &clip->view, &clip->world);
D3DXVec3Unproject(&pMinXMaxY, &p01, &clip->pViewport, &clip->proj, &clip->view, &clip->world);
D3DXVec3Unproject(&pMaxXMinY, &p10, &clip->pViewport, &clip->proj, &clip->view, &clip->world);
D3DXVec3Unproject(&pMaxXMaxY, &p11, &clip->pViewport, &clip->proj, &clip->view, &clip->world);

frustum[4] = clip->frustum[4];
frustum[5] = clip->frustum[5];

// Right plane
D3DXPlaneFromPoints(&frustum[0], &m_vPos, &pMaxXMaxY, &pMaxXMinY);
D3DXPlaneNormalize(&frustum[0], &frustum[0]);

// left plane
D3DXPlaneFromPoints(&frustum[1], &m_vPos, &pMinXMinY, &pMinXMaxY);
D3DXPlaneNormalize(&frustum[1], &frustum[1]);
 
// bottom plane
D3DXPlaneFromPoints(&frustum[2], &pMinXMinY, &pMaxXMinY, &m_vPos);
D3DXPlaneNormalize(&frustum[2], &frustum[2]);
 
// top plane
D3DXPlaneFromPoints(&frustum[3], &m_vPos, &pMaxXMaxY, &pMinXMaxY);
D3DXPlaneNormalize(&frustum[3], &frustum[3]);


El problema viene que ponga el orden que ponga en los puntos en el D3DXPlaneFromPoints el plano siempre me hace el culling hacia el mismo lado. Alguien tiene idea de lo que me está pasando?

Merci!

VinCenT.
Desarrollo en .Net y metodologías http://devnettips.blogspot.com

Pogacha

 A que le llamas orden? v0 - v1 - v2 = v1 - v2 - v0 = v2 - v0 - v1
La verdad que de directx ... cero.
Mas que eso nada.

vincent

 En principio la normal del plano depende del orden con que le pases los vértices a la función. Lo que me pasa es que ponga el orden que ponga, el clipping me lo hace siempre en la misma dirección.
Desarrollo en .Net y metodologías http://devnettips.blogspot.com

vincent

 Bueno, ya está todo arreglado. Mi visual necesita que lo reinicien de vez en cuando. Ahora todo funciona correctamente.

Un saludo!

VinCenT.
Desarrollo en .Net y metodologías http://devnettips.blogspot.com

Pogacha


vincent

 La verdad es que no es la primera vez que una cosa que no va, reiniciando el visual funciona despues....  :blink:  
Desarrollo en .Net y metodologías http://devnettips.blogspot.com

Pogacha

 Yo tengo basta experiencia en eso, inclusive cada una o dos horas reinicio la maquina.
Saludos

Mars Attacks

 El Halcón Milenario tenía menos problemas que ciertos programas (y sistemas operativos).

Pogacha

 De todos modos fijate de que no hallan quedado punteros sueltos.
Pasa que al VS no lo pilotea Hand Solo (veo un fan de SW?)
Saludos

Mars Attacks

 Creo que tenemos un concepto distinto de lo que significa un "Hand Solo"  (twist)
(Es "Han Solo", y aquí me parece que todos son fans de SW, es un requisito imprescindible para dedicarse a esto).

Saludos onanistas.

Pogacha







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.