1

レンダラー クラスにビットマップをロードしています。画面の中央にテクスチャを適切な比率でできるだけ大きくレンダリングしたいと考えています。

頂点とテクスチャ データ:

private final float[] mVerticesData = { -1f, 1f, 0.0f, // 位置 0 0.0f, 0.0f, // TexCoord 0 -1f, -1f, 0.0f, // 位置 1 0.0f, 1.0f, / / TexCoord 1 1f, -1f, 0.0f, // 位置 2 1.0f, 1.0f, // TexCoord 2 1f, 1f, 0.0f, // 位置 3 1.0f, 0.0f // TexCoord 3 };

private final short[] mIndicesData =
{ 
        0, 1, 2, 0, 2, 3 
};

そして描画方法:

public void onDrawFrame(GL10 glUnused) {

    // Set the viewport
    GLES20.glViewport(0, 0, bitmap.width, bitmap.height);

    // Clear the color buffer
    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);

    // Use the program object
    GLES20.glUseProgram(mProgramObject);

    // Load the vertex position
    mVertices.position(0);
    GLES20.glVertexAttribPointer ( mPositionLoc, 3, GLES20.GL_FLOAT, 
                                   false, 
                                   5 * 4, mVertices );
    // Load the texture coordinate
    mVertices.position(3);
    GLES20.glVertexAttribPointer ( mTexCoordLoc, 2, GLES20.GL_FLOAT,
                                   false, 
                                   5 * 4, 
                                   mVertices );

    GLES20.glEnableVertexAttribArray ( mPositionLoc );
    GLES20.glEnableVertexAttribArray ( mTexCoordLoc );

    // Bind the texture
    GLES20.glActiveTexture ( GLES20.GL_TEXTURE0 );
    GLES20.glBindTexture ( GLES20.GL_TEXTURE_2D, mTextureId );

    // Set the sampler texture unit to 0
    GLES20.glUniform1i ( mSamplerLoc, 0 );

    GLES20.glDrawElements ( GLES20.GL_TRIANGLES, 6, GLES20.GL_UNSIGNED_SHORT, mIndices );
}

現在、ビットマップの寸法でビューポートを設定しています(機能していません)。比率を維持しながら画面に収まるようにテクスチャのビューポートの寸法を計算するにはどうすればよいですか?

ありがとうございました。

4

1 に答える 1

0

ModelViewPrjoection マトリックスを使用する必要があります。このソースを見て ください http://code.google.com/p/android-opengles-samples-for-vikulov-blogspot-com/source/browse/trunk/OpenglTemplate/src/com/vikulov/opengl/MyGLRenderer.java

于 2012-08-31T09:17:52.483 に答える