Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Cositas de las D3D

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

« anterior - próximo »

Lord Trancos

                                Creo que Ithaqua se referia a que hay que apurar al máximo los valores. Es decir, poner el near plane todo lo lejos posible y el far todo lo cerca posible, PERO por supuesto siempre siendo NEAR < FAR.                                
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.

Malandrin

                                  Hola, pos más o menos hago esto:

//Para iniciar el 3d3:

m_pD3D = Direct3DCreate8(D3D_SDK_VERSION);

m_pD3D-> GetAdapterDisplayModeD3DADAPTER_DEFAULT, &d3ddm)

ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = true;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = d3ddm.Format;
d3dpp.EnableAutoDepthStencil = true;
d3dpp.AutoDepthStencilFormat = D3DFMT_D16;

m_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, d3dpp, &m_pD3DDevice);


//Lo del renderstate
SetRenderState(D3DRS_CULLMODE, D3DCULL_CW);
SetRenderState(D3DRS_ZENABLE, TRUE);
SetRenderState(D3DRS_LIGHTING, FALSE);

// Al dibujar
Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(255,255,255), 1.0f, 0);
BeginScene();

// Origen camara vale (0.f, 0.f, -2000.f) y
// destino camara vale (0.f, 0.f, 0.f)

D3DXMatrixLookAtLH(&matView, &m_vec3OrigenCamara, &m_vec3DestinoCamara, &D3DXVECTOR3(0.0f, 1.0f, 0.0f));

SetTransform(D3DTS_VIEW, &matView);

// Pongo 1000.f pal far, pero he probao con
// valores mas cercanos y mas lejanos

D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI/4, 1.0f, 0.f, 1000.0f);

SetTransform(D3DTS_PROJECTION, &matProj);

EndScene();
Present(NULL, NULL, NULL, NULL);

Los modelos los cargo de un fichero generado por un plugin del max que va bien. Todos las caras llevan sentido CW. No desaparecen siempre las mismas caras, es decir en el momento 0 se ve la cara frontal (p.e.), giro un poco la camara y ya desaparece este cara.

Ufff, q coñazo que he metido... un saludo y gracias.!

P.D.: Por cierto, cual es la mejor forma de tener almacenado un modelo? yo ahora tengo un array con los vertices, otro con las texturas y por cada textura un array con las caras de esas texturas, luego al dibujar voy componiendo y dibujando triangulo a triangulo (¿una forma estúpida?). Lo he hecho de esta manera para no duplicar los vertices cuando sus valores U,V son distintos... por ello repregunto otra vez: cual es la forma más rapida para hacer todo esto?? (pintar modelos:). Gracias otra vez.                                

Lord Trancos

                               
Citar
D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI/4, 1.0f, 0.f, 1000.0f);  

no estoy seguro pq no tengo el sdk a mano, pero yo diria que tienes el near plane a 0! :agh:

Ponle por lo menos un 1 o 0,5 ...

D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI/4, 1.0f, 1.f, 1000.0f);

En cuanto a la mejor forma de dibujar modelos, no existe una unica forma. Depende de lo que quieras hacer, como sea el modelo, etc.... se suele decir que lo mejor es usar primitivas indexeadas con triangle-strips (si no recuerdo mal)... pero esto no es siempre posible o recomendable...

Intenta evitar siempre el enviar los poligonos de 1 en 1.... lo mejor es enviarlos por lotes, evita los cambios de estado (render states) y si usas TnL HAL evita tambien cambiar de Stream Source (VB switching)

Ademas, existen bastantes diferencias entre HAL y TnL HAL de modo que lo que en el primero puede ser un metodo optimo, en el segundo puede ser una barbaridad.... (como el uso de ProcessVertices por el que yo preguntaba en otro hilo)
_________________
SaludoteZ de Lord Trancos!
www.dxlab.tk - programación de DirectX con Delphi.


[ Este Mensaje fue editado por: Lord Trancos el 2002-05-22 18:36 ]                                
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.

Ithaqua

                                Loover: me refería a apurarlos lo más posible, pero siendo near < far claro.

Malandrín: pon el near a 1.0f

                               
thaqua^Stravaganza
http://ithaqua.stravaganza.org

Malandrin

                               
 Iujujuuuuuuuiiiii... pues si, esa era la solución, cambiar el near a 1.f, ahora ya va bien, gracias a todos!!.                                






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.