2012-01-07 8 views
0

glutSolidSphereにテクスチャを適用するにはどうすればよいですか?OpenGl - texture glutSolidSphere?

私が試してみましたが、それは動作しません。この:

GLuint textureid; 
    glGenTextures(1, &textureid); 
    glBindTexture(GL_TEXTURE_2D, textureid); 
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, "stone.tga"); 
// Planet 
    glDisable(GL_LIGHTING); 
    glBindTexture(GL_TEXTURE_2D, textureid); 
    glutSolidSphere(35.0f, 30, 17); 
    glEnable(GL_LIGHTING); 

は、いくつかのいずれかのテクスチャをロードし、それを有効にする方法の私を指示することができます。

glutSolidSphereは既にテクスチャ座標を出力していると聞いていますので、私は特別なことをする必要はありません。

答えて

1

実際にglTexImage2Dでテクスチャを作成していないことが問題です。最後のパラメータは、ファイルの名前だけでなく、赤、緑、青、アルファ(他のパラメータ - GL_UNSIGNED_BYTEおよびGL_RGBAで指定された順)のピクセルチャネルカラーのbyte[]である必要があります。

OpenGLはファイルが何であるか、システム固有のファイルシステムからファイルを読み込む方法、またはTGAファイル形式を解析する方法を知りません。生の色データが必要なので、画像を読み込んで解析し、OpenGLにbyte[]を渡す必要があります(技術的には最初の要素へのポインタはvoid*)。 TGAファイルの解析に必要な最小限のコードを提供するseveralguidesがありますが、FreeImageのようなライブラリを使用してテクスチャの読み込みを処理することもでき、TGAだけではありません。

+0

あなたのお返事ありがとうございましたロバート私は何を言っているのか理解していると思いますが、私はそれを完全に理解するまでしばらく時間がかかるでしょう – Led

+0

非常に簡単です。色は(少なくともコンピュータでは)赤、緑、青の3色の組み合わせで表されます。 (透明度:アルファ)もあります。 TGAのようなファイル形式は、各ピクセルのカラー値でいっぱいの 'byte []'配列ではなく、ファイルヘッダや圧縮などがあります。あなたがする必要があるのは、TGAテクスチャからすべての超過分を取り除くことです生の画像データ。その生のデータをOpenGLに送信するだけで、そこから処理されます。 –

+0

もし実際に私にそれが本当に良いことになるのであれば、実際に私に見せてくれるかもしれません:p ...しかし、とにかくウルの助けてくれてありがとう、ロバートはそれに感謝します – Led