7

特定の場所の OpenGL テクスチャの一部のテクセルを変更したいと考えています。誰でもこのplsで私を助けることができますか?

これは私が欲しい機能です、

void ChangeTexelColor(int x, int y, GLuint id, int texW, int texH, GLenum format)
{
   //What is here ?     
}

これは、ゲームのミニマップを維持するために使用されます (動的なマップ テクスチャを維持するより良いアイデアがある場合)。ところで、これは速く行わなければなりません。ありがとう。

4

2 に答える 2

11

OpenGLには、glTexSubImage2Dまさにあなたの目的に合った機能があります。

1つのテクセルの色を変更する関数は次のとおりです。

void changeTexelColor(GLuint id, GLint x, GLint y, uint8_t r, uint8_t g, uint8_t b, uint8_t a) {
    uint8_t data[4];
    data[0] = r;
    data[1] = g;
    data[2] = b;
    data[3] = a;
    glBindTexture(GL_TEXTURE_2D, id);
    glTexSubImage2D(GL_TEXTURE_2D,
                    0,
                    x,
                    y,
                    1,
                    1,
                    GL_RGBA,
                    GL_UNSIGNED_BYTE,
                    data);
}
于 2009-07-20T11:31:41.193 に答える
0

パフォーマンス面では、マップを独自の配列としてローカルに保存し、テクスチャのないクワッドのセットとして画面に描画する方がよい場合があります。

プリミティブのレンダリングは、特にテクスチャの作成や変更と比較して、大幅に最適化されています。

于 2009-07-20T11:39:01.630 に答える