2012-06-19 37 views
5

我在OpenGL(更具體地說是lwjgl)中製作GUI。我努力研究不同的做法,但我很難找到我想要的東西。我不想使用任何外部庫(只有使用OpenGL構建的庫,甚至試圖遠離使用GLUT),我希望它支持任何支持OpenGL的東西(例如,幀緩衝區對象在舊版本中不起作用圖形卡)。OpenGL在可滾動面板中繪製部分對象

我正在製作一個帶可滾動面板作爲組件的3D GUI。問題是我不知道如何繪製一個局部的GUI組件而不做很多的計算來渲染它的一部分。我使用OpenGL原語製作組件,而不是紋理。我希望有一個簡單的方法來做到這一點,如使用多個視口。我真的不明白什麼視口是什麼。

簡而言之:我需要將可滾動面板作爲與其他GUI組件重疊的組件(因爲它將是一個下拉菜單),並且不允許我面板中的任何組件都繪製在面板外。

回答

6

如果您只是想防止繪製矩形區域之外的像素(我認爲這就是您要求的),那麼glScissor就是您正在尋找的內容。

在lwjgl中,您可以在org.lwjgl.opengl.GL11中找到該函數。

+1

您也可以利用GL_GLIP_PLANE,它們將允許您在模型空間中剪輯(以防您的GUI座標與視口像素不匹配)。 – Kromster

+0

謝謝,那就是我正在尋找的 – axelrod360

1

如果要在屏幕上的固定區域內滾動較大的場景,最簡單的方法是隻修改滾動位置的投影矩陣並重新繪製場景。如果您正在使用gluPerspective設置投影矩陣,則必須將其轉換爲直接調用glFrustum;如果你使用glOrtho,它會更直接。

請記住,「滾動」透視圖沒有一個正確的方式來完成任務 - 它取決於您想要達到的效果以及在整個視口邊緣附近想要的特定類型的失真。