1
私はOpenGL ESを使用してネイティブレンダリングを行うUnityでAndroidプラグインを使用しています。FBOにレンダリングすると予期しない結果が発生する
私はこれにコードを単純化しており、それが成功し、問題を再現:
GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, fboId);
//Draw texture to framebuffer
GLES20.glViewport(0, 0, width, height);
GLES20.glUseProgram(program);
GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);
GLES20.glUniformMatrix4fv(u_MVPMatrix, 1, false, matrix, 0);
GLES20.glEnableVertexAttribArray(a_Position);
GLES20.glVertexAttribPointer(a_Position, 3, GLES20.GL_FLOAT, false, 0, verticesBuffer);
GLES20.glEnableVertexAttribArray(a_texCoord);
GLES20.glVertexAttribPointer(a_texCoord, 2, GLES20.GL_FLOAT, false, 0, uvBuffer);
GLES20.glDrawElements(GLES20.GL_TRIANGLES, indices.length, GLES20.GL_UNSIGNED_SHORT, indicesBuffer);
GLES20.glFinish();
GLES20.glFlush();
GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0);
私は唯一のOpenGL ES20を使用するユニティを強制していますが、OpenGLのES30を使用している場合、私は予想外の取得時にそれが正常に動作しています結果と入力配列は次のとおりです。
GLES20.glVertexAttribPointer(a_Position, 3, GLES20.GL_FLOAT, false, 0, verticesBuffer);
無視され、指定されたクワッドは別の形で描画されます。入力座標をどのように変更しても、私はまだ同じ奇妙な形をしています。
私はOpenGLコーダーではないので、問題は見つかりません。私はここにいくつかの州を設定するために行方不明ですか?
'verticesBuffer'とは何ですか? OpenGLバッファ、またはJavaバッファオブジェクトの名前?クライアントサイドの頂点配列は、ES 3.0では廃止予定とマークされています。彼らはまだ動作するはずです。 –
verticesBufferはFloatBuffer型であり、クワッド内の頂点の座標を含みます。 – sinsro
前述したように、これはES 3.0の非推奨機能ですが、ES 2.0との下位互換性のためにサポートされるべきです。しかし、とにかくVBOを使う方が良いでしょう。 –