2012-12-29 17 views
1

我創建在OpenGL應用程序我使用glOrtho()與起源於左上角,其中:輪廓字體出現倒置 - glOrtho()設置不當

glOrtho(0.0, width, height, 0.0, 0.0, 1.0); 

我還沒有找到它直到我嘗試渲染輪廓字體時纔出現錯誤,這種字體看起來顛倒了。在搜索了關於它的信息之後,我遇到了一個網站,在那裏我讀到了我的起源應該從左下角開始。

我知道OpenGL正在使用左下角的原點,但是我發現使用左上角更容易。我只是不得不水平翻轉所有紋理,一切都很好。但是,是的,這些問題出現在那些輪廓出現顛倒的輪廓字體上。

現在要改變原點,我不得不改變一堆代碼,所以如果沒有必要的話,我真的想避免這種情況。

所以我的問題是: 我的左上角的方法是非常錯誤的嗎?如果沒有,有沒有辦法讓這些輪廓字體正確顯示?

+1

從左上角的原點出發是錯誤的,因爲它不是默認值。圖書館和文檔會希望你有默認的,只要你不會,你會遇到像你現在一樣的問題。 –

+1

添加到那個評論中,*一旦你真的知道你在做什麼*,它就會停止錯誤。如果你知道該期待什麼,不要堅持默認值就好。而且不需要其他人的簡單易用的答案。 –

回答

4

您正在渲染該字體的某處,對吧? 如何渲染它,以及當時阻止您應用垂直鏡像變換​​矩陣的是什麼?

I.e.如果你這樣做是老式的,過時的方式:如果您使用的着色器

glScalef(1, -1, 1); 
glCallList(font); // Or whatever you are doing to render the outline font 

或者,有你的頂點着色器做這樣的事情:

Vec4 position = aPosition; 
    position.y = -1 * position.y; 
    gl_Position = aMVPMatrix * position 

這一切是僞代碼,當然。

+0

謝謝你的回答! –

1

通常情況下,您可以通過使用適當的紋理矩陣來修復此問題,而無需更改您的數據。

+0

但是什麼紋理矩陣與字體有關? –

+0

我假設你使用紋理繪製文本(例如,將字體渲染爲紋理,然後用適當的紋理座標繪製一些紋理矩形)。從你的評論我認爲情況並非如此? – ThomasD

+0

這不是,但謝謝你的回覆。 :-) –

2

現在要改變原點的地方,我不得不改變一堆代碼,所以如果沒有必要,我真的想避免這種情況。

您可以隨時更改投影。在左下角使用原點作爲文字,而在左上角使用原點作爲其他所有內容。儘管如此,您必須調整文本的初始位置,但這並不是很難考慮。或者,你可以簡單地應用一個局部比例(1,-1,1);將文本顛倒(取決於您的文本庫,這可能會干擾其內部轉換設置)。

+0

謝謝你的回答! –