5

壁紙サービスを使用しOpenGLて Android ライブ壁紙を開発しようとしています。Mark F Guerra によるこののようにライブ壁紙を作成できますが、壁紙にスプライト アニメーションを追加したいと考えています。

すでにOpenGL ES別のプロジェクトでスプライト アニメーションを作成しています。ライブ壁紙プロジェクトでアニメーションを再作成したいだけです。

しかし、私のライブ壁紙プロジェクトでは、アセットまたはリソースから画像を取得してロードすることができませんContext

サービスの使用中にリソースまたはアセットファイルをロードすることに関する提案、サンプル コード、またはリンクは非常に役立ちます。glwallpaper

すべての提案やサンプル コードを歓迎します。

4

2 に答える 2

1

エンジンからレンダラーにコンテキストを渡します。次に、アセットをロードするためのサンプル コードを次に示します。つまり、resourceID は R.drawable.xxx ビットマップです。これは私が作成したテクスチャ アトラス クラス内にあるため、いくつかのことがメソッドに完全に含まれていない可能性があります。たとえば、ビットマップをロードするために使用するオプションには inscaled = false が含まれますが、どれでも機能します。たとえば、これを修正してエラー処理を削除しました。

/**
 * Load the resource and push it to the gpu memory, setup default values
 * @param gl
 * @param context
 * @param resourceID
 * @return glTextureID
 * 
 */
public int loadFromContext(GL10 gl, Context context, int resourceID) {
    mResourceID = resourceID;
    Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), resourceID, sBitmapOptions);
    sourceWidth = bmp.getWidth();
    sourceHeight = bmp.getHeight();
    gl.glGenTextures(1, mGLTextures, 0);
    mGLTextureID = mGLTextures[0];

    // bind and set min and mag scaling to bilinear
    gl.glBindTexture(GL10.GL_TEXTURE_2D, mGLTextureID);
    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);

    // repeat by default
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_REPEAT);
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_REPEAT);

    // upload bmp to video memory
    GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bmp, 0);

    // check error
    int error = gl.glGetError();
    if (error != GL10.GL_NO_ERROR) {
        // cleanup
        bmp.recycle();
        bmp = null;
        mLoaded = false;
            // error handling here
    } else {

        // unbind.
        gl.glBindTexture(GL10.GL_TEXTURE_2D, 0);
        bmp.recycle();
        bmp = null;
        mLoaded = true;
        mDirty = true;

      } 
      return mGLTextureID;
}
于 2012-10-24T04:25:01.853 に答える
1

以下に示すように、コンテキストを使用できます。

in wallpaper service class: 
------------------- 
renderer = new GlRenderer(this); 

in renderer class: 
---------------- 
private Context context; 

public GlRenderer(Context context) { 
this.context = context; 

代わりにorを renderer のパラメータとしてthis使用できます。使用すると、アセットフォルダーに保存されたファイルを取得でき、使用すると、プロジェクトのリソースフォルダー内に配置されたファイルを取得できます。getAssets()getResources()
getAssets()getResources()

于 2012-10-24T05:50:54.440 に答える