[英]Android OpenGL ES 2.0 w/ Native Code Outputs Black Screen
我要上床睡覺了,但是過去6個小時左右,我一直在為此撓頭,在經歷了無數小小的“哦,一定是問題所在!”之后,我正式昏昏欲睡,出門在外線索。
該項目在android上運行,這時應該在屏幕上顯示一個球體。 我測試了代碼,一切都應該正常工作! 我什至有些異的唯一部分是OpenGL ES 2.0的渲染和設置代碼:
設置代碼:
glGenBuffers(1, &vb);
glBindBuffer(GL_ARRAY_BUFFER, vb);
glBufferData(GL_ARRAY_BUFFER, DragonMesh->numVerts*12,
(GLvoid*)verts, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glGenBuffers(1, &ib);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ib);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, DragonMesh->numTris*6,
(GLvoid*)DragonMesh->vertIndices, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
渲染代碼:
glUseProgram(Shader->tech);
float col[] = {1.f, 0.f, 0.f, 1.0f};
glUniformMatrix4fv(Shader->mvpMatrix, 1, GL_FALSE,
(GLfloat*)ModelViewProjection.m);
glUniform4fv(Shader->color, 1, col);
glBindBuffer(GL_ARRAY_BUFFER, vb);
glVertexAttribPointer(Shader->position, 3, GL_FLOAT, GL_FALSE, 12, 0);
glEnableVertexAttribArray(Shader->position);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ib);
glDrawElements(GL_TRIANGLES, DragonMesh->numTris*3, GL_UNSIGNED_SHORT, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
其中ModelViewProjection.m是float [4] [4],verts是浮點指針,指向一堆連續的值,這些值構成每個位置的坐標。
我正確設置了着色器,沒有錯誤地鏈接並構建了它們(我使用OpenGL的相關錯誤檢查調用檢查了錯誤)。
我還認為這可能是我的設備(運行2.3.3的LG Optimus S,但手機說它支持OpenGL-ES 2.0)。
無論如何,當我運行它時,只有一個黑屏。
如果您能全力幫助我,我將非常感激。
編輯:固定參數GL_UNSIGNED_INT而不是GL_UNSIGNED_SHORT(問題仍然存在,盡管可悲。
EDIT2:我有一個線索! 下班回家時我會嘗試一下,但是在計算投影時我不會將度數轉換為弧度-這是一件壞事。 一件非常糟糕的事情。
EDIT3:不
EDIT4:我已經對倉庫進行了相當多的更新,在每個角落添加了錯誤檢查,並修復了一些錯誤。 屏幕仍然是黑色的,但是...如果有人偶然發現此問題,我強烈建議您檢查該回購協議,因為黑屏可能意味着任何事情。 再次感謝您抽出寶貴的時間閱讀本文! (我還意識到我留下了一些溫度變化,例如垂直fov = 0,並且中心/眼睛具有相同的位置。暫時忽略這些變化)。
EDIT5:意識到我可能會以錯誤的順序將Eye轉換與LookAt轉換相乘。 下班回來的時候我會在下午6點左右檢查出來。
就是這樣!!! 我一直被黑屏困擾數周,這是因為我按錯誤的順序乘以翻譯。 如果有人偶然發現這種試圖修復黑屏的東西,則對此帖子發表評論的人會有一個博客,其中包含一個條目,列出了引起問題的常見黑屏。 它應該可以幫助您。
如果沒有,請檢查矩陣並確保按正確的順序進行所有操作:)
我按照錯誤的順序將矩陣與另一個矩陣相乘
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.