首页 > 其他分享 >Opengl图形几何变换的模式

Opengl图形几何变换的模式

时间:2023-08-25 12:22:55浏览次数:38  
标签:glm Opengl 变换 0.0 transform 几何变换 图形 坐标系

当我们对一个图形进行一个较为复杂的变换时,我们并不直接去计算这个变换,而是将其分解为多个基本变换,再依次作用于图形。对于复合变换:

$$ P^{,} = M_{n} \cdots M_{3} \bullet M_{2} \bullet M_{1} \bullet P$$

先作用的变换放在连乘式右边,后作用的变换放在连乘式左边。由于矩阵乘法不满足交换律,因此变换合成矩阵的顺序不同,产生的结果也不同。

 

1. 固定坐标系模式

在变换合成或者复合变换时,先调用的变换先执行,后调用的变换后执行,体现在矩阵相乘时,先调用的变换矩阵放在连乘式的右边,后调用的变换放在连乘式的左边。这种变换模式成为固定坐标模式,也称为图形模式。他的特点是在连续执行几次变换时,每一次变换均可看成相对于原始(固定)坐标系进行的。

(1)先把图形绕z轴旋转90度,然后再平移距离7.

(2)先把图形沿x轴平移7,再绕z轴旋转90度。

显然,两种变换方案的结果不同,但都是相对于原坐标oxy坐标系进行的,先调用的变换先执行。

 

2.活动坐标系模式

活动坐标系模式,又称空间模式。在这种模式下,连续执行几个变换时,变换矩阵的合并方式恰好和固定坐标系模式相反。即先调用的变换在连乘式的左边,后调用的变换在连乘式的右边。体现在程序执行上,先调用的变换后执行,后调用的变换先执行,它非常适合堆栈结构实现,也是OpenGL图形库采用的方式。

我们重新来考虑上面的两种变换。

(1)将图形与坐标系一起旋转90度;在新坐标系中,将图形与坐标系一起沿x轴平移7.

图形在它局部坐标系中的位置是不变的,这样变换事实上是作用于坐标系而非图形本身。

(2)将图形与坐标系沿x轴平移7;再将图形与坐标系一起旋转90度。

 

我们使用程序来看一下效果。

首先我们画一个三角形。

    float vertices[] = {
        //位置坐标      颜色属性
        0.0, 0.0, 0.0, 1.0, 0.0, 0.0,
        0.1, 0.0, 0.0, 1.0, 0.0, 0.0, 
        0.0, 0.2, 0.0, 1.0, 0.0, 0.0
    };

我们看一下原始图形:

(1)首先我们绕Z轴旋转90度,然后再沿X平移0.5:

    glm::mat4 transform(1.0f);
    transform = glm::rotate(transform, glm::radians(90.0f), glm::vec3(0.0, 0.0, 1.0f));
    transform = glm::translate(transform, glm::vec3(0.5, 0, 0));
    ourShader.use();
    ourShader.setMat4("transform", transform);

(2)先沿x轴平移0.5,再沿z轴旋转90度:

glm::mat4 transform(1.0f);
transform = glm::translate(transform, glm::vec3(0.5, 0, 0));
transform = glm::rotate(transform, glm::radians(90.0f), glm::vec3(0.0, 0.0, 1.0f));

从两个不同的结果看出,opengl使用的是活动坐标系,其实是对图形的局部坐标系进行的变换。

 

不同的应用要用不同的变换模式。在绘图的情况下多用固定坐标系模式,因为比较容易估计变换后的后果。整体变换的基础上再作一些较为独立的局部变换时,常用活动坐标系模式。例如机械手变换到适当位置后,手腕和手指的运动是相对于手臂的,如果在手臂上建立一个坐标系,那么手指手腕的运动就简单多了。

 

标签:glm,Opengl,变换,0.0,transform,几何变换,图形,坐标系
From: https://www.cnblogs.com/errorman/p/17656468.html

相关文章

  • 连接远程服务器时,如何使用图形应用?
    终端连接远程服务器时,默认只能执行命令行程序,无法使用GUI程序。这里是解决方法:xorg-HowtoforwardXoverSSHtorungraphicsapplicationsremotely?-Unix&LinuxStackExchangeopen3d通过vscode+ssh连接远程服务器将可视化界面本地显示-CSDNTL;DR:Yourcl......
  • Mesa 23.2 开源图形栈现已可供下载
    作为Mesa23系列的第二个重要版本,Mesa23.2开源图形栈现已可供下载,它为AMDGPU的RADVVulkan驱动程序带来了新功能,改进了 Linux 游戏,并新增了Asahi功能。Mesa23.2的亮点包括Asahi上的OpenGL3.1和OpenGLES3.VK_KHR_ray_tracing_pipeline、VK_EXT_dept......
  • 如何使用图形数据库构建实时推荐引擎
    推荐:使用NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景“这是给你的”,“为你推荐的”或“你可能也喜欢”,是大多数数字业务中必不可少的短语,特别是在电子商务或流媒体平台中。尽管它们看起来像一个简单的概念,但它们暗示了企业与客户互动和联系方式的新时代:推荐时代。老实说......
  • 探索GreatADM:图形化部署MGR的全新体验
    摘要:在DBA的日常工作中,快速部署数据库高可用架构,且标准化地入网部署数据库是一项重要的基础任务。本文将介绍常见的部署MGR的方式,并重点介绍万里数据库的GreatADM数据库管理平台进行图形化、可视化、标准化的部署过程,以提高交付效率和质量,给DBA提供一种全新的体验。(本文阅读大约......
  • 英伟达™(NVIDIA®)535.98 Linux 图形驱动程序发布
    英伟达™(NVIDIA®)公司近日发布了适用于 Linux、FreeBSD和Solaris系统的NVIDIA535.98图形驱动程序,作为其生产分支的维护更新,解决了各种错误和问题。在英伟达™(NVIDIA®)535.86.05版本发布仅三周后,新版驱动程序就解决了多个Bug,包括在虚拟终端和X之间切换时使用某......
  • learnopengl(9)摄像机
    在上一节坐标系统中提到过:观察空间(viewspace)经常被人们称之为Opengl的摄像机,所以有时候也称为摄像机空间(CamearSpace)或者视觉空间(EyeSpace)。观察空间就是从摄像机的视角所观察到的空间。 一、摄像机/观察空间当我们讨论观察/摄像机空间的时候,是讨论以摄像机的视角作......
  • Mesa 23.2 开源图形栈现已可供下载
    导读作为Mesa23系列的第二个重要版本,Mesa23.2开源图形栈现已可供下载,它为AMDGPU的RADVVulkan驱动程序带来了新功能,改进了 Linux 游戏,并新增了Asahi功能。Mesa23.2的亮点包括Asahi上的OpenGL3.1和OpenGLES3.VK_KHR_ray_tracing_pipeline、VK_EXT......
  • openGL里面技术名词
    法线贴图(normalmapping)或凹凸贴图(bumpmapping。每个fragment使用各自的法线,替代一个面上所有fragment使用同一个法线的技术。我们从法线贴图重采样得来的法线向量,是以切线空间表达的。我们可以用TBN矩阵把所有向量从切线空间转到世界空间,我们用TBN的逆矩阵把所有世界空间的向......
  • WebGL和OpenGL之间的差异
    推荐:使用NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景WebGL和OpenGL是与图形处理有关的技术标准,它们在计算机图形中扮演着重要的角色。本文将介绍WebGL和OpenGL的区别,并重点介绍"WebGL"和"OpenGL"的特点。一、WebGL简介WebGL(WebGraphicsLibrary)是一种用于在Web浏览器中......
  • 了解WebGL:在浏览器中实现高性能3D图形渲染的基础知识
    WebGL是一种基于OpenGLES2.0标准的3D图形渲染技术,它可以在浏览器中实现高性能的3D图形渲染。本文将介绍WebGL的基础知识,包括其应用场景、工作原理和常见的编程工具。应用场景WebGL可以用于创建各种类型的3D图形应用程序,例如游戏、可视化效果、建筑模型等。WebGL还可以与其他W......