我想提請使用OpenGL ES 2.0的四邊形。 我的頂點着色器看起來是這樣的:的OpenGL ES 2.0:矩陣乘法問題
uniform mat4 mvp;
attribute vec4 position;
attribute vec4 color;
varying vec4 colorVarying;
void main()
{
gl_Position = mvp * position;
colorVarying = color;
}
如果我使用這些頂點:
-1.0f, -1.0f, 0.f, 1.f,
1.0f, -1.0f, 0.f, 1.f,
-1.0f, 1.0f, 0.f, 1.f,
1.0f, 1.0f, 0.f, 1.f
這個矩陣(列優先的順序一樣,都屬於以下矩陣):
0.5,0,0,0,
0, 1,0,0,
0, 0,1,0,
0.5,0,0,1
四覆蓋視口的右半部分。事實上,如果我乘這兩個矩陣我得到的頂點
0, -1, 0, 1,
1, -1, 0, 1,
0, 1, 0, 1,
1 , 1, 0, 1,
,如果我使用這些頂點和單位矩陣,我得到了相同的結果。所以看來乘法是正確的。現在
,如果我乘這些頂點(A):
-100.0f, -100.0f, 301.0f, 1.0f,
100.0f, -100.0f, 301.0f, 1.0f,
-100.0f, 100.0f, 301.0f, 1.0f,
100.0f, 100.0f, 301.0f, 1.0f,
這個矩陣(M):
0.4170 0 0 0
0 0.5560 0 0
0 0 -1.2220 -1.0000
0 0 444.4440 0
我得到這些頂點(B):
0.2075, 0.2766, -0.9892, 1.0000
-0.2075, 0.2766, -0.9892, 1.0000,
0.2075, -0.2766, -0.9892, 1.0000,
-0.2075, -0.2766, -0.9892, 1.0000,
如果我通過我的着色器在B頂點和單位矩陣,它呈現在視口中中間的小矩形。但是如果我將它傳遞給A頂點和M矩陣,它什麼都不呈現。
發生了什麼事?
嗯...現在我不知道接受哪個答案。該解決方案原來只是將右下象限乘以-1,而不是整個矩陣。但是,您可能會說正確的是否定的w是問題。我認爲這是三角形是片面的,但是當我試圖繪製一個單一的三角形時,無論我按什麼順序列出頂點,它都會被繪製出來,所以這似乎不是問題。 – LaC