OpenGL ES

Unity WebAssembly

三世轮回 提交于 2020-07-29 06:24:35
今天面试官问道对WebAssembly有没有了解,我印象中,WebAssembly是将C++代码转换成网页浏览器支持的代码,只有PC平台才支持。 Unity的WebGL就是WebAssembly了,来测试看看。 我这边是Unity2019. 导出后上传到服务器上测试。 PC上效果如下: 代码正常执行,打出Log。 从console信息来看,webGL对应的是OpenGL ES 3.0 . 然后另外的一个特点就是,在网络界面里面,看不到任何请求,这样或许可以避免被破解。 在手机上firefox提示不支持 但是点击ok之后就可以运行了。。 来源: oschina 链接: https://my.oschina.net/u/4299887/blog/4306984

[原] OpenGL ES 学习笔记 (二)

最后都变了- 提交于 2020-05-02 13:53:29
OpenGL ES 2 的渲染流程 实际绘制环境,流程细化 操作流程: 配置环境:   a. CAEAGLLayer 替换默认的 CALayer,配置绘制属性;   b. EAGLContext,即 Render Context ,设置成 OpenGL ES 2 API 环境,并使其成为当前活跃的上下文环境;   c. Frame Buffers / Render Buffer 的创建和使用,以及内容绑定;   d. EAGLContext 绑定渲染的窗口 (on-screen),CAEAGLLayer;   [注] CAEAGLLayer 继承于 CALayer, 专门用来渲染 OpenGL 、OpenGL ES 内容的图层;如果要使用,则要重写 layerClass 类方法。 在 EAGLContext 绑定 CAEAGLLayer 为渲染窗口之前,可以通过修改 drawableProperties 属性来改变渲染属性。   使用注意:   a. 修改 opaque 属性为 YES ( CAEAGLLayer.opaque = YES; );   b. 不要修改 Transform ;   c. 当横竖屏切换的时候,不要去修改 CAEAGLLayer 的 Transform 而进行 Rotate, 而是要通过 OpenGL / OpenGL ES 来 Rotate 要渲染的内容

视频直播Android端H264编码

余生颓废 提交于 2020-04-21 22:23:06
今天图玩智能为大家介绍一下音视频直播技术中的视频编码。我们为企业提供直播平台二次开发服务,搭建更完善的直播系统,欢迎随时咨询 www.toivan.com 在移动端通过Camera采集到视频数据后,我们不会直接将它发送出去。因为采集后的视频数据量非常大,比如 1280x720 分辨率的一帧数据,就有可能达到6M大小(码率越高,图像越清晰)。这6M数据如果送到网上传输,会给网络带来非常大的负担。 另外,人眼对图像的识别是有限的。拿手机屏幕来说,1K屏与2K屏对于人眼来说是看不出来它们之间的区别的,视频也是同样的道理。基于以上理论,就有了视频的压缩编码技术,通过对视频的有损压缩来达到减少数据大小的目的。 目前视频缩码最常用的是 H264。其它的还有 H265,VP8, VP9等,但用的人还比较少。 编码结构与方式 在Android系统下视频编码有硬编和软编两种方式。顾名思义,硬编是通过手机提供的硬件模块进行编码;软编就是通过软件程序进行编码。硬编的好处是编码快,不占用CPU资源。缺点是Android机型比较多,坑也比较多。软编正好与硬编相反,它的优点是无论什么机型都一样处理。缺点则是占用大量CPU资源。我们今天介绍的是硬件编码。 如何获取Camera中采集到的数据 从Camera获取视频数据有两种方式,一种是通过向Camera设置预览Callback来读取原始数据

OpenGL ES 3. OBJ文件渲染

丶灬走出姿态 提交于 2020-04-08 16:50:36
大家好,接下来将为大家介绍OpenGL ES 3. OBJ文件渲染。 上一节介绍了OBJ文件及其文本结构方面的内容,接下来将会介绍如何将OBJ文件加载到内存,并通过OpenGL的方式渲染出来。 1、OBJ文件解析类 由于OBJ文本文件是按照一定的规则储存的(详见上一节内容介绍),所以,我们首先介绍OBJ文件的加载解析,加载后用于渲染物体的 LoadedObjectVertexNormalTexture 类。介绍加载顶点坐标、三角形面、纹理坐标等信息。 import android.opengl.GLES30; //加载后的物体——仅携带顶点信息,颜色随机 public class LoadedObjectVertexNormalTexture { int mProgram;//自定义渲染管线着色器程序id int muMVPMatrixHandle;//总变换矩阵引用 int muMMatrixHandle;//位置、旋转变换矩阵 int maPositionHandle; //顶点位置属性引用 int maNormalHandle; //顶点法向量属性引用 int maLightLocationHandle;//光源位置属性引用 int maCameraHandle; //摄像机位置属性引用 int maTexCoorHandle; //顶点纹理坐标属性引用 String

“警告:iPhone应用程序应包含armv6架构”,即使使用构建配置集也是如此

我只是一个虾纸丫 提交于 2020-03-08 20:08:45
我已经有一段时间不得不调整项目构建设置了。 升级到最近的SDK后,我无法构建我的ad hoc分发配置。 Build生成此警告和错误: 警告:iPhone应用程序应包含armv6架构(当前ARCHS =“armv7”) iPhone / iPod Touch:应用程序可执行文件缺少必需的体系结构。 必须至少存在以下架构之一:armv6(-19033) 但是在我的项目中我认为我的设置正确: 架构是:标准(armv6 armv7) 基础SDK:最新的iOS(目前设置为iOS 4.2) 有效的架构:armv6 armv7 我清理了所有目标。 我很感激任何提示。 #1楼 对我来说也是一个痛苦的问题。 花了大约一个小时试图建立和重建 - 没有快乐。 最后我不得不这样做: 将基础SDK升级到最新版本(在我的iOS 5中) 重启xCode 清洁和建造 有效! 我猜这是关于arm6,arm7的一堆行话,因为看起来我的项目对两者都有效,至少设置似乎这么说),我的猜测是这是一种玩世不恭的方式来解决我们的技术问题,我们不知道我们理解,所以我们只选择简单的选项并定位最新的iOS(适合Apple,让更多人更新).... #2楼 哇,我每6个月更新/提交一次应用程序。 每次我这样做,我都要学习“新”的方式来做到这一点...... 运行iOS 5.1和Xcode 4.3.2时,与上述问题相同 谢谢你的帖子!

OpenGL学习日记

自作多情 提交于 2020-02-29 02:57:21
这是我入门教程, learning Opengl .读了前三节课,感觉不错。前三节课细致入微 的讲了如何配置opengl开发环境和历史渊源。 不过在第一大节的第三节课 Hello-Window 中碰到了一个问题。问题代码如下: glfwInit(); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); glfwWindowHint(GLFW_RESIZABLE, GL_FALSE); 其中在我的电脑上WindowHint的profile属性值需设置为 GLFW_OPENGL_ANY_PROFILE ,否则glfwCreateWindow返回NULL。 查错 官方的说法:GLFW_OPENGL_PROFILE specifies which OpenGL profile to create the context for. Possible values are one of GLFW_OPENGL_CORE_PROFILE or GLFW_OPENGL_COMPAT_PROFILE, or GLFW_OPENGL_ANY

SetPass Calls/Batches/Draw Calls

走远了吗. 提交于 2020-02-26 18:49:03
1. SetPass Calls SetPass Calls表示材质切换的次数,通常要远小于Batches和Draw Calls。有时会出现大于的情况,可能是因为粒子特效播放结束了,但是没有SetActive False,导致摄像机还会遍历到,就还会渲染。 2. Batches Batches表示将一些渲染状态的小物体合成一个大物体的次数,一般分为静态合批和动态合批。 静态合批要求使用同样的材质球,并且在编辑器里设为static batching,通常是有顶点上限的(64k)。 动态合批是在物件小于300面的条件下(不论物件是否为静态或动态),在使用相同材质球下,Unity就会自动帮你合合并成一个 Batch 送往 GPU 来处理。 Unity官方总结了25个导致合批失败的原因: Additional Vertex Streams — 对象使用MeshRenderer.additionalVertexStreams设定了额外的顶点信息流。 Deferred Objects on Different Lighting Layers — 该物件位于另一不同的光照层中。 Deferred Objects Split by Shadow Distance — 两个物体中有一个在阴影距离范围内而另一个不是。 Different Combined Meshes —

还在使用OpenGL ES做渲染,你Out了,赶紧来拥抱Vulkan吧~

若如初见. 提交于 2020-01-08 20:54:22
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 背景介绍 Vulkan是Khronos组织制定的“下一代”开放的图形显示API。是与DirectX12能够匹敌的GPU API标准。 Vulkan是基于AMD的Mantle API演化而来,眼下Vulkan 1.0标准已经完毕并正式公布。下图是Vulkan的效果: 上一代的OpenGL|ES并不会被遗弃。还会继续发展,非常有可能OpenGL|ES变为Vulkan的简化API。 Vulkan的优势 与OpenGL|ES相比Vulkan的优势: 1、更简单的显示驱动层 Vulkan提供了能直接控制和訪问底层GPU的显示驱动抽象层。显示驱动仅仅是对硬件薄薄的封装,这样能够显著提升操作GPU硬件的效率和性能。之前OpenGL的驱动层对开发人员隐藏的非常多细节,如今都暴露出来。Vulkan甚至不包括执行期的错误检查层。驱动层干的事情少了,隐藏的bug也就少了。 2、支持多线程 Vulkan不再使用OpenGL的状态机设计,内部也不保存全局状态变量。显示资源全然由应用层负责管理。包括内存管理、线程管理、多线程绘制命令产生、渲染队列提交等。 应用程序能够充分利用CPU的多核多线程的计算资源,降低CPU等待,降低延迟。带来的问题是。线程间的同步问题也由应用程序负责,从而对开发人员的要求也更高。 3、预编译Shaders

opengl es3.0学习篇八:纹理

試著忘記壹切 提交于 2020-01-07 18:31:20
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 学习内容来源and参考 opengl es 3.0编程指南 https://www.jianshu.com/p/4d8d35288a0f 3D图形渲染最基本的操作之一是对一个表面进行纹理,纹理可以表现只从网格的几何形状中无法得到的附加细节。在opengl es3.0中的纹理有多种形式:2D纹理,2D纹理数组,3D纹理以及立方图纹理。 2D纹理 2D纹理是一个图像数据的二维数组。一个纹理单独数据元素称作“纹素”(Texel)。图像中的每个纹素根据基本格式和数据类型指定。如果用2D纹理渲染时,纹理坐标用作图像中的索引。2D纹理的纹理坐标用一对2D坐标(s,t)或者(u,v)来表示,这些坐标用于查找一个纹理贴图的规范化坐标。 纹理坐标如下所示: 纹理图像的左下坐标由(0.0,0.0)决定,右上角坐标由(1.0,1.0)指定。在[0.0,1.0]之外的坐标是允许的,在区间之外的纹理读取行为由纹理包装模式决定。 立方图纹理 立方图是由6个单独2D纹理面组成的纹理。对于立方图纹理贴图,一般使用环境贴图特效,即在物体上的倒影通过使用一个表示环境的立方图渲染。。通常,生成环境贴图所用的立方图通过在场景中央放置一个摄像机,从6个轴方向(+x,-x,+y,-y,+z,-z)捕捉场景图像并将结果保存在立方体的每个面上。 3D纹理