webgl进阶之旋转的立方体

Posted 桔子桑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webgl进阶之旋转的立方体相关的知识,希望对你有一定的参考价值。

与其说是webgl,倒不如说是图形学,毕竟语言只是一个工具。

用过three.js或者其他三维库来开发三维程序的都知道,对于标题所指,其实实现起来很简单,拿three.js来说,一段很简短的代码就能实现:

这里也感谢作者和其他开源工作者做出的贡献,因为他们的付出使得我们在web端开发三维程序的门槛大大降低,向大佬们致敬!!!

那么这么一个简单的立方体,究竟是怎样通过webgl实现的呢,今天,我们就来稍加说明一下(默认您已经了解基本的webgl和图形学相关知识,如果没有,请先看完《webgl权威指南》这本书)

1.MVP矩阵

即modelMatrix(模型矩阵)、viewMatrix(视图矩阵)、projMatrix(投影矩阵)

模型矩阵控制模型的旋转、平移;

视图矩阵控制相机相关的参数(position、lookAt、空间坐标系XYZ轴的方向);

投影矩阵控制三维物体观看的效果(透视相机、正交相机)。

所以一个空间三维几何体,在这些矩阵的共同作用下,就展示在我们面前了

注意:矩阵乘法不满足交换律,所以三个矩阵相乘的顺序不能颠倒

gl.position = projMatrix * viewMatrix * modelMatrix * vec4(a_Position,1.0);

three.js中将模型矩阵和视图矩阵的乘积作为参数传到着色器里,所以我们经常会看到three.js的shader材质中顶点着色器中会有这样固定的一段代码:

2.构建立方体mesh

我们知道,三维场景中的每个mesh都是按照三角面来绘制的,所以,如果一个立方体长这样的话:

虽然每个面只有4个顶点,但是因为要按照三角面去绘制,那么画一个矩形面要传6个顶点数据

 

正反面区分:

绘制三角形,顶点顺序还是有所讲究的,

0-1-3 和 0-3-1绘制出来的三角面是有区别的,那就是顺时针和逆时针的区别,

所以,我们绘制面的时候,脑海中想象的要是外面儿并且按照逆时针绘制三角面,这样这个面才会如我们所想的那样展现出来。

所以绘制一个立方体要有如下步骤:

6个矩形面--->12个三角面--->36个顶点(三角面绘制的时候要按照逆时针顺序添加顶点)

 

最终效果:

 

以上是关于webgl进阶之旋转的立方体的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 webgl 和 glMatrix 围绕世界轴旋转对象

在 WebGL 中播放视频

Opengl ES 1.x NDK实例开发之七:旋转的纹理立方体

webGL入门学习之创建场景

转 CATransform3D 矩阵变换之立方体旋转实现细节

webgl想要做六个球体在立方体的六个面上