1

テクスチャを持つ他の立方体をレンダリングした後に、色付きの立方体をレンダリングしようとしています。Drawer インターフェイスに準拠する複数の「Drawer」オブジェクトがあり、それぞれの GL オブジェクトへの参照を、個々の実装クラスのdraw( final GL gl )メソッドに渡します。しかし、私が何をしても、色付きの立方体をレンダリングできないようです。

コードサンプル:

gl.glDisable(GL.GL_TEXTURE_2D);

gl.glColor3f( 1f, 0f, 0f );
gl.glBegin(GL.GL_QUADS);
// Front Face
Point3f point = player.getPosition();

gl.glNormal3f(0.0f, 0.0f, 1.0f);
//gl.glTexCoord2f(0.0f, 0.0f);

gl.glVertex3f(-point.x - 1.0f, -1.0f, -point.z + 1.0f);
//gl.glTexCoord2f(1.0f, 0.0f);

gl.glVertex3f(-point.x + 1.0f, -1.0f, -point.z + 1.0f);
//continue rendering rest of cube. ...
gl.glEnd();
gl.glEnable(GL.GL_TEXTURE_2D);

また、各頂点呼び出しの前に glColor3f 呼び出しをスローしようとしましたが、それでも白い立方体が得られます。調子はどう?

4

4 に答える 4

3

確認する必要があることがいくつかあります。

最初に:

gl.glEnable(gl.GL_COLOR_MATERIAL);

これにより、頂点に色を適用できます。(glColor3f を呼び出す前にこれを行ってください。)

それでも問題が解決しない場合は、ブレンドを適切に使用していることを確認してください (ブレンドを使用している場合)。

ほとんどのアプリケーションでは、おそらく使用する必要があります

gl.glEnable(gl.GL_BLEND);
gl.glBlendFunc(gl.GL_SRC_ALPHA,gl.GL_ONE_MINUS_SRC_ALPHA);

これらのいずれも問題を解決しない場合は、コードのこのセクションの前に、何を行っているか、何を設定しているかについて、さらに情報を提供する必要がある場合があります。

于 2009-05-04T20:10:26.730 に答える
3

照明が有効になっている場合、色は glColor 頂点の色ではなく、マテリアルから取得されます。あなたが言及した描画機能がテクスチャ付きオブジェクトのマテリアルを設定している場合(テクスチャの下の白いマテリアルが一般的です)、残りの立方体は白になります。GL_COLOR_MATERIAL を使用すると、OpenGL が glColor コマンドを受け取り、頂点カラーだけでなくマテリアルを更新するように設定されるため、機能するはずです。

簡単に言えば、照明が有効になっている場合は、GL_COLOR_MATERIAL を試してください。

于 2009-05-04T20:20:48.110 に答える
0

試してみたいことの 1 つはglBindTexture(GL_TEXTURE_2D, 0);、テクスチャを nil にバインドすることです。

于 2009-05-04T14:12:18.417 に答える
0

確認事項:

  • アクティブなシェーダーはありますか?
  • gl エラーはありますか?
  • 他にどのような状態を変更しましたか? たとえば、GL_COLOR_MATERIAL の場合、ブレンドまたはライティングによってジオメトリの外観が変わります。
  • テクスチャのない立方体を最初に描画すると機能しますか? そして、それがどの時点で白くなるかを理解しようとする場合. また、立方体が最初のフレームで正しい色でしか表示されない可能性もあります。その場合、GL 状態が関係していることは間違いありません。
  • 描画メソッドの最初/最後に glPushAttrib/glPopAttrib を配置すると役立つ場合がありますが、そもそも問題の原因を突き止めたほうがよいでしょう。
于 2009-05-04T15:53:02.543 に答える