所以基本上我正在用opengl/C++製作2D遊戲。我有一個紋理映射到它的四邊形,因爲我不能使用兩個圖像的非功率(或至少我不應該)我有一個圖像在兩個圖像的力量,我希望通過紋理映射去除多餘的圖像。OpenGL Y紋理座標表現奇怪
GLfloat quadTexcoords[] = {
0.0, 0.0,
0.78125, 0.0,
0.78125, 0.8789,
0.0, 0.8789
};
glGenBuffers(1, &VBO_texcoords);
glBindBuffer(GL_ARRAY_BUFFER, VBO_texcoords);
glBufferData(GL_ARRAY_BUFFER, sizeof(quadTexcoords), quadTexcoords, GL_DYNAMIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
這是我的紋理代碼。我知道沒有什麼特別的X座標(0.7256
)可以正常工作,並可以刪除圖像右側的多餘圖像。但Y座標不起作用。我調試了我的遊戲,發現正確的座標發送到着色器,但它不會映射。它似乎有時反過來工作,但它是非常不清楚的。
如果我給它一個像Y的座標20,它會重複多次,但仍然會在四方形的頂部留下一條小白線。我沒有想到它會是什麼。
其他細節:我試圖映射的圖像是800乘450,並且它被包裹在一個尺寸爲1024×512的圖像中。我將800的縱橫比縮放爲450.我懷疑這會使差異,但你永遠不知道!
謝謝你的時間。
編輯:這是一個什麼發生的例子。
這是完整的圖像(在X和Y 0到1)充分映射的藍色部分是200個像素高,完整圖像是300個像素高。
第二圖像是(Y中即0〜0.6666)映射到Y軸上的三分之二的圖像。這應該刪除頂部的白色,但這不是發生的事情。我不認爲這些座標是前面的,因爲我在網上獲得了幾個教程的映射。
定義「不起作用」。 *究竟*發生了什麼?紋理的分辨率是多少? – 2012-08-16 15:48:10
你知道OpenGL的座標是從**左下角(不是上)開始的,並且Y座標隨着你的增加而增加嗎?所以'(0.0,0.0)'=左下,'(0.0,1.0)'=左上。我這樣說是因爲你提到「逆向工作」。如果你正在翻轉紋理的y座標,可能會發生奇怪的事情。 – KillianDS 2012-08-16 16:00:39
我知道它從左下角開始,我已經解釋了這一點。你可以看到上面座標的順序。告訴我你的想法 – Constan7ine 2012-08-16 16:13:48