实例分析 Google发布的 ARCore SDK 中包括了一些例子程序,有了上面的基本知识后,我们就很容易理解他所写的 Demo 程序的流程了。...Config:存放一些配置信息,如平面的查找模式,光照模式等信息都是记录在该类中。目前该类还比较简单,里边没存多少东西。 isSupported:该方法主要是对 SDK的版本及机型做控制。...目前官方只支持几款Google和三星的机子做测试。其它机型还都不支持ARCore,当然有一些机型通过破解后的SDK是可以使用 ARCore的。该方法中的 Config 参数没有用到。...创建 GLSurfaceView 用于AR展示 在 Google 提供的Demo中,AR的展示部分使用的是 GLSurfaceView。...并将Activity作为GLSurfaceView的回调对象(也就是说该Activity要实现 GLSurfaceView.Renderer中定义的接口,如onSurfaceCreated、onSurfaceChanged
|| Build.FINGERPRINT.startsWith("unknown") || Build.MODEL.contains("google_sdk...|| Build.MODEL.contains("Emulator") || Build.MODEL.contains("Android SDK...(); } } 绘制三角形-Render的实现类 绘制的基础知识 ---- GLThread 因为Android中的GLSurfaceView的操作,其实都是在GLThread...onSurfaceChanged GLSurfaceView改变的时机。如代码所示,初始化GL的ViewPort onDrawFrame 这个生命周期方法会不断的回调。不断的绘制。...因为我们没有考虑空间转换,所以就不需要进行矩阵变化,暂时就直接使用三角形在OpenGl中的坐标系就可以。 给定义的数组,分配对应的本地内存的空间。
:[Y0 U0 V1]、[Y1 U0 V1]、[Y2 U2 V3]、[Y3 U2 V3] YUV 4:2:0 采样 并不意味着不采样 V 分量。...第一部分把你的3D坐标转换为2D坐标,第二部分是把2D坐标转变为实际的有颜色的像素。图形渲染管线可以被划分为几个阶段,每个阶段将会把前一个阶段的输出作为输入。...${log-lib} ) 2.创建集成GLSurfaceView的播放类。...public class YuvPlayer extends GLSurfaceView implements Runnable, SurfaceHolder.Callback, GLSurfaceView.Renderer...EGL是渲染API(如OpenGL, OpenGL ES, OpenVG)和本地窗口系统之间的接口。EGL可以理解为OpenGl ES ES和设备之间的桥梁,EGL是为OpenGl提供绘制表面的。
有了一个人脸检测的SDK,能够得到相机预览时每帧人脸在屏幕中的坐标及旋转角度。...*960,因此第一个坐标系的转换就是将屏幕坐标系中的触摸点坐标转换成与相机预览宽高相对应的坐标,相机预览的坐标系原点及x、y轴方向与屏幕坐标系相同: ?...SDK得到),示意图如下: ?...人脸宽度的计算要依赖于人脸检测SDK,只需要用人脸检测出的人脸两边边的对应点相减就行了: ?...现在可以将手指在屏幕上触摸时在onTouchEvent()回调中所得到的触摸坐标正确地转换成涂鸦画布中的坐标了,那么如何在对应的坐标点画涂鸦图案呢?
二、API介绍: enableCustomVideoCapture sendCustomVideoData 如官网api文档介绍: enableCustomVideoCapture( boolean enable...)启用视频自定义采集模式 开启该模式后,SDK 不在运行原有的视频采集流程,只保留编码和发送能力。...您需要用 sendCustomVideoData() 不断地向 SDK 塞入自己采集的视频画面。...demo中代码流程,这里总结一下OpenGL渲染流程(注意并不一定全是这种顺序) 申明OpenGl状态机上下文 设置视图展示窗口(viewport) 创建图形类,确定好顶点位置和图形颜色,将顶点和颜色数据转换为...在GlSurfaceView.renderer中绘制处理显示数据 public class GlRenderView extends GLSurfaceView { public GlRenderView
YUV 数据组成 表示图片、视频的色彩空间有几种:YUV、RGB、HSV等,FFmpeg解码后的视频数据是YUV数据,而OpenGL ES 渲染时要使用RGB数据,为此我们需要把YUV先转成RGB,对应的转换公式如下...1.0, 1.0, 0.0, -0.39465, 2.03211, 1.13983, -0.5806, 0.0 ) *yuv; 1.2 OpenGL ES基础知识 我们在第二个系列中已经对...这一小节,我们通过Android 提供的GLSurfaceview来进行视频的渲染。...时序问题,GlSurfaceview被inflater之后其EGL环境的准备没有那么早,通过post延迟解码渲染 glSurfaceView.postDelayed(new Runnable()...v ); 四、资料 音视频学习 (八) 掌握视频基础知识并使用 OpenGL ES 2.0 渲染 YUV 数据 YUV RGB 转换算法
但是,当你想为播放器做一些视频滤镜时,如加水印、旋转缩放等效果,使用 OpenGL ES 实现起来就极为方便。 ?...视频的解码流程 从流程图中可以看出,解码一帧图像后,首先将对图像进行格式转换,转换成 RGBA 格式,使用 OpenGL 或 ANativeWindow 可以直接进行渲染。...当然,使用 OpenGL 进行渲染时,为了提升性能,可以将格式转换放到 GPU 上来做(即 shader 实现 YUV 到 RGB 的转换),也可以使用 OES 纹理直接接收 YUV 图像数据,这里就不进行展开讲了...从之前介绍 EGL 的文章中,我们知道在使用 OpenGL API 之前,必须要先利用 EGL 创建好 OpenGL 的渲染上下文环境。...实际上,GLSurfaceView 类在生产开发中可以满足绝大多数的屏幕渲染场景,一般要实现多线程渲染的时候才需要我们单独操作 EGL 的接口。
supportsEs2 = configurationInfo.reqGlEsVersion >= 0x2000; val isEmulator = Build.VERSION.SDK_INT...|| Build.FINGERPRINT.startsWith("unknown") || Build.MODEL.contains("google_sdk...|| Build.MODEL.contains("Emulator") || Build.MODEL.contains("Android SDK...虽然在OpenGL中,我们画的是3D物体,但手机屏幕毕竟是一个平面。我们在生活中,看见的也只是一个平面。那么,一个3D物体,我们看到的应该是什么样的,取决于我们的投影矩阵如何设置。...图形和色彩数据 OpenGL并不是对堆里面的数据进行操作,而是在直接内存中(Direct Memory),即操作的数据需要保存到NIO里面的Buffer对象中。
正规的第三方库一般都会在接入文档中写好所需混淆规则,使用时注意添加。- 在运行时动态改变的代码,例如反射。比较典型的例子就是会与 json 相互转换的实体类。...前者是 SDK 提供的默认混淆文件(内容见附录1),后者是开发者自定义混淆规则的地方。 1....Android中的openGL 如何使用? 在了解OpenGl的使用之前,我们需要了解两个基本类别的Android框架:GlSurfaceView和GlSurfaceView.Renderer 3....设置渲染 在GlSurfaceView.renderer中绘制处理显示数据 5....是否记得上面我们绘制的图形坐标需要转换为OpenGl中能处理的小端字节序(LittleEdian),没错,转换矩阵就是用来将数据转为OpenGl ES可用的数据字节,我们将相机视图和投影设置的数据相乘,
从这篇文章开始,接下来会连载一系列的OpenGL相关博文,好好探讨如何在Android中进行OpenGL开发。...从前面的学习可以得知,每个Android界面上的控件,其实都是在某个视图上绘制规定的文字(如TextView),或者绘制指定的图像(如ImageView)。...而TextView和ImageView都继承自基本视图View,这意味着首先要有一个专门的绘图场所,比如现实生活中的黑板、画板和桌子。...然后还要有绘画作品的载体,比如显示生活中黑板的漆面,以及用于国画的宣纸、用于油画的油布等等,在Android系统中,这个绘画载体便是画布Canvas。...layout_width="match_parent" android:layout_height="match_parent" /> 接着在Activity代码中获取这个
在上一篇中,我们已经展示了Android中,通过OpenGL展示相机预览图片的方法。 这一篇主要展示,如何在预览的图片中,加入一些简单的特效。 特效概述 ?...override fun run() { i++ LogUtils.d("glsurfaceview...我们的pos转换矩阵,使用了单位矩阵。...而颜色转换矩阵,则使用了mEffectFilter.getColorMatrix(),即外部传入的颜色矩阵,进行随机颜色变换。...如顶点变换矩阵和颜色变换矩阵,然后根据时间或其他参数,对矩阵进行变换,从而达到改变渲染的目的。 如有问题,欢迎指正。
设 P0、P1 为手指在屏幕上滑动时前后相邻的 2 个点(注意屏幕坐标需要进行归一化转换为纹理坐标),r 为圆的半径,同时也用于控制矩形的宽度。...同样,使用相同的方法,也可以求出点 V2、V3 的坐标。...2 OpenGL 实现刮刮卡 OpenGL 实现刮刮卡效果的关键在于利用滑动轨迹构建网格,我们在 GLSurfaceView 类的 onTouchEvent 回调方法中获得滑动轨迹传入 Native...break; default: break; } } 在 Native 层构建网格,其中点 pre 和 cur 为滑动轨迹中相邻的...; float r = static_cast(EFFECT_RADIUS * imgSize.x); float x0 = p0.x, y0 = p0.y; float
解决方案: 1、GLSurfaceView GLSurfaceView是Android应用程序中实现OpenGl画图的重要组成部分。GLSurfaceView中封装了一个Surface。...而android平台下关于图像的现实,差不多都是由Surface来实现的 2、Renderer 有了GLSurfaceView之后,就相当于我们有了画图的纸。现在我们所需要做的就是如何在这张纸上画图。...如何在平面上画三维坐标的点或图形呢?OpenGL有一个坐标系,如下图: ? 我们需要将这个坐标系和我们的GLSurfaceView里的Surface做一个映射关系。...我们将这些数据放在一个一个数组缓冲区中,放好这些数据之后,再统一一起画出来。 下面,主要讲下,如何将顶点数据和颜色数据放入符合 Android OpenGL 的数组缓冲区中。...byte 数据缓冲区 不管我们的数据是整型的还是浮点型的,为了完成 BigEdian 到 LittleEdian 的转换,我们都首先需要一个 ByteBuffer。
dotnet --list-runtimes 详细信息: 可通过以下命令查看 SDK 版本和运行时版本。 你还将获得其他环境相关信息,如操作系统版本和运行时标识符 (RID)。...分两种版本类型: 试用版: 其中安装包名字中包含"ea" 例如龙芯基于上游社区 SDK 6.0.105 版本发布的 LoongArch64 ea 版本 deb 安装包名为: dotnet-sdk-6.0.105...-1-loongarch64.deb 如何在LoongArch平台支持SkiaSharp?...在项目配置文件中添加对SkiaSharp和HarfBuzzSharp的引用,参考命令如下: cd project-src # 进入到项目源码目录中 dotnet add package SkiaSharp.NativeAssets.Linux...手动下载,并复制到SDK目录 如果需要运行从其它平台(如x64)编译好的项目,则建议到龙芯Nuget源手动下载SkiaSharp和HarfBuzzSharp nupkg包,解压后将so文件复制到SDK目录下
下面我们一起来看看如何在Windows系统上对它进行安装与激活。借助PC或任何其他支持的硬件,AirServer可以将简单的显示器或投影机转换为通用屏幕镜像接收器。...AirServer通过将所有主要的屏幕镜像技术(如AirPlay,Google Cast和Miracast)实现为一个通用接收器应用程序来实现。...3、AirPlay + Google Cast + MiracastAirServer Universal for PC基于其现有的AirPlay和Miracast接收机功能,包括iOS 11兼容性,并增加了...Google Cast接收功能。...6、Android兼容适用于所有使用Miracast和Google Cast的Android设备,无需在设备上安装任何内容。
下面我们一起来看看如何在Windows系统上对它进行安装。借助PC或任何其他支持的硬件,AirServer可以将简单的显示器或投影机转换为通用屏幕镜像接收器。...AirServer通过将所有主要的屏幕镜像技术(如AirPlay,Google Cast和Miracast)实现为一个通用接收器应用程序来实现。...AirServer在您的环境中运行,您可以使用任何设备,如iPhone,iPad,Mac,Android,Nexus,Pixel,Chromebook或Windows 10 PC,将其显示屏无线屏幕镜像到大屏幕...Google Cast接收功能。...6、Android兼容适用于所有使用Miracast和Google Cast的Android设备,无需在设备上安装任何内容。
3,构键GLSurfaceView对象 GLSurfaceView中其实不需要做太多工作,实际的绘制任务都在GLSurfaceView.Renderer中了。...2.0时,你必须在GLSurfaceView构造器中调用另外一个函数,它说明了你将要使用2.0版的API: setEGLContextClientVersion(2); 另一个可以添加的你的GLSurfaceView...:顶点着色器使用的常量数据,不能被着色器修改,一般用于对同一组顶点组成的单个3D物体中所有顶点都相同的变量,如当前光源的位置。...对于每个图元,必须确定它是否位于视椎体内(3维空间显示在屏幕上的可见区域),如果图元部分在视椎体中,需要进行裁剪,如果图元全部在视椎体外,则直接丢弃图元。裁剪之后,顶点位置转换成了屏幕坐标。...总之,光栅化阶段把图元转换成片元集合,之后会提交给片元着色器处理,这些片元集合表示可以被绘制到屏幕的像素。 5 FragmentShader(片段着色器) ?
catch (CameraAccessException e) { e.printStackTrace(); } } } 复制代码 ---- 3.OpenGL中GLSurfaceView...public class TriangleGLView extends GLSurfaceView implements GLSurfaceView.Renderer { private Triangle...但好事多磨,并没有想象中的这么简单......surfaceTexture) { this.id = id; this.surfaceTexture = surfaceTexture; if (VERSION.SDK_INT...surface_texture) { ANDROID_SHELL_HOLDER->GetPlatformView()->RegisterExternalTexture( static_cast
领取专属 10元无门槛券
手把手带您无忧上云