1

ビットマップから OpenGL オブジェクトを引き延ばしたり、並べて表示したりしたいと考えています。ビットマップの一部の画像を使用しています。しかし、私のリングとミドルは平均的な色の画像でテクスチャリングされています. 画像の色を変更すると、画像が表示されません。

ここに私の完全なコード

  //  ..in init///


           gl.glEnable(GL10.GL_TEXTURE_2D);   
           textures = new int[3];
           bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.pizzaf);
           bitmap = Bitmap.createBitmap(   bitmap, 0, 0,    bitmap.getWidth(),
                   bitmap.getHeight(), null, true);
           bitmap1 = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.pizslice);
           bitmap1 = Bitmap.createBitmap(   bitmap1, 0, 0,    bitmap1.getWidth(),
                   bitmap1.getHeight(), null, true);
        // Tell OpenGL to generate textures.
           gl.glTexParameterf(GL10.GL_TEXTURE_2D,
                   GL10.GL_TEXTURE_WRAP_S,
                   GL10.GL_CLAMP_TO_EDGE);
//         gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,
//                  GL10.GL_LINEAR);
//          gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER,
//                  GL10.GL_LINEAR);

           gl.glGenTextures(1, textures, 0);

    }

と描画機能

GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap1, 0);
            gl.glBindTexture(GL10.GL_TEXTURE_2D, 0);

                 GLUT.glutSolidTorus(gl,0.175f, 0.95f, 12, 48);
                 gl.glTranslatef(0,0, 0.2f);
            GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
        gl.glBindTexture(GL10.GL_TEXTURE_2D, 0);
                GLUT.glutSolidCone(gl, 1,0.01f, 12, 48);
            gl.glTranslatef(0,0, -0.4f);
            gl.glRotatef (180.0f, 1.0f, 0.0f, 0.0f);
        GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap1, 0);
        gl.glBindTexture(GL10.GL_TEXTURE_2D, 0);
        GLUT.glutSolidCone(gl, 1,0.01f, 12, 48);

誰か助けてください。3Dピザを作りたい

4

1 に答える 1

3

コードには 3 つの問題があります。

  1. テクスチャ オブジェクトを適切に使用していない
  2. 各描画呼び出しでテクスチャを再初期化します
  3. glutSolidCone はテクスチャ座標を提供しません (つまり、テクスチャを適切に適用できません)。

固定 (1)

テクスチャは常に次のスキームに従ってロードされます。

GLuint texture_object_name;

glGenTextures(1, 
              &texture_object_name); // you can create texture object names in batches

glBindTexture(GL_TEXTURE_2D, // may differ, depending on texture target (i.e. kind of texture)
              texture_object_name);

glPixelStorei(GL_UNPACK_ALIGNMENT, …);   // </ depends on data format
glPixelStorei(GL_UNPACK_ROW_LENGTH, …);  // <|
glPixelStorei(GL_UNPACK_SKIP_PIXELS, …); // <|
glPixelStorei(GL_UNPACK_SKIP_ROWS, …);   // <|

glTexImage2D(GL_TEXTURE_2D, // again the target, depends on the kind of texture creates
             0, // mipmap level
             GL_RGBA, // internal format, GL_RGBA is one possibility, there are others
             width, height, border, // border is usually 0
             GL_BGRA,                  // format of the data input
             GL_UNSIGNED_INT_8_8_8_8,  // type of the data input -- those must match the data
             texture_data );

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, …); // mipmapping on/off and other settings
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, …); // you should really set those

固定 (2)

(1) を修正したら、(2) を修正できます。レンダリング中にテクスチャを切り替えるには、呼び出すだけです

glBindTexture(GL_TEXTURE_2D, texture_object_name);

後続の描画呼び出しで使用します。

固定 (3)

(3) は、ジオメトリを自分で定義し、適切なテクスチャ座標を指定することで修正されます。

于 2011-09-08T13:08:00.817 に答える