私は OpenGL ES を学んでいます。カメラの位置などの背後にある基本的な行列ロジックを理解して、いくつかの立方体を正常に描画しました。現在、VBO の例を作成しようとしていますが、画面には何も描画されません。コードを貼り付けます。おそらく誰かが私が間違っていることに気付くでしょう。
フラグメント シェーダー コード
precision mediump float;
varying vec2 v_texCoord;
varying vec3 v_colour;
uniform sampler2D s_texture;
void main()
{
gl_FragColor = texture2D(s_texture, v_texCoord);
}
頂点シェーダー
attribute vec3 av3position;
attribute vec2 a_texCoord;
attribute vec3 av3colour;
uniform mat4 PerspectiveMatrix;
uniform mat4 ModelViewMatrix;
varying vec2 v_texCoord;
varying vec3 v_colour;
void main()
{
v_texCoord = a_texCoord;
v_colour =av3colour;
vec4 pos = ModelViewMatrix * vec4(av3position,1.0);
gl_Position = PerspectiveMatrix * pos;
}
テクスチャの読み込み
Texture01RGBA->boLoadTextureFromfile("BitmapData/cubeLayout_02.png" );
glPixelStorei(GL_UNPACK_ALIGNMENT, 1); // Use tightly packed data
glGenTextures(1, &gluiTextureID); // Generate a texture object
glBindTexture(GL_TEXTURE_2D, gluiTextureID); // Bind the texture object
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, Texture01RGBA->getWidth(), Texture01RGBA->getHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, Texture01RGBA->getPixmapPointer());
glGenerateMipmap(GL_TEXTURE_2D);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glActiveTexture ( GL_TEXTURE0 );
glBindTexture ( GL_TEXTURE_2D, gluiTextureID );
// Set the sampler texture unit to 0
glUniform1i ( iLoc2DSampler, 0 );
頂点オブジェクトの構造
const float aCubeVertices[] =
{ // x, y, z, nx, ny, nz, u, v
1.000000,1.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.500000, 0.500000,
1.000000,1.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.500000, 0.250000,
-1.000000,1.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.250000, 0.250000,
-1.000000,1.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.250000, 0.500000,
1.000000,1.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.500000, 0.750000,
-1.000000,1.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.250000, 0.750000,
-1.000000,1.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.250000, 1.000000,
1.000000,1.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.500000, 1.000000,
1.000000,1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.750000, 0.250000,
1.000000,1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.750000, 0.000000,
1.000000,1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.500000, 0.000000,
1.000000,1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.500000, 0.250000,
1.000000,1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.500000, 0.250000,
1.000000,1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.500000, 0.000000,
-1.000000,1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.250000, 0.000000,
-1.000000,1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.250000, 0.250000,
-1.000000,1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.250000,
-1.000000,1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.250000, 0.000000,
-1.000000,1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000,
-1.000000,1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.250000,
1.000000,1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.500000, 0.750000,
1.000000,1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.500000, 0.500000,
-1.000000,1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.250000, 0.500000,
-1.000000,1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.250000, 0.750000
};
unsigned short aCubeIndices[]= // 36 Elements. 3 Groups
{ 0,1,2,0,2,3,4,5,6,4,6,7,8,9,10,8,10,11,12,13,14,12,14,15,16,17,18,16,18,19,20,21,22,20,22,23 };
VBOの作成
glGenBuffers (1, &vao);
glBindBuffer (GL_ARRAY_BUFFER, vao);
glBufferData(GL_ARRAY_BUFFER, 24 * sizeof(float)*8, aCubeVertices, GL_STATIC_DRAW);
glBindBuffer (GL_ARRAY_BUFFER, 0);
glGenBuffers(1, &vinx);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vinx);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 36* sizeof(GLushort), aCubeIndices, GL_STATIC_DRAW);
glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0);
VBO 図面
glBindBuffer (GL_ARRAY_BUFFER, vao);
// set up vertex attributes
glEnableVertexAttribArray(iLocPosition);
glEnableVertexAttribArray(iLocTexCoord);
glVertexAttribPointer(iLocPosition, 3, GL_FLOAT, GL_FALSE, sizeof(float)*8, 0);
glVertexAttribPointer(iLocTexCoord, 2, GL_FLOAT, GL_FALSE, sizeof(float)*8, (const void *)24 );
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vinx);
glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_SHORT, (void*)0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glDisableVertexAttribArray(iLocPosition);
glDisableVertexAttribArray(iLocTexCoord);
前に指摘したように、以前に行ったより単純な例 (テクスチャ、変換行列) と基本的に同じコードを使用してきました。エラーもチェックしましたが、コードエラーはありません。
誰かが私のコードで何が問題なのかを強調していただければ幸いです。