1

GLKitを使用してピクセルを描画しています。次の場合、(10、10)座標でピクセルを正常に描画できます。

glClearColor(0.65f, 0.65f, 0.65f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

// Prepare the effect for rendering 
[self.effect prepareToDraw];

GLfloat points[] =
{
    10.0f, 10.0f,
};

glClearColor(1.0f, 1.0f, 0.0f, 1.0f);

GLuint bufferObjectNameArray;
glGenBuffers(1, &bufferObjectNameArray);
glBindBuffer(GL_ARRAY_BUFFER, bufferObjectNameArray);

glBufferData(
             GL_ARRAY_BUFFER,
             sizeof(points),
             points,
             GL_STATIC_DRAW);

glEnableVertexAttribArray(GLKVertexAttribPosition);

glVertexAttribPointer(
                      GLKVertexAttribPosition,
                      2,
                      GL_FLOAT,
                      GL_FALSE,
                      2*4,
                      NULL);
glDrawArrays(GL_POINTS, 0, 1);

しかし、実行時にピクセルを描画する数と正確な場所を決定したいので、これを試しましたが、(10、0)でピクセルを描画しています、ここで何かが間違っています:

glClearColor(0.65f, 0.65f, 0.65f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

// Prepare the effect for rendering 
[self.effect prepareToDraw];

GLfloat *points = (GLfloat*)malloc(sizeof(GLfloat) * 2);
for (int i=0; i<2; i++) {
    points[i] = 10.0f;
}

glClearColor(1.0f, 1.0f, 0.0f, 1.0f);

GLuint bufferObjectNameArray;
glGenBuffers(1, &bufferObjectNameArray);
glBindBuffer(GL_ARRAY_BUFFER, bufferObjectNameArray);

glBufferData(
             GL_ARRAY_BUFFER,
             sizeof(points),
             points,
             GL_STATIC_DRAW);

glEnableVertexAttribArray(GLKVertexAttribPosition);

glVertexAttribPointer(
                      GLKVertexAttribPosition,
                      2,
                      GL_FLOAT,
                      GL_FALSE,
                      2*4,
                      NULL);
glDrawArrays(GL_POINTS, 0, 1);

親切に私を助けてください。

編集: 問題 実際の問題は次のとおりです。次の違いがわかりません。

GLfloat points[] =
{
    10.0f, 10.0f,
};

GLfloat *points = (GLfloat*)malloc(sizeof(GLfloat) * 2);
for (int i=0; i<2; i++) {
    points[i] = 10.0f;
}
4

1 に答える 1

0

私の賭けは、問題はデータ呼び出しsizeof(points)にあるということglBufferDataです。この場合、単語、つまり4バイト(またはこのようなもの)であるポインターのサイズを返します。コードで計算したものと同じになる配列の実際のサイズを渡す必要がありmallocます。

于 2012-04-06T12:59:01.017 に答える