1

OpenGL テクスチャを使用してビットマップ イメージをオブジェクト [1] に配置し、それをオブジェクト [2] に固定したいと思います: ステッカーのように。

GL_EYE_LINEAR モードは、オブジェクトを「ステッカー」の前に移動するのに適しています [1] が、オブジェクトのこの「ステッカー」を修正するにはどうすればよいですか [2] (ボタン イベントの直後など)。 GL_OBJECT_LINEAR モードに...

GL_MODELVIEW マトリックスの回転/変換に従って、フェーズ [1] で GL_OBJECT_LINEAR モードで GL_EYE_LINEAR を「エミュレート」しようとしましたが、GL_EYE_LINEAR モードと同じ動作はまだありません...

ps: GL_OBJECT_LINEAR を使用して、ステッカー テクスチャの x、y、z および rot(x、y、z) を取得する必要があります。

4

1 に答える 1

1

わかりました GL_OBJECT_LINEAR で GL_EYE_LINEAR をエミュレートしようとしているのはおそらく私だけですが、最終的にそれを行う方法を見つけました。

まず、ビットマップ テクスチャを使用してモデルに貼り付けることを目的としているため、テクスチャ/ビットマップを貼り付ける必要がある現在の回転 (rx、ry、rz) と移動 (tx、ty、tz) を保存する必要があります。 SAVE_POSITION= (rx_save、ry_save、rz_save、tx_save、ty_save、tz_save)。

その後、次の手順を実行するだけです。

0- gl.glMatrixMode(gl.GL_MODELVIEW), gl.glLoadIdentity()

1- 次に、次の厳密な順序でモデル ビュー マトリックスを変更します。回転(CURRENT_POSITION) b. translation(CURRENT_POSITION) c.translation(-SAVE_POSITION) d. 回転(-SAVE_POSITION)

2- テクスチャ生成を設定します (ビットマップ テクスチャを配置するため):

gl.glTexGendv(gl.GL_S,gl.GL_EYE_PLANE,(self.TexSize,0,0,0))
gl.glTexGendv(gl.GL_T,gl.GL_EYE_PLANE,(0,self.TexSize,0,0))
gl.glTexGeni(gl.GL_S,gl.GL_TEXTURE_GEN_MODE,gl.GL_EYE_LINEAR)
gl.glTexGeni(gl.GL_T,gl.GL_TEXTURE_GEN_MODE,gl.GL_EYE_LINEAR)
gl.glEnable(gl.GL_TEXTURE_GEN_S)
gl.glEnable(gl.GL_TEXTURE_GEN_T)

3- MODELVIEW gl.glLoadIdentity() をリロードします (またはプッシュ/ポップを使用します) 4- 通常どおり CURRENT_POSITION に回転/変換します 5- モデルを描画します

それが誰かを助けることを願っています。

しかし、ジェイソンが言ったように、最善の方法は、従来の opengl ではなくシェーダーを使用することです... Python プログラマー向けの優れたチュートリアルをここで見つけました: http://pyopengl.sourceforge.net/context/

よろしく、-baco

于 2013-03-19T18:34:30.420 に答える