openGL几何系统

OpenGL学习笔记:三维数学基础(一)坐标系、向量、矩阵 本博文为博主原创,转载请注明出处:http://blog.youkuaiyun.com/xiemotongye/article/details/9052165 接触OpenGL和计算机图形学有一段时间了,一直想写一点东西,记录自己的学习历程,或许也能够为有意愿向计算机图形学发展的菜鸟们提供一条捷径。 闲话不多说,本章主要介绍计算机图形学中三维数学的一些基础知识,主要包括2D、3D笛卡尔坐标系,向量、矩阵的 阅读详情

概括:openGL是一个三维的图形库,我们调用openGL的API在三维当中绘制图形以及对其进行相应的控制,如平移、旋转等,openGL根据综合的因素对我们绘制的图形进行处理并显示在屏幕上。

一、坐标系统

1.1、任何的几何图形无论是三维的还是二维的都是由点组成的,而我们描述点就是描述其坐标,描述坐标就必须有参考位置也就死坐标系,openGL中采用的三维直角笛卡尔坐标系。简单的说就是x y z轴相互垂直的坐标系统。

1.2、在openGL中坐标系和点的坐标值都是用矩阵表示的。

    1.2.1、直角笛卡尔坐标系用如下的矩阵表示

                [1,0,0]  ->表示x轴

                [0,1,0]  ->表示y轴

                [0,0,1]  ->表示z轴

                矩阵中的每一行代表一个向量,而这些向量的几何就表示了坐标系。

     1.2.2、点的坐标如下表示

                [x1 x2]

                [y1 y2]

                [z1 z3]

                注意x y z的位置,矩阵中每一列表示一个点坐标,点的维度(矩阵的列数)必须和坐标系的行数相同,为什么要相同?因为只有相同了,矩阵之间的乘法才有意义,

                矩阵的乘法的意义就是几何转换的意义,下面再讲。

二、几何转换

2.1、旋转和缩放可以通过矩阵相乘来实现,而平移可以通过矩阵相加来实现,openGL为了实现两者的统一就是所有的几何变换都是通过矩阵相乘来实现,所以对坐标系和点的矩阵进行了修改,表示如下:

           2.1.1、openGL坐标系表示

                         [1,0,0,0] ->表示x轴,最后一个值可以设定平移

                         [0,1,0,0] ->表示y轴,最后一个值可以设定平移

                         [0,0,1,0] ->表示z轴,最后一个值可以设定平移

                         [0,0,0,1]

           2.2.2、openGL点的表示

                         [x1,x2]

                         [y1,y2]

                         [z1,z2]

                         [1 ,1]->本来是凑数的,呵呵,满足矩阵运算,但是openGL赋予了最后一个坐标值意义,就是整体的缩放。

           2.2.3、几何变换就是点相对于坐标系的位置改变了,在openGL中当发生几何变换,就是通过把各个点的矩阵和变换矩阵相乘来实现。

三、模型视图与投影视图

3.1、模型视图可以理解为描述几何图形的视图,当我们对几何图形进行变换时,实际上是对模型视图矩阵进行相应的乘法操作,也就是说经过变换以后我们得到了一个相对于一个坐标系统的一系列点坐标(点矩阵)。

3.2、投影视图是把由模型视图得来的点坐标映射到屏幕上,这里有正投影和透视投影两种方式,正投影就是从z轴的正方向垂直往往负方向投影,而透视投影可以任意选择角度和方向对几何图形进行观察。

3.3、最后我们还要设置窗口的剪裁特性,openGL根据以上的设置完成了几何图形的显示。

四、openGL几何转换相关函数举例说明。

4.1、glViewport

这个函数设置窗口中的哪一块区域用于几何对象的投影,下面举例说明。

#include <gl/glut.h>
void reshape(int w,int h);
float mymatrix[16]={1,0,0,0,0,1,0,0,0,0,1,0,20,0,0,1};

void draw_graph(void) {
	glClear(GL_COLOR_BUFFER_BIT);
	glColor3f(0,1,0);

	glRecti(-50,50,50,-50); //在xy平面的中心画一个填充矩形

	glFlush();
}

void reshape(int w,int h) {
	glViewport(0,0,400,400);//窗口的宽度和高度是不包含标题栏的
	
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glOrtho(-200,200,-200,200,200,-200);
}

void frame_init(void) {
	glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
	glutInitWindowSize(400,400);
	glutInitWindowPosition(400,400);
	glutCreateWindow("Learning openGL");
	glutDisplayFunc(draw_graph);
	glutReshapeFunc(reshape);

	glClearColor(1.0,1.0,1.0,1.0);
}


int main(void) {
	frame_init();
	glutMainLoop();
	return 0;
}

上面的程序由于glViewport把投影区设置为和窗口一致,所以我们看到一个绿色的矩形投影到了窗口的正中央,效果如下:

如果把glViewport语句改成glViewport(0,0,200,200);则矩形被投影到了左下角的四分之一的正方形的中央,效果如下:

注意glViewport的参数的意义依次是 x,y,width,height

4.2、glMatrixMode

上文提到,几何变换就是对矩阵的乘法计算,在模型视图转换就是对模型视图矩阵计算,在投影设置的时候就是对投影矩阵进行计算。这个函数的意义就是声明现在要对那个矩阵进行转换了。

4.2.1、glMatrixMode(GL_PROJECTION);

声明对投影矩阵进行操作,能对投影矩阵产生影响的函数有。

正交投影:

glOrtho(-200,200,-200,200,200,-200); 设置正交投影,并设置3d画布范围。

gluOrtho2D(-200,200,-200,200);设置正交投影,并设置2d画布的范围,此时z轴坐标一直是0。

透视投影:

透视投影能从任意角度和方向观察几何图形,而且透视投影的另外最重要的特点是举例观察点远的物体投影到屏幕上时会相对较小。

gluPerspective(fovy,w/h,near,far)如下图


注意此函数的观察方向依然是z轴的负方向。

gluLookAt(观察者坐标,观察目标坐标,观察者上方向坐标),改变的是模型视图矩阵。

可以有比较高级的openGL模型视图转换函数,glTranslatef,glRotatef等。

矩阵可以进行压栈出栈的操作。

使用OpenGL的变换反馈(transform feedback)构造粒子系统 粒子系统是三维计算机图形学中用来模拟火,爆炸,雾,雪,流行尾迹或者发光轨迹等视觉效果的技术。粒子系统模拟这些现象的步奏简单的分为以下两步:   1. 更新每个粒子的属性,如粒子的颜色、速度,位置等。   2. 渲染粒子。采用billboard和纹理渲染粒子对象。   粒子系统负责管理粒子的个数和属性,当粒子结束生命周期时,如粒子的位置变换到特定的位置后,粒子系统负责将粒子设置为初始状态并开始 阅读详情

相关推荐

分形几何开发

【代码】分形几何开发。

alankuo的专栏 961

3D数学---对坐标系变换矩阵的理解

1.基向量横着摆是旋转,基向量竖着摆是变换坐标系

披风秃头侠的博客 5105

OpenGL Transform Feedback - 转换反馈的实例编程

在主程序中,我们需要创建一个顶点缓冲区对象(Vertex Buffer Object)来存储输入的顶点数据,并将其绑定到顶点数组对象(Vertex Array Object)。然后,我们创建一个转换反馈对象,并将其绑定到顶点数组对象。在OpenGL中,转换反馈(Transform Feedback)是一种强大的功能,它允许我们在渲染管线的顶点和几何着色器之间捕获顶点数据,并将其输出到缓冲区中。在本例中,我们将使用一个简单的顶点着色器和几何着色器,将输入的顶点位置沿Y轴方向平移一定距离。

CoderExtra的博客 240

3D数学--学习笔记(一):笛卡尔坐标系、向量、矩阵初识

3D游戏开发基础

Less Is More 6511

OpenGL图形编程:绘制四棱锥金字塔

OpenGL作为一款功能强大的图形API,已经成为计算机图形学领域中不可或缺的工具。它为开发者提供了一系列接口,使得在不同硬件和操作系统平台上的3D图形绘制变得简单而高效。本章将对OpenGL的历史、特点以及在现代图形编程中的地位做一个概览,为读者接下来的章节学习奠定基础。四棱锥金字塔是一种由一个四边形底面和四个等腰三角形侧面组成的几何体。在三维空间中,底面可以是任何四边形,但最常见的形式是正方形或矩形。金字塔的高度是从底面中心点到顶点的垂直距离。

weixin_33419305的博客 718

OpenGL所有的立体几何合集

应该有的 都有了 没有的 你自己用 那个几何函数替换一下 都一样 注意点

混淆矩阵-- 笛卡尔坐标系上的热力图

app.title = '笛卡尔坐标系上的热力图'; var hours = ['12a', '1a', '2a', '3a', '4a', '5a', '6a', '7a', '8a', '9a','10a','11a', '12p', '1p', '2p', '3p', '4p', '5p', '6p', '7p', '8p', '9p', '10p', '11p']; var days = ['Saturday', 'Friday', 'Thursd.

懒虫的博客 2822

半导体设备隔振必看:如何用天棚阻尼PID控制实现VC-C级振动抑制(含SIMULINK模型)

本文深入探讨了在半导体精密制造中,如何运用天棚阻尼PID控制算法实现VC-C级振动抑制。通过构建高保真单自由度仿真模型,详细解析了从算法原理、SIMULINK实现到参数整定的全链路方案,并针对谐波扰动提供了陷波滤波器设计方法,为工程师提供了从仿真到实践的完整主动隔振技术指南。

pz89012345的博客 537

OpenGL之glViewPort函数的用法

其函数原型为:glViewport(GLint x,GLint y,GLsizei width,GLsizei height)x,y 以像素为单位,指定了视口的左下角位置。width,height 表示这个视口矩形的宽度和高度,根据窗口的实时变化重绘窗口。在默认情况下,视口被设置为占据打开窗口的整个像素矩形,窗口大小和设置视口大小相同,所以为了选择一个更小的绘图区域,就可以用glViewport函...

草上爬的博客 4万+

R语言绘图中文显示全攻略:从乱码到完美适配

本文详细解析了R语言绘图中的中文显示问题,从乱码根源到完美适配方案。通过showtext、sysfonts和extrafont等工具包的应用,提供跨平台的中文显示解决方案,涵盖ggplot2图表、PDF/PNG输出及Shiny应用等场景,助力用户高效实现R绘图中文完美呈现。

hp777的博客 257

Android:Google三方库之Adjust集成详细步骤

Android为APP添加google adjust功能

学习就是我的个性 4473

OpenGL 中绘制几何图形的不同模式

绘制模式

追赶时代的博客 431

拼多多爬虫实战:逆向sign与anti_content动态参数解析

现代电商爬虫已远超基础HTTP请求范畴,其核心在于理解服务端如何通过动态签名(sign)、设备指纹、行为验证等多维机制定义‘合法请求’。拼多多作为典型代表,将价格、销量、评价等关键数据完全剥离HTML,转由强校验API返回,依赖HMAC-SHA256嵌套签名、anti_content前端加密载荷及滑动验证token闭环。这类机制本质上是客户端环境可信度与请求上下文一致性的实时博弈,技术价值在于保障数据安全与业务风控。典型应用场景包括竞品价格监控、销量趋势分析、评价情感挖掘等需高保真数据的商业分析任务。本文聚

weixin_29741447的博客 831

状态量管理和绘制几何物体---1

绘图补救工具箱: 1.清空窗口:

飞翔在蓝天绿水之间 590

零基础搭建本地AI绘画环境:Stable Diffusion 3.5保姆级安装教程(含中文优化方案)

本文提供零基础搭建本地AI绘画环境的详细教程,重点介绍Stable Diffusion 3.5的安装与中文优化方案。从硬件配置检查到软件依赖安装,再到核心组件配置与中文语义增强,教程涵盖全流程操作指南,帮助用户快速掌握AI文生图模型的本地部署技巧,提升创作效率。

weixin_30752699的博客 312

在blender中安装vtk插件

Blender 是一个开源的、功能强大的3D计算机图形软件,广泛用于创建动画片、视觉效果、艺术作品、3D打印模型、互动3D应用程序和视频游戏。Blender 是由 Blender 基金会开发和维护的,具有丰富的功能和灵活的扩展性。在github上下载zip插件。

如果想成为中心,那么就到中心去吧。 293

OpenGL学习(二) 状态管理和绘制几何物体

本章目标 用任意一种颜色清除窗口 强制完成所有尚未执行的绘图操作 在二维或三围空间绘制几何图元,如点、直线和多边形 打开或关闭状态,以及查询状态变量的值 控制几何图元的显示,例如、绘制虚线或轮廓多边形 在实心物体表面的适当位置指定法线向量 用顶点数组和缓冲区对象存储和访问几何数据,可以减少函数调用的数量 同时保存和回复几个状态变量 绘图工具箱清除窗口在计算机中,保存图片的内存通常被计算机所绘制的前一

mxc的专栏 637

【毕设实战】基于YOLOv8的HRSC2016船舶智能检测系统开发全指南(含可视化UI界面,打造海事领域高分毕设)

亲爱的同学,通过这篇教程,你已经掌握了“基于YOLOv8的HRSC2016微小船只检测系统”从数据集处理、模型训练到Tkinter界面开发的全流程。这个课题既贴合“海事智能化”的产业战略,又涵盖了“目标检测、深度学习、界面开发”等多个毕设评分点,非常适合作为计算机或海事工程专业的毕业设计。在实践中,你可能会遇到“海面背景复杂导致船只漏检”“微小船只识别精度不足”“UI与模型推理同步卡顿”等挑战——别担心,这些都是技术成长的必经之路。

know_F0727的博客 127

Opengl 入门,学习网站,常用函数详解 (gluproject,gluUnProject,glReadPixels)

Opengl 学习网站、入门理解、常用函数理解

qq_45092173的博客 1901

前端使用二开Thingsboard一、二、三事(三)-规则链

以项目实战为基础,逐步介绍前端在thingsboard系统二次开发中的一些注意事项以及一些thingsboard一些页面功能讲解,为前端人员开发使用thingsboard提供一种可靠思路,打造一个完美的物联网系统。

weixin_43163457的博客 863

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Unity Shader:用几何着色器实现复联3灭霸的终极大招灰飞烟灭

(上图:效果图1。普通网格模型) (上图:效果图2。几何着色器粒子化特效进行中。) (上图:效果图3。几何着色器粒子化特效进行中。) 1,用几何着色器进行图元转换 在OpenGL渲染管线中,几何着色器(Geometry Shader)有一个独一无二的工功能,既是图元转换。这里不对理论进行过多的讨论,可简单理解为渲染点,线,面之间的转换。 实现很简单,只有注意语法即可,以本...

liu_if_else的博客 3889

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

opengl教程 linux,绘制基本的几何图形 - OpenGL编程学习实战教程_Linux编程_Linux公社-Linux系统门户网站...

第2章.编写一个的钟表程序第一节.绘制基本的几何图形矩形、三角形、圆形等这些都是经典的几何图形,他们都由线构成的(圆形看成是有很多根短线收尾相连围成的),而线都是点构成的。想起了某一年狗血的高考题=。=....而在OpenGL中画线很简单,你指定线两端的顶点即可。指定顶点的函数如下:glVertex2dglVertex2fglVertex3fglVertex3v每个函数用法各有不同,我们目前的需求...

weixin_33587161的博客 474

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

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

OpenGL程序设计轻松入门

ark1111的专栏 3083

什么是opengl

Opengl是图形硬件的一种软件接口。这个接口包含的函数超过700个,这些函数可以用于指定物体和操作,创建交互式的三维应用程序。 Opengl的设计目标就是作为一种流线型的,独立于硬件的接口,在许多不同的硬件平台上实现。为了实现这个目标,Opengl并未包含用于执行窗口任务或者获取用户输入之类的函数。反之,必须通过具体的窗口系统来控制OpenGL应用程序所使用的特定硬件。 OpengGL并没有...

weixin_34101784的博客 102

计算机图形学OpenGL应用教程

计算机图形学OpenGL应用教程 去发现同类优质开源项目:https://gitcode.com/ 本书《Computer.Graphics.Using.OpenGL.(3rd_Edition)》深入浅出地介绍了计算机图形学的核心理论及OpenGL编程实践。全书内容丰富,涵盖了图形系统、二维图形生成、几何变换、二维与三维观察、三维对象、真实感图形技术、交互技术及动画等多个方面。 内容概述 图形系...

gitblog_06783的博客 607

openGL第三讲——体系结构

OpenGL基础技术讲座--体系结构OpenGL是一套图形标准,它严格按照计算机图形学原理设计而成,符合光学和视觉原理,非常适合可视化仿真系统。首先,在OpenGL中允许视景对象用图形方式表达,如由物体表面顶点坐标集合构成的几何模型,这类图形数据含有丰富的几何信息,得到的仿真图像

dx7128551的专栏 476
上一篇: perl的数据类型
下一篇: 8086最小模式原理总结
codesnail
博客等级 码龄18年 113粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值