2010-05-29 5 views
5

이런 것들을 봤어. 이것이 가능한지 궁금 해서요. 내 응용 프로그램을 실행하면 이고 그 아래에있는 것은 무엇이든지 렌더링을 보여줄 것입니다.창문이없는 창문에 OpenGL 그리기

그래서 기본적으로 창없이 화면에 렌더링됩니다.

가능하거나 거짓말입니까?

참고 : Windows 및 C++에서이 작업을 수행하려고합니다.

+0

렌더링 결과와 함께 무엇을하고 싶습니까 : 어디에서 보여주고 싶습니까? 관련 : http://stackoverflow.com/questions/3191978/how-to-use-glut-opengl-to-render-to-a-file –

답변

4

응용 프로그램을 사용하여 다른 응용 프로그램의 윈도우를 그릴 수 있습니다. 원하는 창을 찾았 으면 HWND를 사용하고 그리기 위해 자신의 창처럼 사용할 수 있습니다. 그러나 그 창문은 당신이 이것을 한 것을 모르고 있기 때문에, 그 자체를 다시 그리려고 할 때 당신이 그렸던 것을 망칠 것입니다.

이 문제를 해결하는 데 매우 복잡한 방법이 있습니다. 그 중 일부는 창 "후크"를 사용하여 해당 창에 메시지를 가로 챌 수 있으므로 재 드로잉 할 수 있도록 다시 그려졌을 때 알 수 있습니다.

또 다른 옵션은 창에서 클리핑 영역을 사용하는 것입니다. 이렇게하면 창에 비정상적인 모양을 부여 할 수 있으며 그 뒤에있는 모든 것이 여전히 올바르게 보입니다.

데스크톱 배경 창 그리기를 인계 할 수있는 방법이 있으며 실제로 데스크톱을 사용할 수있는 동안 데스크톱 배경에 애니메이션과 물건을 그릴 수있는 응용 프로그램을 실제로 실행할 수 있습니다. 적어도 이것은 XP를 통해 가능했지만 Vista/Win7에서 변경된 것인지 확실하지 않았습니다.

이러한 옵션은 모두 시도하기에 더 많은 정보가 없으면 깊이 들어가기에는 너무 복잡합니다.

1

GetDesktopWindow()을 사용하면 HWND의 데스크톱을 사용할 수 있습니다. 그러나 이전 답변에서 (SoapBox), OS가 소유하고 있기 때문에 데스크톱을 엉망으로 만들 수 있습니다. 조심하십시오.

+0

예 (올바르게) 함께 일하는 것이 까다로울뿐입니다. 제 추측으로는 모든 프레임을 래스터 화 한 다음이 모든 것을 사용자 정의 모양의 윈도우로 사용할 수는 있지만 다소 느려질 수 있습니다. 나는 데스크탑에서 png를 그리기 전에 GDI를 사용했지만 애니메이션을 만드는 것은 약간 힘들지만 GDI로 래스터 화 아이디어를 시도하고 모든 것을 png로 렌더링하고 GDI와 함께 사용하려고합니다. SoapBox와 gbrandt에 도움을 주셔서 감사합니다. – Yonathan

0

저는 데스크탑 배경에서 이것을 달성하기 위해 몇 년 전에 오픈 소스 프로젝트를 작성했습니다. 그것은 Uberdash라고합니다. 창 계층을 따르는 경우 데스크톱은 일종의 "백그라운드"컨테이너에있는 창에 불과합니다. 그런 다음 주 용기와 앞 용기가 있습니다. 전면 컨테이너는 윈도우가 전체 화면 또는 "항상 맨 위"가되는 방식입니다. Aero 합성을 사용하여 전면 컨테이너에 알파가있는 윈도우를 렌더링 할 수 있지만 이벤트를 하단 창으로 전달해야 할 수 있습니다. 그것은 예쁘지 않을 것이다.

또한 일부 비디오 카드에는 오버레이/언더 레이라고하는 기술이 있습니다. 이제는 오버레이에 직접 렌더링 할 수있었습니다. GPU는 메인 메모리에 간섭없이 직접 적용 할 수 있습니다. 따라서 화면 캡처를 수행하더라도 오버레이/언더 레이가 화면 캡에 표시되지 않습니다. 불행히도 MS는 Vista에서이 기술을 금지했습니다 ...