0

そのため、バックグラウンドで多くの描画を処理する基本的な「Drawable」クラスを作成しようとしていますが、最新の OpenGL を使用したいと考えています (begin ステートメントと end ステートメントはありません)。draw()を実行すると、空白の画面が表示され続けます。

デバッガーを実行して確認したところ、配列は位置に 3xFLOAT、色に 4xFLOAT で適切に初期化されています。何がうまくいかないのですか?私はこのライブラリに非常に慣れていません。私の例では、赤い立方体を (+-0.5, +-0.5, 0.0) に描画しようとするため、indexData 配列は { 0, 1, 2, 3 } になります。

#define DRAWABLE_VERTEX_DEPTH 3
#define SIZE_OF_VERTEX_ELEMENT sizeof(GLfloat)
#define VERTEX_SIZE (DRAWABLE_VERTEX_DEPTH * SIZE_OF_VERTEX_ELEMENT)
#define DRAWABLE_COLOR_DEPTH 4
#define SIZE_OF_COLOR_ELEMENT sizeof(GLfloat)
#define COLOR_SIZE (DRAWABLE_COLOR_DEPTH * SIZE_OF_COLOR_ELEMENT)
#define INDEX_SIZE sizeof(GLushort)
#define DRAWABLE_STRIDE (VERTEX_SIZE + COLOR_SIZE)

inline Drawable(/*Arguments omitted for brevity...*/)
    {
        //Standard initialization omitted....

        glGenBuffers(1, &vboID);
        glGenBuffers(1, &vioID);
        glGenVertexArrays(1, &vaoID);

        glBindBuffer(GL_ARRAY_BUFFER, vboID);
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vioID);

        glBufferData(GL_ARRAY_BUFFER, (VERTEX_SIZE + COLOR_SIZE) * vertexCount, vertexData, drawType);
        glBufferData(GL_ELEMENT_ARRAY_BUFFER, INDEX_SIZE * indexCount, indexData, drawType);

        glEnableVertexAttribArray(0);
        glEnableVertexAttribArray(1);

        glBindBuffer(GL_ARRAY_BUFFER, 0);
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

        //Generate Vertex Array

        glBindVertexArray(vaoID);
        glBindBuffer(GL_ARRAY_BUFFER, vboID);
        glEnableVertexAttribArray(0);
        glEnableVertexAttribArray(1);
        glVertexAttribPointer(0, DRAWABLE_VERTEX_DEPTH, GL_FLOAT, GL_FALSE, DRAWABLE_STRIDE, 0);
        glVertexAttribPointer(1, DRAWABLE_COLOR_DEPTH, GL_FLOAT, GL_FALSE, DRAWABLE_STRIDE, (GLbyte*)VERTEX_SIZE);
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vioID);
        glBindVertexArray(0);
    }

    inline void draw()
    {
        glBindVertexArray(vaoID);
        glDrawElements(drawMode, indexCount, GL_UNSIGNED_SHORT, NULL);
        glBindVertexArray(0);
    }

GLSL 頂点シェーダー:

#version 430\r\n

in layout(location=0) vec3 inPosition;
in layout(location=1) vec4 inColor;
out vec4 outVertexColor;

void main()
{
    gl_Position = vec4(inPosition, 1.0);
    outVertexColor = inColor;
}

GLSL フラグメント シェーダー:

#version 430\r\n

in vec4 outVertexColor;
out vec4 outFragmentcolor;

void main()
{
    outFragmentcolor = outVertexColor;
}
4

1 に答える 1