书中340页,开始讲到层次模型(关节模型),也就是整个物体,可以自由控制其各部位单独运动,就像关节一样,互不干扰或者有一定关联。

就像图中,左右键控制整个物体(arm1和arm2)的Y轴旋转,上下键控制arm2的X轴旋转。

如果你只是扣教程上的字眼的话,会指出上面这句话是错的,但是如果你理解了教程中的代码之后,你会说我是对的。

一、教程中的相关代码

对于两段手臂,分别是这样画的,首先,传入一个位于(0,0,0)立方体cube的顶点和其他数据(处理颜色的相关数据,如基色、环境色、向量等,这里不做讨论)

arm1:cube沿着Y轴向下移动12个单位距离;

   设置Y轴旋转矩阵;

   绘制。

arm2:cube沿着Y轴向下移动12个单位距离;

     设置Y轴旋转矩阵;

     沿着Y轴向上移动10个单位距离;

     设置Z轴旋转矩阵;

     设置缩放矩阵(矩形变大);

     绘制。

我们看到,绘制第二个物体的前两步和第一个是一样的,这是因为在绘制这两个立方体的时候,公用了一个矩阵对象(减少内存开销);

绘制完第一个立方体之后利用平移矩阵将cube移动回原点位置(差2个单位是为了使两个图形有贴合感);

为了使arm2实现按下↑↓的时候实现X轴旋转,因为前面已经有一个Y轴旋转矩阵了,所以要实现最终的X轴旋转,需要加一个Z周旋转矩阵,这就就是代码的189行。

如上图所示A点绕Y轴旋转180度之后到达B点,

那么要实现A点绕X轴旋转180度到达C点,有两种方式:

①直接A点乘以 X轴旋转矩阵到达C点;

②A点乘以 Y轴旋转矩阵 到达B,再乘以 Z轴旋转矩阵到达C点。

第二种也是教程中案例所使用的方法,这种方法减少了内存开销,但是工作量却大了,因为始终都是基于一个矩阵变量做的先后转换,并且对绘制的先后顺序也有一定要求。

二、数个部件下的处理

在上面的例子中,只有两个立方体,它们都是基于一个立方体cube的顶点数据来绘制的,当部件很多并且形状相差很大的时候(不方便用简单的缩放来实现);

那么就需要为每个部件单独提供顶点数据了(用多个缓冲区对象来存储各自的顶点数据),此时他们的绘制过程差不多是这样的(还是使用一个模型矩阵对象):

①所有的部件都是在圆点

②放置第一个部件于最中间(头),并且绘制

③放置身体与最下面,并绘制

④放置嘴巴,并绘制

⑤放置鼻子,并绘制

⑥放置眼睛,并绘制,

这里需要注意,绘制眼睛都是基于上图中蓝色圈往左上方移动一次,绘制一次,然后往右上方移动一次绘制一次;

在这里,为了避免移到左上方再移回来再移到右上方,这里使用了矩阵栈;

对于从蓝色圆位置到左上角的位移矩阵,我们存到一个数组中(模拟入栈),然后画左边眼睛的时候,将蓝色位置的矩阵乘以数组中的位移矩阵从而实现左上方移动;

接下来,我们对数组进行出栈操作(pop),并且push一个右上方移动的矩阵,这样画右边眼睛就可以直接再次将蓝色位置的矩阵乘以数组中的位移矩阵从而实现右上方移动。

就这样,我们用一个矩阵对象完成了对所有部件的绘制工作。

转载于:https://www.cnblogs.com/eco-just/p/10705391.html

WebGL编程指南理论分析之物体层次模型(局部运动)相关推荐

  1. 【《WebGL编程指南》读书笔记——着色器和程序对象的准备】

    本文为<WebGL编程指南>第九章下半部分读书笔记 总目录链接:https://blog.csdn.net/floating_heart/article/details/124001572 ...

  2. 【《WebGL编程指南》读书笔记-WebGL入门】

    <WebGL编程指南>读书笔记 目录链接:https://blog.csdn.net/floating_heart/article/details/124001572 第二章 WebGL入 ...

  3. 【WebGL】《WebGL编程指南》读书笔记——第5章

    一.前言        终于到了第五章了,貌似开始越来越复杂了. 二.正文         Example1:使用一个缓冲区去赋值多个顶点数据(包含坐标及点大小) function initVerte ...

  4. 【WebGL】《WebGL编程指南》读书笔记——第2章

    一.前言 最近看了<WebGL编程指南>这本书,发现还是很有意思的,故每章阅读后做个笔记. 二.正文 Example1:在canvas中绘制2D矩形 <!DOCTYPE html&g ...

  5. 【WebGL编程指南】GLSL ES语法基础

    [WebGL之巅]20-GLSL ES着色器语言语法详解 查看原文:[WebGL之巅]20-GLSL ES着色器语言语法详解 对应<WebGL编程指南>第六章 GLSL ES 总览 本章知 ...

  6. 【《WebGL编程指南》读书笔记-颜色与纹理】

    本文为读书笔记第五章 总目录链接:https://blog.csdn.net/floating_heart/article/details/124001572 本章很长,讨论了前言所述的三个问题,三个 ...

  7. webgl编程指南源码_ThreeJS 源码剖析之 Renderer(一)

    引子? 最近,忽然想起曾在 WebGL 基础系列 文章中立下 flag:"后续还打算出 <ThreeJS 源码剖析> 系列"(特意翻出原话?),项目忙了一阵后,便决定开 ...

  8. WebGL编程指南-30 三维物体雾化效果,立方体雾化效果

    1.demo效果 2.相关知识点 2.1雾化相关概念 雾化的方式有很多种,这里使用最简单方式:线性雾化,在这里介绍一些相关概念 视点 查看物体的眼睛(摄像机) 雾化的 起点 表示开始雾化之处 雾化的 ...

  9. WebGL编程指南-24 同时使用漫反射光和环境反射光、立方体平移旋转缩放变换时漫反射光和环境反射光处理

    1.demo效果 此效果是上一章绘制的立方体基础上,向Y轴方向平移一个单位,然后绕Z轴旋转30度. 如上图,归纳一下物体坐标变换法向量变化的规律如下 平移变换, 法向量不会改变 旋转变换, 大多数情况 ...

最新文章

  1. 远控免杀专题 13----zirikatu免杀
  2. 论文浅尝 | 基于多模态关联数据嵌入的知识库补全
  3. Jar运行的几个方法
  4. 华为牛人在华为工作十年的感悟!--总结[华为的10年工作]
  5. css 左边阴影_css揭秘-用户体验
  6. 【Proteus仿真8086】并行接口芯片8255
  7. python 的文件类操作
  8. 【OpenCV学习笔记】【教程翻译】一(基于SVM和神经网络的车牌识别概述)
  9. psd导出jpg太大_【设计】PSD导出JPG文件非常大解决办法
  10. java 时间英文格式_Java SimpleDateFormat 中英文时间格式化转换
  11. 48个快速操作office技巧
  12. 中国历代各王朝鼎盛时期疆域
  13. word格式刷刷完格式后公式上凸了怎么办?
  14. 2016 Youtube 推荐系统介绍
  15. 手动安装EVE-NG模拟器
  16. 如何让搜索引擎收录我们的博客
  17. ENVI/SARscape软件处理问题小结
  18. CI Weekly #9 | 揭秘阿里 Docker 化实践之路
  19. matlab模拟土壤水分入渗,基于HYDRUS-3D的涌泉根灌土壤入渗数值模拟
  20. SAMBA远程访问AirDisk,不用经过官方服务器就可以远程访问

热门文章

  1. vue源码解析推荐文章
  2. NLPIR语义智能平台支持大数据个性化学习
  3. 优秀的用户体验设计,从讲好一个故事开始
  4. 【iOS-Cocos2d游戏开发之二十一 】自定义精灵类并为你的精灵设置攻击帧以及动画创建!【二】...
  5. systemd 与 sysVinit 彩版对照表
  6. 用Java实现HTTP文件队列下载
  7. MySQL数据库修改密码忘记密码
  8. [Android开发]zip文件压缩解压缩
  9. 安装和部署企业程序库
  10. Python网络编程(Socket)