3

http://www3.ntu.edu.sg/home/ehchua/programming/android/Android_3D.htmlでチュートリアルをフォローしていますが、問題が発生しました。

次の両方の例を機能させることができました。

2.7例5:3D形状-回転するカラーキューブとピラミッド(Neheレッスン5:3D形状)例2:Cube2.java

2.8例6:テクスチャ(Neheレッスン6:テクスチャ)

しかし、色付きの立方体とテクスチャ付きの立方体の両方を描画しようとすると、次のようになります。

http://i.imgur.com/Smbsa.png (画像の最初の部分)

色付きの立方体は表示されませんが、テクスチャキューブをクリップし、テクスチャキューブのテクスチャは、色付きの立方体の最後の色(黄色)で色付けされます。

基本的に、両方の立方体を次のように描画します。

  // ----- Render the Color Cube -----
  gl.glLoadIdentity();                // Reset the model-view matrix
  gl.glTranslatef(0.0f, 0.0f, -6.0f); // Translate right and into the screen
  gl.glScalef(0.5f, 0.5f, 0.5f);      // Scale down (NEW)
  gl.glRotatef(angleCube, 1.0f, 1.0f, 0.0f); // rotate about the axis (1,1,1) (NEW)
  cube.draw(gl);                      // Draw the cube (NEW)

  // Update the rotational angle after each refresh (NEW)
  angleCube += speedCube;         // (NEW)

  // ----- Render the Texture Cube -----
  gl.glLoadIdentity();                // Reset the model-view matrix
  gl.glTranslatef(-1.0f, 0.0f, -6.0f); // Translate right and into the screen
  gl.glScalef(0.5f, 0.5f, 0.5f);      // Scale down (NEW)
  gl.glRotatef(angleCube, 1.0f, 1.0f, 0.0f); // rotate about the axis (1,1,1) (NEW)
  texturecube.draw(gl);                      // Draw the cube (NEW)

パート「 2.9例6a:フォトキューブ」から3番目のいわゆる「フォトキューブ」を追加してみました。

(2つのリンクのみを投稿できます上記のimgurリンクを確認してください)

追加した:

 gl.glColor4f(0.0f, 0.0f, 1.0f, 1.0f);

テクスチャキューブに移動し、青い色がフォトキューブに「こぼれる」ことに気づきました。

追加すると:

 gl.glColor4f(1.0f, 1.0f, 1.0f, 0.0f);

次のテクスチャは色付けされなくなりましたが、これは過去の色を削除するための大雑把な方法のように感じます。

削除すると:

  texturecube.loadTexture(gl, context);    // Load image into Texture (NEW)
  photocube.loadTexture(gl);    // Load image into Texture (NEW)
  gl.glEnable(GL10.GL_TEXTURE_2D);  // Enable texture (NEW)

これは起こります:

(2つのリンクのみを投稿できます上記のimgurリンクを確認してください)

カラーキューブが戻ってきて、他のすべての表面が着色されています。

私の質問:

色付きの立方体が消えたとき、私は何を間違っていますか?(テクスチャと色の両方を同時に使用できるはずだと思います)

「gl.glColor4f(1.0f、1.0f、1.0f、0.0f);」以外の以前のキューブ/オブジェクトから色を「クリア」するためのより良い方法はありますか?

4

1 に答える 1

3

あなたの質問は非常に詳細であり、それは良いことですが、描画セクションの完全なコードサンプルを投稿すると役立ちます。問題の原因となる可能性のあることを推測するのは難しいです。

とにかく私はあなたの2つの質問を試してみます:

最初に:私の推測では、色付きの立方体を描画する前にテクスチャリングを無効にしないでください。しかし、あなたは完全なコードを持っていないので、私は確実に言うことはできません。2番目の立方体をレンダリングする前に呼び出しglDisable(GL_TEXTURE_2D)、次のテクスチャキューブを描画する前に再度有効にします。

2番目:いいえ、それは正しい方法です(ただし、透明性を持って何かをしたい場合1,1,1,1ではなく、おそらく必要です)。1,1,1,0または、カラー状態をOpenGLスタックにプッシュし、後でポップすることでこれを行う方法がありますが、これは非推奨であり、使用しないでください。

于 2012-05-15T17:01:16.830 に答える