OpenGL

OpenGL + glm库实现四元数的旋转 最近在搭小引擎,在节点类里面弄了一个返回模型矩阵的方法,想实现旋转,用欧拉角的方式会发生万向节死锁,所以只好用四元数的方式实现,然而learnOpenGL里只提到了用欧拉角的旋转方法,只好去翻翻glm库的文档了 使用四元数进行旋转需要用到几个库 #include <glm/glm.hpp> #include <glm/gtc/matrix_transform.hpp> #i... 阅读详情


参考 总结GLM库中glm::transform(位移), glm:scale(缩放), glm::rotate(旋转)

OpenGl

glm:rotate(旋转)

函数功能,将物体进行旋转,如下:

//目的:将物体 沿z轴 逆时针 旋转90度,创建其变换矩阵
//1、初始化一个单位矩阵
glm::mat4 trans = glm::mat4(1.0f);
//2、用glm::radians将角度转化为弧度,glm::vec3(0.0, 0.0, 1.0)表示沿Z轴旋转
trans = glm::rotate(trans, glm::radians(90.0f), glm::vec3(0.0, 0.0, 1.0));

第一个参数是要旋转的物体,在这里也就是旋转矩阵(通过将物体坐标乘以旋转矩阵,物体相当于旋转,类似于一个 矩阵乘以若干个初等矩阵。)
第二个参数是旋转角度,由于glm只接收弧度,故将角度转化成弧度计算。
第三个参数是一个三维向量,分别代表x、y、z轴。当对应值为1时,表示将轴旋转。

glm:translate(平移)

函数功能,将物体平移,如下:

//目的:把一个向量(1, 0, 0)位移(1, 1, 0)个单位
//1、定义该向量 vec
glm::vec4 vec(1.0f, 0.0f, 0.0f, 1.0f);
// 2、初始化一个单位矩阵
// glm::mat4 trans = glm::mat4(1.0f)
// 3、将向量(1, 1, 0)与单位矩阵相乘
trans = glm::translate(trans, glm::vec3(1.0f, 1.0f, 0.0f));
//4、将结果再与最初的向量相乘,来对其进行位移改变
vec = trans * vec;

函数大致思想在于,首先创建一个位移矩阵,然后将位移矩阵和目标矩阵做点乘,实现平移。和矩阵乘以初等矩阵差不多。
第一个参数是单位矩阵。
第二个向量,也就是要平移多少,参数分别代表x、y、z轴。

glm:scale(缩放)

函数功能,将物体进行缩放,如下:

//目的:将物体缩放为原来的0.5倍,创建其变换矩阵
//1、初始化一个单位矩阵
glm::mat4 trans = glm::mat4(1.0f);
//2、用glm::vec3(0.5, 0.5, 0.5)乘以该矩阵对其进行缩放
trans = glm::scale(trans, glm::vec3(0.5, 0.5, 0.5)); 

第一个参数也就是单位矩阵。
第二个向量,分别代表x、y、z。参数代表缩放的倍数。这个比较简单。

欧拉角(Euler Angle) / 译注:direction代表摄像机的前轴(Front),这个前轴是和本文第一幅图片的第二个摄像机的方向向量是相反的。分别绕着原坐标z轴(蓝),一次旋转以后的x轴(绿)以及两次旋转以后的z轴(红)旋转,最终产生的红色坐标系即表示出目标方向。// 注意我们先把角度转为弧度。2. 一共有3种欧拉角:俯仰角(Pitch)、偏航角(Yaw)和滚转角(Roll)... 阅读详情

相关推荐

【OpenGL】详解第一个OpenGL程序

OpenGL能做的事情太多了!很多程序也看起来很复杂。但是!所有O

candycat 9万+

总结GLM库中glm::transform(位移), glm:scale(缩放), glm::rotate(旋转)

在使用下面所介绍的函数之前请记得包含相关头文件,一般包含这几个就够了: #include <glm/glm.hpp> #include <glm/gtc/matrix_transform.hpp> #include <glm/gtc/type_ptr.hpp> 下面这三个函数主要在模型矩阵中运用,因为模型矩阵的主要功能也就是旋转、平移、缩放。 glm:...

yiliacheng 3万+

DELPHI中OPENGL图形程序设计

OPENGL图形程序设计OPENGL是一个三维图形和模型库,由于它在三维图形方面的杰出性能,目前许多高级语言都提供了与OPENGL的接口,如:VC、DELPHI、C++Builder等。使用OPENGL可以极大地减少用户开发图形、图像的难度,使用户制作高水准的商业广告、图形CAD、三维动画、图形仿真和影视采集。一、OPENGL的功能 OPENGL原来是工作站上的一个图形软件库,由于它在商业、军

jaguarcts的专栏 1万+

OPENGL学习笔记之七

OPENGL学习笔记之七2017/11/6 阅读材料来自learnopengl.com以及learnopengl-cn.github.io 本节属于基础线性代数内容,只挑重点记录1.使用(多个)矩阵(Matrix)对象可以更好的变换(Transform)一个物体。向量最基本的定义就是一个方向。或者更正式的说,向量有一个方向(Direction)和大小(Magnitude,也叫做强度或长度)。标量

Sean要加油 1068

OpenGL ES与OpenGL 的区别

OpenGL ES 概述 本文对 OpenGL ES 做了综合性的介绍,包括 OpenGL ES 的由来、主要版本及其特点、OpenGL ES 与 OpenGL 的主要区别等等。   简介2 OpenGL_ES是khronos协会从OpenGL裁剪定制而来的,专为手机,游戏机等嵌入式设备而设计。它的接口其实和 Open GL很类似。 OpenGL_ES有几

把握自己。 1万+

Linux下OpenGL的安装与cmake编译OpenGL程序

Linux下OpenGL的安装与cmake编译OpenGL程序OpenGL安装安装命令如下: sudoaptinstallbuild−essential sudo apt install build-essential sudo apt install libgl1-mesa-dev sudoaptinstalllibglu1−mesa−dev sudo apt install libg

SarKerson的博客 4531

旧版OpenGL 与 新版OpenGL

分割线:OpenGL3.0。 3.0之前,所有OpenGL版本都与早期版本完全向后兼容。针对OpenGL 1.1编写的代码可以在OpenGL 2.1实现中很好地执行。 3.0,引入了废弃functionality的想法。许多OpenGL函数被声明为已弃用,这意味着用户应避免使用它们,因为它们可能会从更高版本的API中删除。 3.1,OpenGL 3.1删除了OpenGL 3.0中几乎弃用的所有功能。这包括固定功能管道。 但是,由于许多实现仍然支持那些不推荐使用和已删除的功能,因此...

竹林的茅草小屋 5763

【OpenGL学习】OpenGL窗口创建

OpenGL窗口的创建

miyazono_的博客 1462

OpenGL(二)——OpenGL图形绘制

上一篇我们介绍了什么是OpenGL,接下来,我们就开始用OpenGL实现简单的开发之旅吧。 大纲 今天将围绕以下几个环节,进行OpenGL的开发学习。 Xcode环境搭建 view的绘制之三角形绘制 好了,开始愉快的编程之旅吧,首先搭建开发环境。 一:Xcode环境搭建 GLFW编译: 1.下载GLFW的源码 —- GLWF用于创建OpenGL的Context,及创建显示窗口 2....

hirezy 4262

使用OpenGL控制相机姿态的技巧

在OpenGL中,我们可以使用gluLookAt函数来控制相机的位置和朝向。为了使相机能够旋转,我们可以根据鼠标移动的距离计算出相应的旋转角度,并调整相机朝向。除了旋转和移动相机,我们还可以使用滚轮控制相机的缩放。我们可以在处理鼠标滚轮事件时,计算出相应的缩放比例,并调整相机位置即可。以上就是控制OpenGL相机姿态的常用技巧及其对应的源代码实现。本文将介绍一些常用的控制相机姿态的技巧,并提供相应的源代码实现。除了旋转相机,我们还可以使用键盘控制相机朝着不同的方向移动。使用OpenGL控制相机姿态的技巧。

m0_47037246的博客 439

AD21导出gerber文件

文件–>制造输出–>Gerber Files 文件–>制造输出–>Gerber Files 通用、光圈和高级跟第一步一样 3.文件–>制造输出–>NC Drill Files 这个默认就可以了 主要参考视频来自bilibili添加链接描述 此篇博客主要是写给自己好记的,无其他商业用途 ...

新手小杨 1万+

【OpenGL】Clion配置

解压刚刚那两个文件夹,把GLFW的include文件夹下的GLFW文件夹放到刚刚Clion项目的新目录include下,然后把lib-mingw-w64文件夹下的glfw3.dll复制到新目录lib和目录cmake-build-debug下。把glad的include文件夹下的glad和KHR放到项目目录include下,src文件夹下的glad.c放到项目目录src下。完事之后打开Clion,创建一个新项目,就叫OpenGL吧,然后建立起三个目录,include,lib,src。

笔记 3635

H3C无线控制器二层注册实战:从零配置到AP上线全流程(附常见问题排查)

本文详细解析了H3C无线控制器二层注册的全流程,从网络基础准备、AC核心配置到AP上线,重点阐述了CAPWAP隧道建立的关键步骤。文章提供了清晰的典型配置示例,并针对AP无法上线、状态异常等常见问题,给出了六种典型故障现象的排查思路与解决命令,帮助网络工程师快速定位并解决问题。

weixin_29214199的博客 546

用OpenGL的字符函数在屏幕上写OpenGL

在OpenGL实用程序工具包中包含了一些预定义的字符库,用来显示点阵和矢量字符。 函数 void glutBitmapCharacter(void *font,int character);显示一个GLUT位图字符。用函数glutBitmapCharacter 显示字符时,是将当前的光栅位置作为字符的左下角点,函数执行后,点阵字符装入刷新缓冲存储器,当前的光栅位置会在x坐标方向上获得一个字符宽度的...

derbi123123的博客 2749

昆仑通态,自由串口通讯

软件默认无该功能,需要问客服索要扩展包。

cfqq1989的博客 1540

使用 Tesseract 在 C# 中进行光学字符识别(OCR)

你可以根据需要对 Tesseract 进行自定义配置,例如设置识别的分辨率、识别模式等。// 只识别数字// 设置自定义变量本文只讲述了简单的使用方法,未涉及字库训练,识别的准确率与训练的字库有关。

仰望星空的博客 4733

Qt中使用OpenGL的三种方式

3. 继承QOpenGLWidget 与QOpenGLExtraFunctions。2. 继承QOpenGLFunctions类可直接使用OPENGL函数。通过使用QOpenGLContext来操作OPENGL函数。1.继承QOpenGLWidget并重写基类如下函数。在OPENGL中使用Shader。直接使用OPENGL函数。

7360

卫朋:IPD流程落地之产品开发验证阶段解读

IPD验证阶段

产品线负责人 1488

linux opengl安装教程,Linux下OpenGL的安装与cmake编译OpenGL程序

Linux下OpenGL的安装与cmake编译OpenGL程序OpenGL安装安装命令如下:$ sudo apt install build-essential$ sudo apt install libgl1-mesa-dev$ sudo apt install libglu1-mesa-dev$ sudo apt install freeglut3 freeglut3-devcmake编译Op...

weixin_31863707的博客 3406

002、搭建你的第一个Agent开发环境:Python与核心库安装

在上一篇《Agent智能体开发入门:概念、应用与前景》中,我们描绘了Agent智能体的宏伟蓝图,理解了其作为“数字员工”的巨大潜力。然而,许多开发者在迈出第一步时,常常被复杂的依赖、版本冲突和晦涩的配置所劝退,空有想法却无从下手。这种感觉就像拿到了一张藏宝图,却找不到出发的港口。本文正是你的“启航指南”。我们将彻底解决这个痛点,通过一个清晰、可复现的流程,为你搭建一个专为Agent开发量身定制的Python环境。一个纯净、隔离的Python虚拟环境,避免项目间的“依赖地狱”。一套经过验证的核心工具链。

G_RE_RE的博客 111

铁路场景雷达点云目标识别与追踪系统

本文介绍了一种基于毫米波雷达的铁路货运车站安全监控系统。该系统采用分布式架构,通过多个毫米波雷达节点采集点云数据,经过坐标转换、多雷达融合等处理后,利用机器学习算法实现列车、行人等目标的实时识别与追踪。系统包含数据采集层、处理层、目标识别层、追踪层、预警决策层和可视化层,能够克服传统视频监控受环境影响大的缺点,实现全天候可靠监测。文中详细展示了雷达数据解析和点云预处理的代码实现,包括坐标转换、数据格式解析和体素网格滤波等关键技术。该系统可有效预警铁路场景下的碰撞风险,提升货运车站的安全管理水平。

huanghm88的专栏 125

QT OpenGL 3D

基于QT的OpenGL运用

happy_yourself的博客 1987

GEE:本地影像上传到GEE的Assets中,并输入机器学习算法中作为特征变量

当我们在 Google Earth Engine(GEE)中应用机器学习算法时,会输入一些影像作为特征变量数据,进一步根据这些特征影像去推理未知区域的数据。但是 GEE 平台上计算特征变量的 API 函数并不是非常全面,我们希望获得更多的特征用于分类。这个时候,我们可以将本地计算的特征影像上传到 GEE 中进行后续处理。本文记录了从本地上传特征数据到 GEE 的 Assets 中的教程,用于后续在 GEE 中分类或者回归使用。本文也可作为《》一文的补充。

养乐多的博客 1730

OpenGL学习

是时候学习一下OpenGL了!!!写这些只是记录一下自己的学习过程,希望不要半途而废。

qq_45578323的博客 1797

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【OpenGL】八、初始化 OpenGL 渲染环境 ( 导入 OpenGL 头文件 | 链接 OpenGL 库 | 将窗口设置为 OpenGL 窗口 | 设置像素格式描述符 | 渲染绘制 ) ★

一、导入 OpenGL 的两个头文件、 二、链接 OpenGL 库、 三、将 Windows 桌面窗口改成 OpenGL 窗口、 四、获取窗口设备、 五、设置像素格式描述符、 六、设置像素格式、 七、创建并设置 OpenGL 上下文对象、 八、设置清除缓冲区背景颜色、 九、OpenGL 上下文初始化操作代码示例、 十、渲染场景、 十一、相关资源

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 3433

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

FFmpeg与OpenGL与SDL

FFmpeg+SDL FFmpeg可以实现视频的解码,将原始视频文件转换为YUV,而这些像素数据不能直接显示在屏幕上。SDL就是将像素数据“画”在屏幕上,实现YUV到屏幕的转换。 SDL与OpenGL SDL是跨平台的多媒体库,旨在提供对音频,键盘,鼠标,操纵杆等的低级访问。它还通过OpenGL支持3D硬件。SDL实际上是对底层绘图API(Direct3D,OpenGL)的封装,使用起来明显简单于直接调用底层 API。 OpenGL是由SGI公司1992年7月发布,是一款基于桌面操作系统、功能强大、调用方便

qq_43541062的博客 3826

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: Leetcode解题思路
下一篇: 2020网易雷火游戏客户端开发实习生面试题
梁轩
博客等级 码龄9年 5粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值