使用参考资源

CocosCreator v3.6.2
cocomat 腾讯开源公共组件框架
Cocos Creator 3D特制 Video MeshRender 播放器(Cocos商店购买)
TcPlayer 腾讯开源 Web 播放器
视频流 hls 库

正文

场景漫游引发的思考

元宇宙,虚拟世界。OK,不同的人有不同的理解!在一个阳光明媚的上午,我偶然浏览到了一个炫酷的场景漫游视频,引发了我在 cocos 上实现的思考:

  1. 在 cocos 里实现场景漫游需要什么?
  2. 在 cocos 里能漫游预览什么?
  3. 社区里大家都实现过什么,有哪些没实现的?
  4. 在游戏里玩游戏,或者在游戏里刷视频是不是很好玩?

基础的漫游解决方案

3D 的场景漫游,首先最核心的就是摄像机运动,主角移动。逛逛商城,发现摇杆组件大家都封装过,有解决方案了。

摄像机位置移动,我想到了动画编辑器,或者是其他工具导出的一系列 Vec3 坐标点,让摄像机沿着移动,照着切线方向。也有解决方案了。

模型、粒子、模型动画,这些静态展示的,美工建模师都可以输出。

对了,有些场景需要 3D 文本,还有 2D 的 Spine 动画以 3D 的形式做展示,尝试解决了下这个。

cocos 的模型是直接放的,摄像机是动画编辑器编辑好路径与速度与旋转,进行播放的;文字与 spine 是单独一个分组摄像机渲染到一个 renderTexture 上,然后赋给材质,用 3D 物体平面渲染的 Plane。

如下图,一个摄像机分组为 show2,然后仅渲染该分组,渲染后的纹理赋值给材质,材质挂到 plane 上:

核心代码:

start() {this.renderTexture = new RenderTexture();this.renderTexture.initialize({ width: 720, height: 720 });this.show2Camera.targetTexture = this.renderTexture;this.show2Material.setProperty('mainTexture', this.renderTexture);
}

OK,文本和 spine 搞定了,相信大家也发现了上面演示 gif 最后的视频渲染,视频渲染是最有意思的。

视频渲染尝试

我先简单说说关于视频渲染到 webgl 里的原理:

在 Web 平台,我们知道 video 标签赋予一个 src 后便可以播放视频,那么想个办法把 video 标签的播放内容采集,形成纹理传进去呗!在 webgl 里渲染图片,我们会这样:

const gl = canvas.getContext('webgl');const image = new Image();
image.src = "./kuokuo.png";
// 图片加载完渲染到 webgl
image.onload = function () { // ... 省略顶点配置,shader书写gl.activeTexture(gl.TEXTURE0);// 创建纹理对象 const texture = gl.createTexture();gl.bindTexture(gl.TEXTURE_2D, texture);// 核心gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);// ... 省略配置 texture// 绘制 gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
};

大家可以看到,texImage2D 的最后一个参数就是原生的 image 对象,实际上就是绑定纹理数据进去。视频也是同理,texImage2D 这个方法最后一个参数可以直接传入 video 标签。那就 OK 了,只剩下最后一步,如何在 cocos 中实现?

在 CocosCreator v2.x 版本中,因为是 js 引擎代码,底层暴露不多,需要重写类。具体实现可以直接看 cocomat 封装的 CCMVideo 组件,其核心代码:
https://github.com/cocos/cocomat/blob/main/coco-mat/lib/CCMVideo/CCMVideo.ts

this.impl = document.createElement('video');
this.impl.crossOrigin = 'anonymous';
this.impl.autoplay = false;
this.impl.loop = false;
this.impl.muted = false;
// ....this.update = dt => {if (this.isInPlaybackState()) {gl.bindTexture(gl.TEXTURE_2D, this.textures[0]._glID);// 核心gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this.impl);// @ts-ignorecc.renderer.device._restoreTexture(0);}
};

大家可自行查看。

关于 CocosCreator v3.x 版本中,引擎用 ts 重写了,底层也暴露了不少能力,就咱们谈的这个视频渲染,可以取 cc 下的 gfx 模块:

import { gfx } from 'cc';
// 就是上述的 gl
gfx.deviceManager.gfxDevice;
gfx.Device;// 官方封装方法
gfx.Device.createTexture(...args);
gfx.Device.copyTexImagesToTexture(...args);

研究了好一阵终于搞出来,代码写的很乱,想整理下发官方商城,但发现有一个大佬已经写好了。针不戳!现在你的代码是我的了!

链接:https://store.cocos.com/app/detail/3726

原本研究就到此结束了,休息一下,搂着老婆看会电视!但是看着看着,我心想:在元宇宙里看电视该是多么炫酷的一件事呀!!!湖南卫视!整!

直播渲染尝试

先研究下网上已经有的直播拉流解决方案:m3u8,rtsp,rtmp,flv,mp4 等等,那大厂都用啥呢?去 B 站直播间逛下:

就决定是你了皮卡丘(m3u8),百度一波 m3u8 直播拉流的实现,发现了腾讯的 TcPlayer + hls 的实现方式,原生的 html 实验很简单,引入两个 SDK 然后 new 一个 TcPlayer 传入直播拉流地址就可以:

<!DOCTYPE html>
<html>
<head> <meta charset="utf-8"> <title>直播测试</title> <script src="TcPlayer-2.3.3.js" charset="utf-8"></script><script src="hls.min.js" charset="utf-8"></script>
</head><body><div id="kuokuo_test_video" style="width:100%; height:auto;"></div><script>window.kuokuoPlayer = new TcPlayer('kuokuo_test_video', {m3u8: "http://219.151.31.38/liveplay-kk.rtxapp.com/live/program/live/hnwshd/4000000/mnf.m3u8",autoplay: true,width: '500', //视频分辨率宽度height: '500' //视频分辨率高度});</script>
</body>
</html>

引入到 Cocos 里:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P60qPiko-1668587004317)(https://www.kuokuo666.com/blogImgs/imgs-22/1115/show4.png)]

然后魔改了一波 Video MeshRender 播放器的代码,原理就是把我新建的一个用来播放湖南卫视直播的 video 标签,替换掉渲染的那个 video 标签,采集内容的原理都是一样的。

最终实现的效果:

舒服,可以在游戏里看电视直播了!

更多文章与分享

个人网站:www.kuokuo666.com

2022!Day Day Up!

元宇宙-漫游世界后与Cocos一起看湖南卫视直播相关推荐

  1. 元宇宙012 | 世界人工智能大会之元宇宙论坛:技术篇

    Hello, 大家好,这里是壹脑云科技圈,我是鲤鱼~ 世界人工智能大会(WAIC)由国家发展和改革委员会.工业和信息化部.科学技术部.国家互联网信息办公室.中国科学院.中国工程院.中国科学技术协会和上 ...

  2. iNFTnews丨NFT的影响力有多广?麦当娜、史泰龙和贝克汉姆这些老牌偶像进入了NFT、元宇宙的世界

    麦当娜(Madonna ),意大利裔美国女歌手.词曲作者.演员,欧美"四大天后"之一.她在 Twitter 上展示了一个与她的形象非常相似的"无聊猿游艇俱乐部(Bored ...

  3. 元宇宙大热后将陷低潮, 虚实互联网更准确, 2030前后才可能全面热启

    作者:DCCI*未来智库.未来实验室专家胡延平 来源:今日头条 3个判断.3个野心.技术要件6个瓶颈:虚实互联网这个概念元宇宙信徒听起来有些扎心但真实恰当...... 扎克伯格称Facebook要从社 ...

  4. 元宇宙|世界人工智能大会之元宇宙论坛:设计篇

    Hello,大家好~ 这里是壹脑云科研圈,我是鲤鱼~ 世界人工智能大会(WAIC)由国家发展和改革委员会.工业和信息化部.科学技术部.国家互联网信息办公室.中国科学院.中国工程院.中国科学技术协会和上 ...

  5. 元宇宙漫游指南-区块链构建元宇宙基础设施,一文搞清楚元宇宙和区块链

    1.区块链和元宇宙 1.1 区块链和元宇宙的概念 1.1.1 元宇宙大事件 Roblox第一支股票上市 Roblox公司2004年成立,2021年3月份在纽交所直接上市.在他们自己的描述中,Roblo ...

  6. 带你走进神奇的元宇宙的世界

  7. 从世界数字大脑形成看元宇宙未来趋势

    来源:腾云 中国科学院虚拟经济与数据科学研究中心研究组成员. 远望智库数字大脑研究院院长.腾云智库专家 刘  锋 前言:21世纪,科技生态呈现出越来越多的类脑特征,各种前沿科技概念和技术正在形成一个世 ...

  8. 在元宇宙中打造“艺术”的世界

    作者 | 禾木木 每个人心中都有一个自己的元宇宙: 有的人希望在元宇宙中找到极致体验,弥补现实的遗憾: 有的人希望在元宇宙中躲避世俗的纷扰: 有的人希望在元宇宙中找到新的商机,开创新的商业帝国: 有的 ...

  9. 元宇宙十问十答:元宇宙会成为灾难让世界走向灭亡吗?

    近段时间,元宇宙概念可谓席卷了各位的微信和朋友圈,仿佛不懂元宇宙就不好意思去跟别人来聊天,连Facebook也借着这股风向,一举将公司名改成了Meta:那元宇宙到底什么?现在大家讨论的元宇宙离我们还有 ...

最新文章

  1. MFC常用类、成员函数、数组类、Cstring类、CTime类、CPoint类
  2. 扶凯:海量视频和用户时代的CDN
  3. G. GCD Festival(莫比乌斯、欧拉函数)
  4. 将解决方案和项目放在同一目录中_借助卡第那思3D电子目录,巴鲁夫使用CAE数据扩展其产品目录...
  5. [CLR团队公告]CLR基础研究团队,邀请您的加入
  6. win8.1重装系统计算机管理打不开,Windows8计算机打不开192.168.0.1怎么办
  7. kylin cube 增量和全量
  8. 关于SQLyog创建的数据库不显示的问题
  9. 第二节:使用IDEA创建React APP 并启动
  10. 华为交换机Hybird 与 单臂路由
  11. java 工作流开发框架比较
  12. 《Nature》《Science》封面发表的AI相关文章
  13. webstorm bable
  14. html5 预览图片原理,html5实现图片预览和查看原图
  15. 一个小的java作业,第一次上传CSDN,原创的
  16. DTM使用途中的bug记录
  17. android三星定位闪退,三星手机闪退问题7种修复方法
  18. 介孔二氧化硅纳米球 Mesoporous silica nanosphere 的介孔二氧化硅纳米球
  19. springboot配合socket实现icap协议通讯
  20. 分享:虚拟筛选常用化合物库

热门文章

  1. 20221107学习word2vec
  2. OKRs (Objectives and Key Results)
  3. 安装SSL证书可以解决浏览器提示的不安全警告
  4. NBA篮球经典动画gif系列连载之三
  5. C# 面试EF 和mvc
  6. 基于Netty的UDP服务端开发
  7. ur机器人编程-坐标系
  8. 使用Nuxt.js框架开发(SSR)服务端渲染项目
  9. 更改Outlook OST数据文件位置
  10. sql/hana批量存入表(每日一总)