2012-07-07 135 views
1

所以我試圖呈現兩個移動的四邊形,每個都在不同的位置。我的着色器儘可能簡單(頂點僅由模型視圖投影矩陣轉換,只有一種顏色)。OpenGL ES 2.0(Android)中的2D渲染(特別是矩陣)

每當我嘗試渲染一些東西時,我最終只會看到一些顏色!我只在OpenGL中完成3D渲染的工作,所以我遇到了2D問題。

這裏是我的基本的渲染循環,簡化了一下(我使用android.opengl.Matrixprogram提供的矩陣操作方法是我創建的只是調用GLES20.glUniformMatrix4fv()自定義類):

Matrix.orthoM(projection, 0, 0, windowWidth, 0, windowHeight, -1, 1); 
program.setUniformMatrix4f("Projection", projection); 

在這一點上,我渲染四邊形(這是每個四重複):

Matrix.setIdentityM(modelview, 0); 
Matrix.translateM(modelview, 0, quadX, quadY, 0); 
program.setUniformMatrix4f("ModelView", modelview); 
quad.render(); // calls glDrawArrays 

和我看到的全部是每個四邊形的顏色的條子!我在這裏結束了智慧,我嘗試了所有我能想到的事情,而且我正在尖叫着我的電腦,並在整個房間裏甩手機。任何人都有指點?我使用ortho錯誤嗎?我100%肯定我正在渲染Z值爲0的所有東西。我嘗試使用frustumM而不是orthoM,這使得我可以看到四邊形,但是隻要它們移動就會完全傾斜,這很有意義如果我正確理解平截頭體的工作方式(無論如何,它對3D渲染更爲重要)。

如果這有什麼差別,我定義我的視口

GLES20.glViewport(0, 0, windowWidth, windowHeight); 

windowWidthwindowHeight是被pased到orthoM相同的價值觀

編輯:這可能是值得一提的是, android.opengl.Matrix方法將偏移量作爲第二個參數,以便可以將多個矩陣推入一個數組中,以便第一個0用於

另一個編輯:供參考,這是我的頂點着色器代碼:

uniform mat4 ModelView; 
uniform mat4 Projection; 

attribute vec4 vPosition; 

void main() { 
    mat4 mvp = Projection * ModelView; 
    gl_Position = vPosition * mvp; 
} 

另一個編輯:我試着換Projection * ModelViewModelView * Projection,但現在我只是得到了一些非常時髦的好看的圖形...

回答

0

mvp應該是Proj * ModelView,因爲您擁有它。

gl_Position應該是mvp * vPosition,而不是像在代碼中顯示的那樣。

如果這樣不能解決問題,您能否更好地描述問題(圖像可能有所幫助)?另外考慮發佈更多的opengl代碼,以防出現錯誤。你發佈的其他代碼對我來說都很好。

0

我張貼這種過度的gamedev.stackexchange.com和想通了,here s a link

+1

以供將來參考,請不要交叉後(或至少是記下它在你的問題,所以你不要浪費我們的時間)。 HTTP://meta.stackexchange。COM /問題/ 64068 /是交叉張貼-A-問題上,多個堆疊交換站點許可-IF-的衢 – Tim 2012-07-07 23:41:57