Hi,
I'm implementing the IDBuffer technique for rectangle selection of
visible objects.
I have a problem with Z Sorting of the bufffer grabbed from my
PassiveWindow
see screenshots :
http://www.exotk.org/OpenSG/mainview.png
http://www.exotk.org/OpenSG/idbuffer.png
even if I use occlusion for the main view and the idbuffer view, it
does not work (in my main view, I don't use occlusion culling)
any idea ?
thanks a lot,
Stephane
the window is created with :
_hwnd = CreateWindow("STATIC","", WS_OVERLAPPEDWINDOW,0, 0, _w,
_h, HWND_DESKTOP, 0, GetModuleHandle(NULL), NULL);
the pfd is
PIXELFORMATDESCRIPTOR pfd;
memset(&pfd, 0, sizeof(pfd));
pfd.nSize = sizeof(pfd);
pfd.nVersion = 1;
pfd.dwFlags =
PFD_DRAW_TO_WINDOW |
PFD_SUPPORT_OPENGL |
PFD_DOUBLEBUFFER;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.iLayerType = PFD_MAIN_PLANE;
pfd.cDepthBits = 16;
the "grab" code is :
void init()
{
OSG::SolidBackgroundPtr _solidBkg =
OSG::SolidBackground::create();
beginEditCP(_solidBkg);
_solidBkg->setColor(OSG::Color3f(0,0,0));
endEditCP(_solidBkg);
_ID_viewport = OSG::Viewport::create();
beginEditCP(_ID_viewport);
_ID_viewport->setBackground(_solidBkg);
_ID_viewport->setSize(0,0,1,1);
endEditCP(_ID_viewport);
_window = OSG::PassiveWindow::create();
_window->init();
_window->deactivate();
_window->addPort(_ID_viewport);
_ID_renderAction = OSG::RenderAction::create();
_ID_renderAction->setAutoFrustum(true);
}
void grab()
{
if ( _hwnd )
{
RECT r;
GetWindowRect(_hwnd,&r);
if ( abs(r.top - r.bottom) != _h || abs(r.right -
r.left) != _w )
{
SetWindowPos(_hwnd, NULL, 0, 0, _w, _h,
SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
}
}
else
{
if ( !_CreateWindow() )
return;
}
_window->activate();
wglMakeCurrent(_hdc,_hGLContext);
// Setup the GrabForeground
_grabber = OSG::GrabForeground::create();
beginEditCP(_grabber);
OSG::ImagePtr img = OSG::Image::create();
beginEditCP(img);
img->set(GL_RGBA,_w,_h);
endEditCP(img);
_grabber->setImage(img);
_grabber->setAutoResize(false);
_grabber->setActive(false);
endEditCP(_grabber);
// Putting it to the viewport
_window->getPort(0)->getMFForegrounds()->push_back(_grabber);
// We toggle the switch material so as to render identification
colors.
switchToIDBuffer();
beginEditCP(_grabber);
_grabber->setActive(true);
endEditCP(_grabber);
// We render to the grabber
_window->render(_ID_renderAction);
glFlush();
SwapBuffers(_hdc);
beginEditCP(_grabber);
_grabber->setActive(false);
endEditCP(_grabber);
// We get the data back
if(_grabber->getImage()->getData() != NULL)
{
//#ifdef _DEBUG
_grabber->getImage()->write("C:\\idbuffer.png");
//#endif
_ID_buffer = _grabber->getImage()->getData();
}
// We toggle to standard materials
switchToNormal();
// we remove the Grabber
OSG::MFForegroundPtr::iterator i
=_window->getPort(0)->getMFForegrounds()->find(_grabber);
if( i != _window->getPort(0)->getMFForegrounds()->end() ){
_window->getPort(0)->getMFForegrounds()->erase(i);
}
wglMakeCurrent(NULL,NULL);
_window->deactivate();
}
______________________________________________________________
Reputation Resources Results
http://www.rwdi.com
______________________________________________________________
This communication is intended for the sole use of the party to whom it
is addressed and may contain information that is privileged and/or
confidential. Any other distribution, copying or disclosure is strictly
prohibited. If you have received this e-mail in error, please notify us
immediately by telephone (1-519-823-1311) and delete the message without
retaining any hard or electronic copies of same.
RWDI scans outgoing emails for viruses, but makes no warranty as to their
absence in this email or attachments.
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Opensg-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensg-users