尝试在Unity 4.6中使用Java插件设置纹理

时间:2015-06-04 11:20:10

标签: java android unity3d opengl-es

我想做的事情:

  • 使用Java插件从手机上的SD卡中提取图像。
  • Unity将纹理ID传递给插件。
  • 插件使用opengl通过ID将图像分配给Unity中的纹理。
  • 将(最终)用于播放Unity手机中的视频片段,目前,它只是试图改变团结之外的纹理。

我的问题:

当我在插件中调用方法时,将texture.GetNativeTextureID()传递给它,纹理不会改变。我目前只使用简单的黑色50x50纹理进行测试,原始纹理是平白色。

我担心我错过了重要的事情,因为这是我第一次使用java中的G1调用。类似问题的大部分答案都涉及使用原生C ++而不是Java,但我无法找到一个具体的答案,说C ++ 必须。我想尽最大努力避免为C ++编写另一组插件和插件处理程序,但如果它是最有效/唯一的方法来实现这一点,我会像i&i那样做#39;我不熟悉OpenGL和C ++

代码:

在附加到主摄像头的脚本中从OnPreRender()调用插件方法:

if (grabTex) {
    int texPtr = m_VideoTex.GetNativeTextureID();
    Debug.Log( "texPtr = " + texPtr );
    m_JVInterface.SetTex( texPtr );
}

m_VideoTex是基本Texture2D( 50, 50 ),所有像素都设置为白色,附加到场景中四边形上的漫反射着色器。

Java插件代码如下:

public void SetTexture(Context cont, int _texPointer) {
    if (_texPointer != 0) {
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inScaled = false;
        options.inJustDecodeBounds = false;
        final Bitmap bitmap = BitmapFactory.decodeFile("/storage/emulated/0/Pictures/black.jpg", options);

        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, _texPointer);

        GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);

        Log.i("VideoHandler", "Recieved ID: " + _texPointer);

        bitmap.recycle();
    }
}

1 个答案:

答案 0 :(得分:0)

这很可能是OpenGL Context的一个问题。最简单的方法是将纹理作为原始字节发送到Unity,然后作为纹理在Unity内部上传。