上一篇尝试搭建webgl游戏引擎-文字的创建
简单记录了一下文字和图片的创建。

顶点疑惑

文章写的道理非常的简单,但是实际开发的时候,还是有一些细节和API的要学习的。
其中有一点,我之前一直没有弄懂。
就是顶点

以前就知道像素,以为在shader里都是像素,在fs里用uv判断进行着色好使,
但是到了vs里就不好使了,问了别人才知道正常图片就4个顶点,uv判断不是0就是1。

后来经过不断学习,对顶点的认识也逐渐加深了一些。
才有了现在还可以尝试着空手创建一个正方体。

基于之前的内容,知道要创建正方体,

首先需要定义其顶点位置

正方体有6个面,8个顶点。
每3个面共享1个顶点。

按照这样的顺序,定义正方体中心为0点。
边长为2(这样是方便每个点都是由1组成的,感觉好算和好看一些)
就可以写出所有点的坐标了。
比如3号点的坐标是(-1,-1,1)。

然后定义顶点索引

webgl里,只有绘制点和绘制三角面的功能。
而每个面都是由4个顶点构成。
所以需要将4个顶点组合成两个三角形。
需要按照右手法则逆时针组合。
比如front面,就由(1,2,3)和(1,3,4)
这两个顶点组合构成一个面。
然后按照顺序,将所有三角面都指定一下。
当然传到数组里的时候,第一个点需要是数字0

有了坐标和索引就可以绘制正方体了

将坐标和索引作为buffer绑定到webgl渲染管线里就可以调用shader绘制了。
用到的是如下两个方法。

gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indicesBuffer);

其实想想,和绘制图片其实差别也不大

涉及到面的属性插值问题

前面说到,只需定义8个顶点就可以通过索引绘制一个正方体了。
不过在后面给正方体的面加颜色的时候就出问题了。
因为三个面共享一个顶点,如果给这个顶点设置颜色,那么三个面就会被影响并插值颜色。
(虽然可以做出好看的效果)
并且还有后面做光照法线的问题。
所以就需要更细致的顶点定义了
每个面独享4个顶点。
那么就是64=24个顶点。
当然也可以用8
3=24来算(原来的1个点被拆成3个)

虽然是24个点,但是其坐标还是只有8种。
索引也需要针对这么多点进行指定。不过有迹可循,循序都是一致的,知识索引号增加了而已。

面的贴图和光照

已经将正方体定义成24个顶点了,耦合度降低,内存占用增多。
可以做的事情就也更多了。
现在可以为正方体的各个面贴上图片。
贴图片的方法和普通的二维图片一样,只需要定义出各个顶点所对应的uv值即可。
创建纹理,绑定通道,设定源,设置参数,开启通道。
一顿操作下来,就可以将图片贴上去了。

光照会相对复杂一点,这个放到后面章节说。
这里提到一点是,正方体的旋转会导致法线的不对应。
需要对正方体的法线进行变换以对应坐标的变换。
这里就是矩阵最烦人的逆转置矩阵。
需要了解到矩阵的一些难懂的知识,反正查了很多文章,才鼓捣出来。
当然,如果是正交缩放,刚性变换。其实可以只用旋转矩阵就行。
因为旋转矩阵的逆转置矩阵就是自己。

结束

好了,就记录到这里。也写了不少字。
之后有想法了,要好好的把矩阵记录一下。
下一篇文章写简单的场景管理。

尝试搭建webgl游戏引擎-创建正方体相关推荐

  1. 尝试搭建webgl游戏引擎-起头

    为了满足自己的好奇心 准备自己尝试搭一个小的webgl网页游戏引擎 然后 记录自己开发的进程和遇到的问题 立个flag.用自己的引擎开发一款<跳一跳> 进度效果展示 目前包含了 初阶web ...

  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. webgl 游戏_如何选择 WebGL 框架和引擎?

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

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

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

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

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

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

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

  9. 如何制作自己的C++游戏引擎

    你想了解更多关于游戏引擎的知识.并自己来写一个吗? 这可是非常牛皮的一件事.为了帮助你学习,这里有一些C++库和依赖项的推荐,可以帮助你快速上手. 游戏开发一直是我的学生学习更高级计算机科学主题的好帮 ...

最新文章

  1. OpenCL,OpenGL编译
  2. 如果《赛博朋克2077》走进现实,人类如何摆脱AI的支配?
  3. 计算机组成原理:I/O的三大特性
  4. 阿里巴巴淘系开源大型3D家具数据集(3D-FUTURE)推动3D家居智能研究
  5. Codeforces 刷题记录(已停更)
  6. 可汗学院 统计学(12到34集)
  7. python3.5安装pip_python详细安装pip教程
  8. Premiere Pro Guru: Speed Changes Premiere Pro 大师教程之改变速度 Lynda课程中文字幕
  9. 遗传算法matlab_遗传算法和MATLAB (更新中)
  10. 剪轴凝截Analdeta.Tessera.Pro.v3.2.2.Build.2015.10.05.Win64 1CD
  11. 四种常见演讲结构对比
  12. 康师傅矿物质水黑幕:水源竟是自来水
  13. 开机后黑屏看不到桌面_电脑开机后黑屏不显示桌面,但可以用管理器运行程序,怎么解决...
  14. 什么是V2X?如何通过V2X技术实现5G智慧交通?(一)
  15. html flash 上传插件,flash 插件上传文件 | 浩然东方
  16. matlab三相电路基波图形,非正弦稳态对称三相电路如图a所示。A相电源电压为,其中基波角频率为ω1=1rad/s。负载参数为R=...
  17. 海外服务器跟国内服务器对比分别有哪些优势呢
  18. IDEA 快速返回上次查看代码的位置常用的IDEA快捷键(持续更新)
  19. 真的输了,五笔输入法败给拼音,它输给了时代
  20. delphi bpl插件系统开发

热门文章

  1. python批量循环图片识别_python如何进行批量图片处理
  2. Python有限体积流体开尔文-亥姆霍兹不稳定性
  3. 【5G核心网】 Identifiers 身份标识
  4. 如何让直播延迟低体验更好?做好这4点就可以了
  5. odoo移动端手机app的实现
  6. 万能SQL查询面试题
  7. {渡一教育}成哥HTML课程干货笔记整--2
  8. 结构阻尼比的4种常用测量方法概述
  9. ArduinoNano卡在上传,无法烧录
  10. python浪漫背景表白_Python网站浪漫表白神器那些鲜为人知的技术