簡體   English   中英

如何在同一屏幕上繪制2d對象和3d對象

[英]How to draw 2d object and 3d object on the same screen

我試圖繪制一個按鈕,以便以后可以單擊它。 但是我遇到了一些問題,即當我在Draw2d函數中取消注釋選定的零件時,屏幕變黑,而我的3d對象消失了。 任何想法為什么以及如何解決這個問題? 我想添加帶有注釋部分的按鈕,該按鈕顯示在不同的區域(左,頂部屏幕),如果我像在此處對其進行注釋,則其顯示在我的3d對象的中心,並且沒有邊框。 只有標簽。

void Draw2D()
{
   glPushMatrix();
   glDisable(GL_DEPTH_TEST);
   //glMatrixMode(GL_PROJECTION);
   //glLoadIdentity();
   glOrtho(0, winw, winh, 0, -1, 1);
   //glMatrixMode(GL_MODELVIEW);
   //   glLoadIdentity();
   ButtonDraw(&MyButton);
   glPopMatrix();
   glEnable(GL_DEPTH_TEST);
}

這是我的源代碼: Source.cpp

我還要問是否有人知道如何創建輸入字段? 因為我還在學習,所以很容易獲得贊賞。

目前尚不清楚繪制循環的外觀,以及在其中設置矩陣,繪制3d材質和繪制2d材質的位置。 但是從到目前為止顯示的代碼中,我仍然可以解釋為什么會產生影響: 每種矩陣類型 (模型視圖,投影,紋理)都有一個矩陣堆棧。

您的代碼要做的是將當前選定的矩陣推入堆棧(可能是GL_MODELVIEW )。 然后,您對其應用正交矩陣。 由於矩陣在此處不太可能是恆等式,因此正交將無法獲得您期望的結果,並且圖像是錯誤的。 同樣,舊的投影矩陣仍保持不變,這將進一步影響變換。 然后,您可以還原原始矩陣,並且渲染保持不變。

如果取消注釋代碼,則先切換按鈕,然后切換,將正交矩陣設置為投影,並設置模型視圖的標識-但僅要還原模型視圖矩陣,並且投影矩陣仍將具有正交集合。

您真正需要做的是:

glMatrixMode(GL_PROJECTION);
glPushMatrix(); // save current projection matrix 
glLoadIdentity();
glOrtho(0, winw, winh, 0, -1, 1);
glMatrixMode(GL_MODELVIEW);
glPushMatrix(); // save current modelview matrix
glLoadIdentity();
// ... draw
glMatrixMode(GL_PROJECTION);
glPopMatrix(); // restore PUSHed projection matrix
glMatrixMode(GL_MODELVIEW);
glPopMatrix(); // restore PUSHed modelview matrix

假定glMatrixMode(GL_MODELVIEW)調用此glMatrixMode(GL_MODELVIEW)時,設置了glMatrixMode(GL_MODELVIEW) ,並將其還原到此狀態。 這也可以優化為

// assume `GL_MODELVIEW` is the current matrix mode
glPushMatrix(); // save current modelview matrix
glLoadIdentity();
glMatrixMode(GL_PROJECTION);
glPushMatrix(); // save current projection matrix
glLoadIdentity();
glOrtho(0, winw, winh, 0, -1, 1);
// ... draw
glPopMatrix(); // restore PUSHed projection matrix
glMatrixMode(GL_MODELVIEW);
glPopMatrix(); // restore PUSHed modelview matrix
// now `GL_MODELVIEW` is selected again

這稍微減少了調用開銷,但不如初始變體那么清晰。

暫無
暫無

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

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