簡體   English   中英

在C ++ .NET中使用OpenGL和在視口上繪畫

[英]Using OpenGL in C++.NET and Painting Over the Viewport

我正在嘗試創建一個使用OpenGL的.NET應用程序。 我需要有4個視口,但不是創建4個控件並同步它們,我將有1個控件分成4個視口。 我想在OpenGL控件上繪制線條以直觀地分割視口。 我正在使用自定義控件,為了實現這一點,我在基本UserControl的頂部有兩個面板。 中間的面板是OpenGL面板,其中渲染了OpenGL輸出。 頂部的面板是我要繪制視口分隔線的位置,它具有透明度,因此我可以看到它下方的面板。

問題是,當OpenGL視口加載時(它在一個單獨的線程中,所以它只是黑色幾秒鍾),它會覆蓋整個UserControl,而不管它的z層。 如果我縮小OpenGL面板,我可以看到它仍然僅在面板上繪制,但它並不關心它上面的內容 - 它只是掩蓋了它。

為什么會這樣? 如果你想看看我是如何創建OpenGL上下文等的, 你可以看到我遵循的教程 我正在通過Panel的Handle,而不是UserControl。 custrom控件中的所有控件是否共享相同的設備上下文?

使用glViewportglScissor的組合並啟用GL_SCISSOR_TEST將窗口拆分為視口。 使用OpenGL本身繪制視口分割器。 您可以隨時更改使用的投影。 因此,對於分割器使視口覆蓋整個窗口,繪制分割器,然后將視口限制到窗格並使用剪刀來防止事物“泄漏”到窗外。

OpenGL不使用.net窗口表單在屏幕上繪制,它直接與圖形硬件交互。 實現你想要的東西的一種方法是將opengl輸出渲染到屏幕外紋理/幀緩沖區(fbo),然后以正常的.net UI訪問幀緩沖區。 我建議您只使用OpenGL調用繪制視口分隔符,然后根據.net UI元素進行旁路。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM