为了满足自己的好奇心
准备自己尝试搭一个小的webgl网页游戏引擎
然后 记录自己开发的进程和遇到的问题

立个flag。用自己的引擎开发一款《跳一跳》

进度效果展示

目前包含了

  • 初阶webgl管理器
  • typescript+webpack框架
  • 初阶资源、实体、组件架构
  • 文字标签
  • 2d图片
  • 方盒子
  • 初阶光照
  • 初阶节点树

创建webgl管理器

主要参考了《webgl编程指南》这本书的第九章第二节

简单来说,需要如下步骤来做一个webgl地基

  • 利用准备好的shader字符串,用webgl创建顶点和片元shader
  • 创建webgl程序
  • 编译shader并附加到webgl程序
  • 链接webgl程序上下文

此步遇到的问题
第一个问题是加载和解读shader字符串。
因为需要把shader作为单独的资源来处理,所以创建了*.glsl来保存shader。
然后利用了webpack的raw-loader来加载shader。
我还想把顶点和片元shader写在一起。
所以就用特殊的分隔符来分开了顶点和片元内容。
然后用正则根据分隔符提取顶点和片元内容,提供给webgl管理器。

用的正则是:

some.glsl
vertex%{void main(){gl_Position=vec4(0,0,0,1.0);}
}%
fragment%{void main(){gl_FragColor=vec4(1.,1.,1.,1.);}
}%
some.ts
const vertex = shader.match(/vertex\%\{([^\%]+)\}\%/)![1].replace(/^[^# ]+/, '');
const fragment = shader.match(/fragment\%\{([^\%]+)\}\%/)![1].replace(/^[^# ]+/, '');

很简单,但是目前还是比较有效。

第二个问题是glsl版本问题
因为想要使用in out的功能。所以需要改版本号。
就是在shader内容第一行加上#version 300 es这样的东西。
但是因为《webgl编程指南》没有用到,所以在csdn里查了很久。
也不是很懂。一直没整出这一行来。
很长时间是只写了#version 300,怎么都会报错。
不让这不让那的。
最后查glsl版本的文章,才发现需要加es标识,表示嵌入式系统
用于Android, iOS, WebGL
ES是:
OpenGL for Embedded Systems
参考:webgl版本

没有系统学习过相关知识,所以解决问题还是很耗费时间。

绘制内容基础

如果要绘制基础形状,需要在这个基础上增加一些功能:

  • 在顶点shader内添加坐标的输入,uv的输入。
  • 启动对应的webgl程序。(一套shader对应一个程序)。
  • 用代码给webgl程序添加对应的数据
  • 清除背景,并绘制形状

顶点信息输入可以用layout(location=x)类型 名称 来声明
这样在代码里就可以直接设置,不用获取地址了。

要绘制多个点,一般采用buffer的形式,可以一次性给顶点程序传入很多数据。

此步遇到的问题
这一步主要遇到的问题是程序切换的问题。
为了减少开销,创建数组和buffer和贴图等都只做一次。在切换程序后进行绑定。

——————
ok。先写到这。最近打球腰闪了。好久没运动了。
下一篇写文字的创建

尝试搭建webgl游戏引擎-起头相关推荐

  1. 尝试搭建webgl游戏引擎-创建正方体

    上一篇尝试搭建webgl游戏引擎-文字的创建 简单记录了一下文字和图片的创建. 顶点疑惑 文章写的道理非常的简单,但是实际开发的时候,还是有一些细节和API的要学习的. 其中有一点,我之前一直没有弄懂 ...

  2. 【iOS-cocos2d游戏引擎开发之一】搭建cocos2d游戏引擎环境,创建第一个HelloWorld!...

    最近几天仔细了解了iOS游戏开发引擎,常用的cocos2d,Unity引擎,那么Unity是非免费的,而cocos2d则是免费开源的: 最后促使我选择cocos2d的原因有两点: 1.最重要的原因是它 ...

  3. 基于TypeScript + WebGL 游戏引擎 笔记

    一直从事Unity游戏开发,其他领域只能业余时间学习一下. TypeScript 我很喜欢的语言,可以使用它写基于Node的游戏服务器. 在Web前端的火热程度就更不用说了. WebGL早就不再是游戏 ...

  4. 搭建Unity3D游戏引擎开发工具系列:UI框架

    Unity3D 开发工具系列 UI框架:UI基类UIBase Unity3D 开发工具系列 UI框架:UI管理UIManager Unity3D 开发工具系列 UI框架:MVC模式 Unity3D 开 ...

  5. LIBGDX游戏引擎平台介绍与搭建

    LIBGDX官方下载地址:http://libgdx.badlogicgames.com/ 一.LIBGDX简介 根据官网的介绍,LIBGDX是一个为所有支持的平台提供一个统一的API的java游戏框 ...

  6. webgl 游戏_如何选择 WebGL 框架和引擎?

    数据可视化Sugar-百度智能云​cloud.baidu.com Sugar 是我们从零开始开发的 BI 产品,可以不用写 SQL 制作报表及大屏页面,上半年我们发布了三维场景功能,可以放到大屏中展现 ...

  7. webGL、webGPU、封装、渲染引擎 three.js、游戏引擎,定位是游戏开发,在前面的渲染引擎基础上,还提供了骨骼动画、物理引擎、AI、GUI 等功能,以及可视化编辑器来设计关卡,支撑大型游戏

    https://zhuanlan.zhihu.com/p/162878354 如何选择 WebGL 框架和引擎? ​ 知道得越多,不知道的就更多了 数据可视化Sugar-百度智能云 ​cloud.ba ...

  8. html5 3d游戏引擎演示,HTML5、JavaScript 3D游戏引擎和框架

    由于很多人都在用JavaScript.HTML5和WebGL技术创建基于浏览器的3D游戏,所有JavaScript 3D游戏引擎是一个人们主题.基于浏览器的游戏最棒的地方是平台独立,它们能在iOS.A ...

  9. 最受欢迎的webgl 3d引擎

    1.BabylonJS: 强调做"one of the most powerful, beautiful, and simple Web rendering engines in the w ...

最新文章

  1. 如果连接远程的mysql数据库连不上,可用下面的方法试下
  2. 实现类似表格内容动态滚动效果
  3. 读债务危机0806:2007到2011年泡沫蔓延
  4. Win10操作系统不能访问共享文件夹
  5. 适用于macOS的Qt
  6. 压力测试时候Linux系统参数的调优
  7. scanf和gets的差别
  8. 水晶报表取消输入密码最后测试结果
  9. php javascript 不执行,javascript – 不工作php按钮来执行操作
  10. 转帖:DotNet 资源大全中文版
  11. 自学python能找到工作吗-自学Python如何找工作?多久能找到工作?
  12. 在centos6.5上编译安装httpd-2.4和2.4版本特性介绍
  13. MySQL8.0数据库基础教程(二)-理解关系
  14. 8.2 自制操作系统: risc-v Machine寄存器说明mstatus和mstatush
  15. 字节教育开辟新业务线,推出“闪电搜题”App可拍题和自习
  16. 云计算就业方向及前景怎么样
  17. linux文件权限管理实验心得,Linux+文件权限管理实验
  18. 阿里云个人站点基于nginx代理搭建https协议支持
  19. 2.天猫商品数据爬虫(已模拟登录)
  20. Kafka是如何实现高性能的?

热门文章

  1. Web App、Hybrid App与Native App
  2. Win10下载安装jdk11及环境变量配置
  3. 哈工大2022春计算机系统大作业
  4. SpringSecurity前后端分离(包含token和验证码登录)
  5. 计算机知识科普讲解,计算机组成原理-CPU-CPU知识科普:秒懂主频、核心、线程、缓存、架构详解...
  6. big mac sur 免驱显卡_big sur值得升级吗?千万不要手残升级Mac Big Sur!坑你没商量...
  7. 正交表方法在创建测试套件上的应用(2)
  8. Java充电宝模型设计,java共享充电宝管理系统ssm框架
  9. QQ对战平台的“智能”
  10. IP地址归属地查询接口