zoukankan      html  css  js  c++  java
  • 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个顶点(三角面绘制的时候要按照逆时针顺序添加顶点)

    最终效果:

  • 相关阅读:
    9.siverlight中将集合绑定到UI元素
    HTML 小练习(智联注册页)
    开博了
    HTML 小练习(休假申请单)
    HTML 小练习(跨行跨列练习)
    HTML5 小总结2(手打)
    HTML5 小总结1 (手打)
    读《C程序设计语言》笔记9
    读《C程序设计语言》笔记7
    读《C程序设计语言》笔记5
  • 原文地址:https://www.cnblogs.com/eco-just/p/12773195.html
Copyright © 2011-2022 走看看