opengl 学习<二>

2023-11-20

在学习opengl过程中。我是用了《交互式的计算机图形学 自顶向下的分析》 这本书着实不错。是一本理论兼opengl实践的图形学教程。

     在学习上,我总会是杂乱无章的学。为什么呢。我一般是在需要某个理论的时候才会去深究理论内部的各种详细机制,当然前提必须是你对这方面知识必须有一点的了解,不需要了解的足够深入。其实我想这也是读书的一种方法吧。对于看书我向来先很粗糙的浏览整书一遍,大概就只看一些概念,了解这书的主要内容 方向等。第二遍则是详细的理解内容,某些时候有些内容都是很有之后才有心去看的。

     其实今天在总结这个的时候,并不是在用opengl而是在使用osg设计一个项目人物汽车车等漫游类《可能应用在手机,汽车导航上》的时候,想起总结这的。我其实是想画些图来写这份总结可能会更容易理解的.然而实在懒...

 

     在图形学的显示流程:

      三维图形->模型视图变换->投影变换->三维裁剪->视口->屏幕图形显示

 

     三维->二维的变换,总的来理解只是三维的物体在一系列的变换之后决定了屏幕上某些像素位置的颜色值。最后这些颜色组成了一幅图画。就是我们所看到得最终屏幕二维图形了。

 

     在大概了解这种流程之后,模型视图变换 无疑将成为决定我们所将看到的图像的轮廓。

     模型视图变换 应该来讲是包含两个变换的:模型变换,视图变换。为什么将他们合在一起呢? 在照相机成像系统中 若固定相机不动移动模型会 等价于 固定模型不动移动相机。

     考究如下内容:

    

     glMatrixMode(GL_MODELVIEW);

     glLoadIdentity();                   //当前矩阵设置为单位矩阵

     glRotatef(45.0f,0.0,0.0,1.0); //按[0.0,0.0,1.0]为轴旋转45度

     glTranslatef(2.0,2.0,2.0);     // 平移至 [2.0,2.0,2.0]

     glBegin(...);                       // 画某些东西
        ...
        ...
        ...
     glEnd();

 

     有两种方式理解:一种是局部坐标系的理解,一种是全局坐标系的理解。

     如果按照上面那些内容从上到下的理解的方式就是局部坐标系的理解。opengl变换上的实现其实是个矩阵的乘法。按照局部坐标系的理解 上面代码的变换是按照这样的顺序执行的:

先将局部坐标系绕z轴旋转45度,在将局部坐标系的原点平移至[2.0,2.0,2.0],然后在局部坐标系内画物体。

      假设 旋转步骤的矩阵为R,平移部分的矩阵为T 当前矩阵为C。

      new_C=old_C*R*T 这是一个矩阵右乘操作

      理论上来讲 这就是一个坐标系的变换过程,R*T 这个矩阵其实就是将原先的坐标系变换到现在的坐标系,这个时候原先坐标系的点p将变换成p1,p1=(R*T)*p。

      而按照全局坐标系的理解,它的变换过程则是相反的,这也是相当的好理解的.在当前世界坐标系中画好该物体之后,我必须将它移动到正确的位置。那必须得先平移物体到[2.0,2.0,2.0],然后将物体绕z轴旋转45度。这是一个相反的变换过程,然而这个与前面的是等价的 为什么?

      考虑世界坐标系下点p,经过平移操作后 p11=T*p; 在经过旋转操作后 p1=R*P11=R*(T*p)  这是矩阵的一个左乘操作 先变换的在后面. 所以说new_C=(old_c*(R*(T))) 左乘 所以说这是一个等价的过程.

 

      一般来将,我们考虑的时候总是世界坐标系考虑旋转平移等操作的.所以在写变换的时候最好的方式就是将 变换步骤一直左乘,而代码中则按左乘后结果矩阵的顺序写代码。

 

      其次在理解以上的变换过程中模型变换的原理,我们可以很好的理解gluLookAt(eye,center,up)的视图变换的过程,现在只考虑模型不动,照相机移动的过程,且是在全局坐标系下的移动过程.

     opengl默认照相机框架 是视点在原点 y轴为向上方向 z轴负方向为视线方向

 

     gluLookAt的目的在于使得视点移动到eye位置 并看向center。

     则gluLookAt的过程先平移至eye,而center->eye(center指向eye)则为z方向设为z(Zx,Zy,Zz),Up方向为y轴方向,y,z的叉积则为x轴方向.则只需将它们都旋转到位就行了

 

    所以这个时候模型变换矩阵就为《相对于模型来讲 相机移动到eye等价于模型移动到-eye.

    |Xx Xy Xz  0|        |1   0   0   -eyex|

    |Yx Yy Yz  0|    *  |0   1  0    -eyey|

    |Zx  Zy Zz  0|         |0   0  1    -eyez|

    |0   0   0     1|         |0   0  0       1   |

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

opengl 学习<二> 的相关文章

  • D3D纹理

    纹理映射是一种将图形施加到表面的技术 以简单的一堵墙为例 这种技术可以只需要两个绘制有砖纹理的三角形即可 这样就可以为表面增加大量的细节 而不必使用大量的多边形 纹理映射使用了图像数据并将图像数据绘制 映射 到表面上 该表面看上去就像有一幅
  • 使用CopperCube(IrrEdit)创建Irrlicht场景

    使用CopperCube IrrEdit 创建Irrlicht场景 标签 Irrlicht游戏引擎 2013 11 22 19 32 3384人阅读 评论 7 收藏 举报 分类 Irrlicht 13 版权声明 本文为博主原创文章 未经博主
  • d3d制作场景地形

    一般可以先用d3d做地形的mesh 比如做一个100 100的网格 然后用photoshop做高度图 然后再程序里读取高度图数据 让mesh的每个顶点对应一个高度 http download csdn net source 855296 这
  • D3D资源管理

    摘要 受管贴图 Managed textures 也就是我们通常所谓的 自动管理贴图 在DX6中首次被引入 经过一系列的改进和增强 在DX9中自动管理的资源类型增加到贴图 顶点缓冲 顶点索引缓冲 所有这些资源使用统一的公共接口 通过使用D3
  • 3D MAX导出插件编写

    转 3D MAX导出插件编写 2011 6 9阅读1667 评论0 文章版权归博客园 BigCoder所有 转载请于明显位置标明原文作者及出处 以示尊重 原文出处 http www cnblogs com csyisong archive
  • 高级纹理映射技术(6)

    高级纹理映射技术 6 对一些特殊的应用需要对纹理坐标进行处理 主要包括纹理坐标自动生成和纹理坐标变换 下图显示了纹理坐标的来源 处理过程以及到达光栅处理器的过程 纹理坐标自动生成 在Direct3D程序中 不仅可以在模型载入阶段或渲染阶段指
  • orge工具

    tortoisehg 3 2 1 x64 msi mercurial 3 2 1 x64 msi
  • 手把手教你如何配置和编译ogre 1.7.0 + cegui 0.7.1

    oiramario 博客园 首页 新随笔 联系 订阅 管理 随笔 423 文章 1 评论 838 手把手教你如何配置和编译ogre 1 7 0 cegui 0 7 1 ogre 1 7 0的下载 配置和编译指南 1 ogre 1 7 0的下
  • GLFW初体验

    GLFW初体验 GLFW 很遗憾 没有找到FW的确切含义 Wiki上没有 GLFW主页也没有 猜测F表示for W表示Window GLFW是干啥用的 一个轻量级的 开源的 跨平台的library 支持OpenGL及OpenGL ES 用来
  • fvf采用另外一种方式渲染

    if FAILED hr getActiveD3D9Device gt SetVertexDeclaration d3ddecl gt getD3DVertexDeclaration getGlobalInstanceVertexBuffe
  • Ogre:Hardwarebuffer

    Ogre Hardwarebuffer 分类 OGRE 2012 07 03 15 56 1097人阅读 评论 0 收藏 举报 buffer float byte 存储 图形 upload Ogre中的硬件缓存是指在显卡上的存储 这和在内存
  • 游戏中的“垂直同步”与“三重缓冲”究竟是个啥?

    从今天开始 我们会开启 小教程 的兄弟栏目 小科普 给大家介绍在配电脑或玩游戏过程中经常会遇到的专业名词 第一期 小科普 我们来讲讲游戏中经常会遇到的一个画面选项 垂直同步 我们曾在一期语音里和大家讲探讨过垂直同步的功用 可惜语音有 60
  • D3D9Texture::_loadNormTex

    D3D9Texture loadNormTex D3D9Texture loadImpl
  • GT1030和730哪个好?GT1030与GT730区别对比 (全文)

    对于显卡硬件厂商来说 当属NVIDIA可谓异常活跃 我们知道在游戏领域 N卡一直占据着绝大部分市场 旗下的显卡定位也非常明确 如最新的10系显卡 今年5月份NVIDIA低调发布了定位入门级显卡 GT1030 这款显卡上市之后立马引起了不少玩
  • 垂直同步到底要不要开?老司机教你G-Sync显示器的正确打开姿势

    一直以来我们都认为PC的画面效果取决于显卡 认为游戏的FPS值越高代表游戏越流畅 但实际上 显示器也是决定游戏帧数的重要一环 显卡将画面渲染并输出到显示器中 显示器接收GPU的信号并输出 然而 因为显卡性能和运行程序的差异 显卡一般无法以恒
  • Texture::getSourceFileType()

    Texture getSourceFileType
  • mesa 教程

    只有这个是靠谱的 Compiling and Installing The Mesa 3D Graphics Library latest documentation
  • 介绍D3DPOOL和Lock

    介绍D3DPOOL和Lock 分类 DirectX 2013 02 28 00 21 322人阅读 评论 0 收藏 举报 D3D RUTIME的内存类型 分为3种 VIDEO MEMORY VM AGP MEMORY AM 和SYSTEM
  • Ogre引擎源码——资源之Skeleton

    Ogre引擎源码 资源之Skeleton 分类 OGRE 游戏开发 引擎开发 图形引擎 游戏引擎 2012 09 21 06 17 1231人阅读 评论 0 收藏 举报 引擎 animation vector binding pointer
  • OpenGL图形管线和坐标变换

    1 OpenGL 渲染管线 OpenGL渲染管线分为两大部分 模型观测变换 ModelView Transformation 和投影变换 Projection Transformation 做个比喻 计算机图形开发就像我们照相一样 目的就是

随机推荐

  • 通过源码包*.src.rpm定制开发rpm

    为什么80 的码农都做不了架构师 gt gt gt 1 基本流程 1 下载 安装相应的src rpm包 wget xxx src rpm rpm ivh xxx src rpm 这里的 安装 是指把xxx src rpm中的tar gz p
  • 活动报名

    活动议程 日期 5月5日 周五 时间 主题 14 30 14 35 开场简介 袁洋 清华大学交叉信息学院助理教授 青源会会员 14 35 15 20 环境不变最小二乘回归 方聪 北京大学智能学院助理教授 青源会会员 15 20 15 50
  • 计算机网络分组交换特点,分组交换技术在计算机网络技术中的作用及特点是什么?...

    分组交换是以分组为单位进行传输和交换的 它是一种存储 转发交换方式 即将到达交换机的分组先送到存储器暂时存储和处理 等到相应的输出电路有空闲时再送出 采用存储转发的分组交换技术 实质上是在计算机网络的通信过程中动态分配传输线路或信道带宽的一
  • Android中实现全屏、无标题栏的两种办法(另附Android系统自带样式的解释)

    在进行UI设计时 我们经常需要将屏幕设置成无标题栏或者全屏 要实现起来也非常简单 主要有两种方法 配置xml文件和编写代码设置 1 在xml文件中进行配置 在项目的清单文件AndroidManifest xml中 找到需要全屏或设置成无标题
  • c++ 二进制、八进制、十进制、十六进制相互转换

    itoa 和strtol 可以实现二进制 八进制 十进制 十六进制之间的相互转换 包含在 inculde lt cstdlib gt 1 十进制转换为其他进制 使用itoa int dec char str int R 将十进制数dec转换
  • python执行JavaScript代码

    1 简单使用 import execjs execjs eval new Date 返回值为 2018 04 04T12 53 17 759Z execjs eval Date now 返回值为 1522847001080 需要注意的是返回
  • selenium 获取属性值的两种方法

    初衷是因为要通过属性值判断是否按钮是否disabled 获取属性值的两种方法 1 通过js获取 class text dr execute script return arguments 0 getAttribute class TAG a
  • 关于“service iptables save“的“命令只支持LSB动作”的报错解决方法

    1 报错复现 service iptables save 报错如图 2 解决方式 2 1 先停止防火墙 systemctl stop firewalld 2 2 执行 yum install y iptables service 执行完毕后
  • 四路服务器销售排名,专注企业核心业务 新华三四路服务器2019上半年销售额占比持续增长...

    近日 IDC发布的 2019年第二季度中国x86服务器市场跟踪报告 显示 2019年上半年 紫光旗下新华三集团四路服务器在中国市场销售额排名第二 市场份额环比大幅增长 从中国市场销销售额数据来看 2018年下半年 新华三集团四路服务器市场销
  • QT实现多线程,以及子线程调用主线程方法与变量

    实现思路 第一步需要将子线程声明为主线程的友元类 第二步是将主线程类对象的地址通过信号槽传递给子线程中创建的对象 使得子线程能访问主线程的数据的 1 子线程 displayresult h 头文件 伪代码 include tabwindow
  • 算法学习——贪心算法之币种统计

    算法描述 币种统计 单位给每一位员工发工资 精确到元 为了保证不临时换零钱 使得每个员工取款的张数最少 在取工资前统计所有员工所需要的各种票面的张数 约定票种为100 50 20 10 5 2 1元 并验证币种统计是否正确 算法思路 算法描
  • MySQL MVCC详解

    为什么需要MVCC 在没有MVCC之前 是使用读写锁 共享锁 排它锁 来进行并发控制的 读锁和读锁之间不互斥 写锁和读锁互斥 写锁和写锁互斥 但是频繁加锁会导致数据库性能低下 这时出现了一种不加锁来解决读写冲突的方法 它会让数据库维护每条数
  • xshell设置代理连接

    大致原理 本地服务器Local gt 中转服务器Jump gt 目标服务器Destination 本机L连接不上目标服务器D 通过中转服务器提供的代理 来实现连接 所以启动顺序 先启动中转J 不能断开连接 再启动目标服务D 中转服务器设置
  • 电大计算机应用基础实操题模块4,计算机应用基础形考模块四答案

    计算机应用基础形考模块四答案Tag内容描述 1 精品文档计算机应用基础01试卷总分 10001任务单选题 共20题 共100分 开始说明 结束说明 1 5分 Excel工作表中 用鼠标器左键单击某个工作表标签 该标签为白色显示 此工作表称为
  • 前端页面跳转带token-骚操作

    声明 非必要不要使用该方法 会有存在一些问题 在此只是提供思路 发现存在的问题 1 使用window location reload 会有问题 window attr location url 会有问题 F5 刷新页面会有问题 这里可以进行
  • GPU编程 CUDA C++ 线性代数求解器 cuSolver库

    cuSolver库较cuBLAS库更为高级 其能处理矩阵求逆 矩阵对角化 矩阵分解 特征值计算等问题 cuSolver库的实现是基于cuBLAS库和cuSPARSE库这两个基本库 cuSolver库的功能类似于Fortran中的LAPACK
  • 寻宝游戏 HDU - 6289 (DP)

    小Q最近迷上了一款寻宝游戏 这款游戏中每局都会生成一个n mn m的网格地图 从上往下依次编号为第11行到第nn行 从左往右依次编号为第11列到第mm列 每个格子上都有不同数量的金币 第ii行第jj列的格子上的金币数量为ai jai j 小
  • Weblogic RCE合集

    文章目录 CVE 2023 21839 T3 IIOP JNDI注入 前言 漏洞简单分析 漏洞复现 防护措施 CVE 2020 2551 RMI IIOP RCE 漏洞简单分析 漏洞复现 防护措施 CVE 2017 3506 wls wsa
  • mysql Error:1052 Column ‘xxx‘ in where clause is ambiguous

    Integrity constraint violation 1052 Column deleted in where clause is ambiguous MySQL查询的时候出现这个错误提示多半是因为 1 多表查询的时候 几个表中同时
  • opengl 学习<二>

    opengl 学习 lt 二 gt 在学习opengl过程中 我是用了 交互式的计算机图形学 自顶向下的分析 这本书着实不错 是一本理论兼opengl实践的图形学教程 在学习上 我总会是杂乱无章的学 为什么呢 我一般是在需要某个理论的时候才