2015-05-20 125 views
1

我有現有的代碼(OS X,OBJ-C,NSOpenGLView)調用:如何解決我棄用的gluOrtho2D()?

gluOrtho2D(0.0, newSize.width, newSize.height, 0.0); 

它正常工作,只是我得到一個棄用功能警告,敦促我使用GLKMatrix4MakeOrtho()代替。好的 - 但是怎麼樣?我似乎甚至找不到該功能的存在;我包括:

#import <OpenGL/gl.h> 
#import <OpenGL/glu.h> 

和Xcode不知道該名稱的功能。我的OpenGL參考手冊沒有提及它,甚至沒有任何提及GLK前綴的功能;那裏發生了什麼?然後如果我設法找到這個函數,並且包含正確的頭文件和鏈接,而不是我需要鏈接的東西,那接下來是什麼 - 對GLKMatrix4MakeOrtho()來說,和我的gluOrtho2D()函數做同樣的事情會是什麼?我試着谷歌搜索,並發現許多點擊顯示其他人得到相同的棄用警告,但我找不到任何人說如何解決它...

回答

3

的包括你需要的GLKMatrix4MakeOrtho()是:

#include <GLKit/GLKMatrix4.h> 

然後調用具有相同參數的功能,您將與glOrtho()使用,例如:它是如何使用依賴於

GLKMatrix4 orthoMat = GLKMatrix4MakeOrtho(-1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f); 

一種你使用的OpenGL。用於與傳統矩陣堆棧固定功能時,可以使用例如:

glLoadMatrix(orthoMat.m); 

隨着可編程管線中,一般會加載它作爲均勻:

glUniformMatrix4fv(loc, 1, GL_FALSE, orthoMat.m); 
+0

上下文是: glViewport(0,0,newSize.width,newSize.height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0,newSize.width,newSize.height,0.0); 上一位評論員@duskwuff表示GLKMatrix4MakeOrtho不會「插入」代碼這樣的代碼,我需要將代碼升級到OpenGL 3.2以使其工作。你同意嗎?我不明白你對他答覆的評論;我對OpenGL很陌生。 (有沒有辦法讓我的評論格式更好?) – bhaller

+0

我不同意以前的答案的那部分。你應該可以用上面的'GLKMatrix4MakeOrtho()'/'glLoadMatrix()'來代替'glLoadIdentity()'/'gluOrtho2D()'調用。當然有相應的論點。別擔心我的其他評論,那更多是關於技術性的。 –

+0

好的,我切換到'GLKMatrix4MakeOrtho()'/'glLoadMatrix()',它看起來像沒有其他修改我的代碼工作。警告消失了。唯一的問題是它看起來像函數被命名爲'glLoadMatrixf()',而不是'glLoadMatrix()' - 或者我誤解了?無論如何,謝謝! – bhaller

1

哇,這是一個非常不尋常的建議。 GLKMatrix4MakeOrtho()不是可以直接替換爲gluOrtho2D();如果您將您的應用程序移植到OpenGL 3.2或更高版本,則此功能將用於此處。然而,由於OpenGL 3.2不支持早期版本的OpenGL中的任何即時模式API(例如glBegin()),因此該端口將比完成這一調用要複雜得多。底線是,只要您繼續使用OpenGL 1.x/2.x API,您將需要忽略此警告。

+1

'在glBegin()'是無關無論您是否使用固定功能管道。它是即時模式渲染API的一部分。對於支持它的版本(例如OpenGL 2.1或3.x兼容性配置文件)中的可編程管道,它可以很好地工作。人們經常將立即模式渲染和固定管道放入同一個桶中,因爲它們同時被棄用,但它們實際上沒有關係。例如ES 1.1有一個固定的管道,但沒有即時模式渲染。 –

+0

@ReetoKoradi將「固定功能」更改爲「即時模式」;腦屁。這就是說,如果我沒有弄錯OpenGL 3.2(GLKit需要)完全不支持兼容性配置文件?所以這是一個有爭議的問題。 – duskwuff

相關問題