【Android App】Vulkan实现宇宙中旋转雷达动画效果(附源码和原始视频 超详细必看)

简介: 【Android App】Vulkan实现宇宙中旋转雷达动画效果(附源码和原始视频 超详细必看)

需要源码请点赞关注收藏后评论区留言私信~~~

一、Vulkan简介

Vulkan是一个跨平台的图形绘制接口,被称为下一代OpenGL,因为尽管OpenGL提供了丰富的图形API,但他在底层实现的C代码早已封装起来,由于开发者修改不了底层代码,因此不可避免地会遇到功能与性能上的瓶颈,Vulkan正是为了解决这些问题而开发地。它提供地图形API都是C方法,开发者可以运用JIN技术自行封装Vulkan方法,使得图形编程更佳灵活,高效,下图是有关图形编程标准地发展历程

更具体地说,Vulkan充分发挥了GPU与多核CPU的性能,效率和功能优势,它在下列几个方面改善颇多

(1)重写了底层的图形绘制代码,从而降低资源开销、优化程序性能;

(2)允许开启多个线程工作,例如构建命令缓冲区等等,进而加快了程序的运行效率;

(3)支持直接访问硬件,由此获得通过OpenGL无法访问的GPU硬件特性;

进行Vulkan开发要求具备以下几个条件:

(1)Android Studio版本为4.0或者更高版本;

(2)Android的系统版本至少为7.0(API 24);

(3)Android设备的硬件必须支持Vulkan;

(4)电脑上已经安装了最新的Python,也在系统的环境变量Path中设置了Python的安装目录;

二、Vulkan实战应用

先来绘制一个简单正方体

可见无论是外观还是背景都比OpenGL绘制的更佳美观

下面是星空中旋转雷达动画实战效果演示视频

旋转雷达动画

效果图如下 支持通过触屏全方位调节时间和转速 非常美观实用

代码如下

Java类

/*
 * Copyright (C) 2018 by Sascha Willems - www.saschawillems.de
 *
 * This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
 */
package com.example.threed;
import android.app.AlertDialog;
import android.app.NativeActivity;
import android.content.DialogInterface;
import android.content.pm.ApplicationInfo;
import android.os.Bundle;
import java.util.concurrent.Semaphore;
public class VulkanRadarActivity extends NativeActivity {
    static {
        System.loadLibrary("native-lib"); // 加载so库
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    // Use a semaphore to create a modal dialog
    private final Semaphore semaphore = new Semaphore(0, true);
    public void showAlert(final String message) {
        final VulkanRadarActivity activity = this;
        ApplicationInfo applicationInfo = activity.getApplicationInfo();
        final String applicationName = applicationInfo.nonLocalizedLabel.toString();
        this.runOnUiThread(() -> {
            AlertDialog.Builder builder = new AlertDialog.Builder(activity, android.R.style.Theme_Material_Dialog_Alert);
            builder.setTitle(applicationName);
            builder.setMessage(message);
            builder.setPositiveButton("Close", (dialog, id) -> semaphore.release());
            builder.setCancelable(false);
            AlertDialog dialog = builder.create();
            dialog.show();
        });
        try {
            semaphore.acquire();
        }
        catch (InterruptedException e) { }
    }
}

正方体类

package com.example.threed;
import android.app.NativeActivity;
import android.os.Bundle;
public class VulkanCubeActivity extends NativeActivity {
    static {
        System.loadLibrary("vulkan_sample"); // 加载so库
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
}

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
15天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的房屋租赁App的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的房屋租赁App的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的房屋租赁App的详细设计和实现(源码+lw+部署文档+讲解等)
|
12天前
|
Android开发 Kotlin
kotlin开发安卓app,如何让布局自适应系统传统导航和全面屏导航
使用`navigationBarsPadding()`修饰符实现界面自适应,自动处理底部导航栏的内边距,再加上`.padding(bottom = 10.dp)`设定内容与屏幕底部的距离,以完成全面的布局适配。示例代码采用Kotlin。
57 15
|
12天前
|
存储 API Android开发
kotlin开发安卓app,使用webivew 触发 onShowFileChooser, 但只能触发一次,第二次无法触发,是怎么回事。 如何解决
在Android WebView开发中,`onShowFileChooser`方法用于开启文件选择。当用户只能选择一次文件可能是因为未正确处理选择回调。解决此问题需确保:1) 实现`WebChromeClient`并覆写`onShowFileChooser`;2) 用户选择文件后调用`ValueCallback.onReceiveValue`传递URI;3) 传递结果后将`ValueCallback`设为`null`以允许再次选择。下面是一个Kotlin示例,展示如何处理文件选择和结果回调。别忘了在Android 6.0+动态请求存储权限,以及在Android 10+处理分区存储。
|
14天前
|
存储 移动开发 Android开发
使用kotlin Jetpack Compose框架开发安卓app, webview中h5如何访问手机存储上传文件
在Kotlin和Jetpack Compose中,集成WebView以支持HTML5页面访问手机存储及上传音频文件涉及关键步骤:1) 添加`READ_EXTERNAL_STORAGE`和`WRITE_EXTERNAL_STORAGE`权限,考虑Android 11的分区存储;2) 配置WebView允许JavaScript和文件访问,启用`javaScriptEnabled`、`allowFileAccess`等设置;3) HTML5页面使用`<input type="file">`让用户选择文件,利用File API;
|
15天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的成人教育APP的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的成人教育APP的详细设计和实现(源码+lw+部署文档+讲解等)
|
15天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的多功能智能手机阅读APP的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的多功能智能手机阅读APP的详细设计和实现(源码+lw+部署文档+讲解等)
|
15天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的宠物饲养管理APP的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的宠物饲养管理APP的详细设计和实现(源码+lw+部署文档+讲解等)
|
15天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的课程考勤及作业提交App的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的课程考勤及作业提交App的详细设计和实现(源码+lw+部署文档+讲解等)
|
15天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的电影信息推荐APP的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的电影信息推荐APP的详细设计和实现(源码+lw+部署文档+讲解等)
|
7天前
|
Web App开发 缓存 编解码
FFmpeg开发笔记(三十八)APP如何访问SRS推流的RTMP直播地址
《FFmpeg开发实战》书中介绍了轻量级流媒体服务器MediaMTX,适合测试RTSP/RTMP协议,但不适用于复杂直播场景。SRS是一款强大的开源流媒体服务器,支持多种协议,起初为RTMP,现扩展至HLS、SRT等。在FFmpeg 6.1之前,推送给SRS的HEVC流不受支持。要播放RTMP流,Android应用可使用ExoPlayer,需在`build.gradle`导入ExoPlayer及RTMP扩展,并根据URL类型创建MediaSource。若SRS播放黑屏,需在配置文件中开启`gop_cache`以缓存关键帧。
33 2
FFmpeg开发笔记(三十八)APP如何访问SRS推流的RTMP直播地址