Más de Direct3D

Buenas,
tras resolver lo del ratón, ha surgido otro problema: Ahora hay que meter dos ventanas en 3D dentro de una ventana de aplicación (dos framework).
La idea está en que ambos se rendericen a la vez, pero con puntos de vista distintos (o iguales, supongo que eso será lo de menos). ¿Alguna idea?
Actualmente hemos duplicado todo! (Es una burrada) y además solo funciona el segundo que se ha creado.
Se que existe un método de D3DDevice, el Set Render Target, que permite que varíes en que dDraw Surface vas a volcar el render, ¿se podría usar para esto?
Nada más, muchas gracias
Víctor Corrales
Facultad de Informática, UPM Madrid

1 respuesta

Respuesta
1
No estoy seguro, pero podéis probar esto:
Renderizados a la primera ventana ( BeginScene ... EndScene), y luego
cambiar la posición del la cámara y la ventana donde se va ha hacer
visible la segunda vista. Entonces creo que se debería tener
dos superficies primarias esto es:
// creamos la superficie primaria
DDSURFACEDESC2 ddsd;
ZeroMemory(&ddsd,sizeof(DDSURFACEDESC2));
ddsd.dwSize=sizeof(DDSURFACEDESC2);
ddsd.dwFlags=DDSD_CAPS;
ddsd.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE;
res = m_pDD7->CreateSurface(&ddsd,&m_pddsFrontBuffer1,NULL);
// creamos objeto clipper
LPDIRECTDRAWCLIPPER pClipper;
res = m_pDD7->CreateClipper(0,&pClipper,NULL);
if ( FAILED(res))
{
return DDERR_OUTOFMEMORY;
}
// asociar el objeto clipper a la ventana
pClipper->SetHWnd(0,m_hWnd1);
m_pddsFrontBuffer->SetClipper( pClipper );
m_pddsFrontBuffer1 ==> para una ventana 1
y luego otra superficia primaria para la ventana dos.
// creamos la superficie primaria
DDSURFACEDESC2 ddsd;
ZeroMemory(&ddsd,sizeof(DDSURFACEDESC2));
ddsd.dwSize=sizeof(DDSURFACEDESC2);
ddsd.dwFlags=DDSD_CAPS;
ddsd.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE;
res = m_pDD7->CreateSurface(&ddsd,&m_pddsFrontBuffer2,NULL);
// creamos objeto clipper
LPDIRECTDRAWCLIPPER pClipper;
res = m_pDD7->CreateClipper(0,&pClipper,NULL);
if ( FAILED(res))
{
return DDERR_OUTOFMEMORY;
}
// asociar el objeto clipper a la ventana
pClipper->SetHWnd(0,m_hWnd2);
m_pddsFrontBuffer->SetClipper( pClipper );
Luego a la hora de enviar la información del renderizado de
Device3d de la backsurface a la frontsurface.
Para cuando enviamos la ventana 1
res = m_pddsFrontBuffer1->Blt(&m_rcScreenRect,
m_pddsBackBuffer,
NULL,DDBLT_WAIT,NULL);
Para cuando enviamos la ventana 2
res = m_pddsFrontBuffer2->Blt(&m_rcScreenRect2,
m_pddsBackBuffer,
NULL,DDBLT_WAIT,NULL);
No estoy muy seguro si esto funcionara y si ira lo suficientemente
rapido pero bueno, es una idea.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas