OpenGL でピクセルをテクスチャとしてポリゴンに描画するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/664698

  •  21-08-2019
  •  | 
  •  

質問

C++ OpenGL では、単純な正方形のプリミティブ、または正方形を形成する 2 つのポリゴン上に各ピクセルを手動で (テクスチャとして) 描画したいと考えています。

どこから始めればよいのか、どのようなフレーズを探せばよいのかわかりません。テクスチャ マッピングを探しているのか、それともテクスチャを作成しているのか?ほとんどの例ではファイルからロードしますが、私はそれを行いたくありません。

OpenGL プログラミング ガイドの本を読んでみましたが、OpenGL についてはまったくの初心者なので、単なる迷路でした。助けてください。

役に立ちましたか?

解決

glTexImage2Dをよく見てください。これは、2DテクスチャのためのOpenGLにイメージをロードコールである。

glTexImage2Dは、実際の画像の画素データに生のポインタを取ります。あなたはメモリを自分で割り当て、およびOpenGLにイメージを渡すために、この関数を呼び出した後、(あなたが欲しいしかし)画像データを直接設定することができます。

あなたはテクスチャを作成したら、あなたの三角形はそのテクスチャを使用するように、あなたが状態にバインドすることができます。

直接ファイルからロードされるようにテクスチャとして使用するイメージを必要とOpenGLでは何もありません。テクスチャの優れたリソースをすることができこのGameDevの記事で見つかった。

他のヒント

描画している正方形が 2 次元で回転していない場合は、次のことを探している可能性があります。 glDrawPixels. 。ポリゴンを使用せずに、ピクセルの長方形の領域をバッファに直接描画できます。

あなたは新しいしている場合、私は上のチュートリアル1から始まる推薦するから訥河するます。

glTexImage2D()をロードするピクセルへのポインタをとりながら、それが呼び出した後、そのデータへの変更を気にしませんのでご注意ください。つまり、データが本当にあなたが指定したメモリ領域からロードされ、およびOpenGLは、自身のコピーを作成します。

これはデータが変更された場合、あなたはどちらかを再実行するglTexImage2D()の呼び出しに必要な、または部分的な更新を行うためにglTexSubImage2D()のようなものを使用することを意味します。私は、サブテクスチャ更新が実際のドライバーが、その場合のために最適化する方法がわからない、迅速であるかどうかを確認するためにテストとプロファイリングをお勧めします。

glTexImage2D の方に私を指しているためリードCopseyに

のおかげで。これは非常に簡単ですが判明。ちょうどglTexImage2D機能にGLubyteの配列(だけでなく、テクスチャをバインドするために必要なすべての機能など)を渡します。このコードの正確なスニペットを試していないが、それが正常に動作する必要があります。アレイ素子は、行、列およびチャネルのシリアルバージョンを表します。

int pixelIndex = 0;
GLubyte pixels[400];

for (int x = 0; x < 10; x++)
{
    for (int y = 0; y < 10; x++)
    {
         for (int channel = 0; channel < 4; channel++)
         {
             // 0 = black, 255 = white
             pixels[pixelIndex++] = 255;
         }
    }
}

glTexImage2D(
    GL_TEXTURE_2D, 0, GL_RGBA, SIZE, SIZE, 0,
    GL_RGBA, GL_UNSIGNED_BYTE, pixels);

私はあなたがモノクロ画像の2次元配列を使用することができますOpenGLの本で読んだので、私はあなたにも3Dの配列を使用することができます仮定します。

あなたが探していることは一般的に「テクスチャにレンダリング」と呼ばれています。

http://developer.nvidia.com/object/gdc_oglrtt.htmlする

そのチュートリアルはかなり古いです。私は、これらの拡張子のいくつかは、実際にOGLの新しいバージョンで拡張されないことを推測すると思います。申し訳ありませんが、私はより多くの助けにすることはできません。私は、グラフィックスAPIのいずれかのより多くのを直接操作していない、と私はやった場合、私はできれば、私はD3Dを使用したい(拡張子スープを避けるために、そして他の理由のために私はここであなたを退屈しません。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top