Нарисуйте 3D модель на существующей деятельности - PullRequest
0 голосов
/ 17 апреля 2020

Я хочу нарисовать 3d модель существующего занятия, в котором уже есть несколько кнопок, текстов и изображений. Я знаю, что мы можем сделать это, используя OpenGLES, но в этом он создаст окно для рисования 3D-графики. Я хочу, чтобы это было похоже на прозрачную модель. Кто-нибудь может помочь мне достичь этого

1 Ответ

0 голосов
/ 17 апреля 2020

Может быть, есть другой способ, но вы можете попробовать это.

Объединение UI-элементов и OGL view вместе:

public class GameActivity extends AppCompatActivity {
    private SurfaceView surfaceView;
    @Override
    protected void onCreate(Bundle state) { 
        setContentView(R.layout.activity_gl);
        surfaceView = findViewById(R.id.oglView);
        surfaceView.init(this.getApplicationContext());
    } 
}

public class SurfaceView extends GLSurfaceView {
    private SceneRenderer renderer;
    public SurfaceView(Context context) {
        super(context);
    }

    public SurfaceView(Context context, AttributeSet attributes) {
        super(context, attributes);
    }

    public void init(Context context) {
        renderer = new SceneRenderer(context);
        setRenderer(renderer);
        ...
    }
}

И создание макета activity_gl. xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
        tools:context=".activities.GameActivity">
    <com.app.SurfaceView
        android:id="@+id/oglView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    <TextView ... />
</androidx.constraintlayout.widget.ConstraintLayout>

Но для создания эффекта прозрачности, вероятно, лучше добавить прозрачность к элементам «рамочного» макета, например:

<androidx.constraintlayout.widget.ConstraintLayout ...>
    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/darkYellow"
        android:alpha="0.5">
        <TextView ... />
    </androidx.constraintlayout.widget.ConstraintLayout>

    <com.app.SurfaceView
        android:id="@+id/oglView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>

По моему опыту прозрачность влияет на производительность, поэтому, если есть Это анимация, лучше не использовать прозрачность.

Для обновления UI-элементов из потока рендеринга можно использовать Handler / Looper.

...