实现一个能够跟随鼠标切换视角,进行动态消隐的正方体,能够帮助更好的实现立体三维几何在二维当中的实现。

系统主要涉及在二维平面中三维图形的绘制、图形的旋转、图形的平移、图形的缩放和图形的消隐算法。

1.正方体的三维呈现

首先将顶点标号,通过设置顶点的xyz坐标数组,将各个顶点的坐标对应起来。

x[8] = { a+o, a+o, 0+o, 0+o, a+o, a+o, 0+o, 0+o };

y[8] = { 0+o, a+o, a+o, 0+o, 0+o, a+o, a+o, 0+o };

z[8] = { a+o, a+o, a+o, a+o, 0+o, 0+o, 0+o, 0+o };

(关于+o的原因在后面会提到)

通过点面矩阵,将同一个面的所有点聚集起来,放入一个矩阵中,给六个面标上序号。

f[6] = { 0,1,2,3,4,5 }; //面的号码

fp[6][5] = { {0,1,2,3,0},{1,0,4,5,1},{4,0,3,7,4},{2,1,5,6,2}, {6,7,3,2,6},{6,5,4,7,6} }; //面的顶点序

2. 图形的旋转

利用 mouseDown 鼠标触发事件触发图形旋转,鼠标启动,摄像机可以进行坐标和角度的转换,利用:

glRotatef(xrot, 1.0f, 0.0f, 0.0f);

glRotatef(1.0f, yrot, 0.0f, 0.0f);//设置物体如何旋转的方式参数为旋转角度

函数获取旋转角度。

3. 图形的平移

x[8] = { a+o, a+o, 0+o, 0+o, a+o, a+o, 0+o, 0+o };

在最初初始化坐标时,利用‘可修改的变量o’对数组进行赋值,在触发键盘事件时修改o的值,重新画图,即可得到初始坐标变换的图像,即完成了图像的平移。

4. 图形的缩放

x[8] = { a+o, a+o, 0+o, 0+o, a+o, a+o, 0+o, 0+o };

在最初初始化坐标时,利用可修改的变量a对数组进行赋值,在触发键盘事件时修改a的值,重新画图,即可得到放大/缩小的图像,即完成了图像的缩放。

5. 图形的实时动态消隐

根据课上所学的知识:

(1)后向面总是看不见的;

(2)不会仅由于后向面的遮挡,而使别的棱成为不可见;

(3)可以把这些后向面全部去掉,并不影响消隐结果。

计算正方在当前视角下的视点向量S和正方体各个面的法向量(V)

①若V·S<0,称该多边形为前向面。② 若V·S>0,称该多边形为后向面。

OPENGL学习项目--立体正方形的实时三维模型相关推荐

  1. 最新综述 | 基于深度学习的立体视觉深度估计

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 今天给大家分享一篇上个月刚刚发布的综述论文,基于深度学习的立体视觉深度估计.英文标题: A Surve ...

  2. 【我的OpenGL学习进阶之旅】【持续更新】关于学习OpenGL的一些资料

    目录 一.相关书籍 OpenGL 方面 C方面 NDK 线性代数 二.相关博客 2.0 一些比较官方的链接 2.1 OpenGL着色器语言相关 2.2 [[yfan]](https://segment ...

  3. OpenGL学习之路(四)

    1 引子 上次读书笔记主要是学习了应用三维坐标变换矩阵对二维的图形进行变换,并附带介绍了GLSL语言的编译.链接相关的知识,之后介绍了GLSL中变量的修饰符,着重介绍了uniform修饰符,来向着色器 ...

  4. openGL学习之glut库的使用

    对于初学者来说,做小项目用的glut已经很足够了,它的定义是用于简单程序和初学者学习使用的简单的.容易的.小的. vs2015创建空项目: 然后在项目中添加glut中include路径: 先创建一个调 ...

  5. 1.搭建深度学习项目树莓派的硬件设备选择

    搭建深度学习项目树莓派的硬件设备选择 文章目录 搭建深度学习项目树莓派的硬件设备选择 1.型号选择 1.1 官网产品 1.2 型号介绍 1.2.1 树莓派 400 1.2.2 树莓派 数字系列 1.2 ...

  6. 最新Python学习项目Top10!

    作者 | Mybridge 译者 | Linstancy 整理 | Jane 出品 | AI科技大本营 [导读]过去一个月里,我们对近1000个Python 学习项目进行了排名,并挑选出热度前10的项 ...

  7. 手把手教你从零到一搭建深度学习项目(附PDF下载)

    来源:机器之心 作者:Jonathan Hui 本文约14000字,建议阅读10+分钟. 本文将会从第一步开始,告诉你如何解决深度学习项目开发中会遇到的各类问题. 在学习了有关深度学习的理论之后,很多 ...

  8. GitHub 上 57 款最流行的开源深度学习项目【转】

    GitHub 上 57 款最流行的开源深度学习项目[转] 2017-02-19 20:09 334人阅读 评论(0) 收藏 举报 分类: deeplearning(28) from: https:// ...

  9. 手把手教你从零搭建深度学习项目(附链接)

    简介: 在学习了有关深度学习的理论之后,很多人都会有兴趣尝试构建一个属于自己的项目.本文将会从第一步开始,告诉你如何解决项目开发中会遇到的各类问题. 本文由六大部分组成,涵盖深度学习 ( DL ) 项 ...

最新文章

  1. shell编程_linux
  2. 用Java获取文件的MD5校验和
  3. 一篇文章帮你彻底搞清楚“I/O多路复用”和“异步I/O”的前世今生
  4. ITK:从图像中提取轮廓
  5. 第九届河南理工大学算法程序设计大赛 正式赛(ABCDEFGHJKL)
  6. Vue学习【第六篇】:Vue-cli脚手架(框架)与实战案例
  7. python 中的yum pip
  8. leetcode 1818. 绝对差值和
  9. Mysql5.7使用DTS增量同步数据到MaxCompute
  10. python实现括号分组
  11. linux学习笔记:linux中磁盘管理常用的几个命令
  12. Shelld5的使用
  13. 如何设计信息安全领域的实时安全基线引擎
  14. python pandas 之drop()函数
  15. java开源cad_.Net开源项目(包含CAD支持)
  16. 小米mix2s主板电路图
  17. bootstrap多文件上传和单文件上传
  18. 铁路订票系统的简单设计(转)
  19. appium手机APP自动化定位元素
  20. php做excel导入word,php如何将excel表格插入到word文档

热门文章

  1. ROS 禁止公网暴力破解SSH FTP
  2. 蜂蜜怎么做线上推广?
  3. zabbix企业微信号、钉钉报警脚本
  4. linux中find命令的常见用法
  5. Android Cocos2dx引擎 prv.ccz/plist/so等优化缓存文件,手把手ida教你逆向工程反编译apk库等文件
  6. 工业机器人打磨抛光编程员工资_打磨抛光机器人调研报告
  7. react全家桶有哪些?(详细)
  8. 开源微信小程序-1:天天任务清单
  9. web点击页面出现图案(小星星)
  10. 解决Read timed out和connect timed out的问题