OpenGL-学习之路-简单二维几何变换及应用

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

简单二维几何变换


1. 回顾gluOrtho和glViewport


在OpenGL中,gluOtho和glViewport 为两个比较重要的投影变换函数。

-gluOrtho 是创建一个正交平行的视影体的矩阵,并把它与当前矩阵相乘,裁剪出要显示的部分。例如你画出了一个半径为1,中心点在圆点的二维图形圆形,gluOrtho2D作用在了 (0,1,0,1)。则最终显示了个1/4圆形。

-glViewport 则是定义了像素矩阵,最终图像将映射到该矩阵。例如,上面那个1/4圆形原本是显示在左下角,如果我们将glViewport  定义在(0,1,1,1),则该1/4圆形显示在了窗口的左上角。

简单来说: gluOrtho定义了显示的内容,glVieport则设置了显示的位置。

更详细内容:

http://www.cnblogs.com/yxnchinahlj/archive/2010/10/30/1865298.html

http://blog.csdn.net/lingedeng/article/details/7302204


2. 简单二维几何变换


简单二维几何的变换,可以通过 坐标变换 或 矩阵变换。两个方法各有长处,具体使用看实际情况。

下面是平移,旋转,缩放的简单二维图形变换。


#include <gl\glut.h>
#include <iostream>
using namespace std;

//transilate时,x,y上的增量
float i = 0,j=0;
//rotate时的角度增量
GLint angle=0;
//scale时,x,y上的增量
float s1 = 1, s2 = 1;

void init()
{
	glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
	glMatrixMode(GL_PROJECTION);
	gluOrtho2D(0.0, 600.0, 0.0, 600.0);
}

void display()
{
	glClear(GL_COLOR_BUFFER_BIT);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();

	glTranslatef(300+i, 300+j, 0);
	glRotatef(angle % 360, 0, 0, 1);
	glScalef(s1, s2, 0);

	glColor3f(0, 0.6, 0.5);
	glRectf(-100, 100, 100, -100);

	glFlush();
	glutSwapBuffers();
}

void keyboard(unsigned char key, 
二维图形学的变换-平移、旋转、缩放 OpenGL 这里实现的是多点画多边形,然后把这个多边形进行二维的变换。 首先,多点画多边形,为了方便起见,我直接调用了Opengl的库函数。其次,就是如何进行多边形的二维变换。在这里我有两种方法。第一种是直接根据数学三角等公式推断得到结果。第二种方法是用矩阵相乘的方法。 先讲第一种: 平移 假如我要平移a到b的位置: 那么操作就是:把这个多边形的n个顶点从一个位置移动到另外一个位置,然后 阅读详情

相关推荐

计算机图形学入门:基于GDI与Win32的算法实现与开发环境搭建

计算机图形学是研究如何在计算机中表示、生成处理图形的技术领域,其核心原理涉及光栅化、几何变换与图形渲染管线。理解这些基础概念对于掌握现代图形API至关重要。在工程实践中,开发环境配置是首要步骤,例如在Windows平台搭建Visual Studio并处理VC++运行库依赖。通过经典的Win32 GDI接口,开发者可以直观学习像素操作、设备上下文(HDC)等底层机制,并实现Bresenham直线算法、区域填充等核心算法,从而深入理解图形生成的数学原理与性能优化。这些知识为后续学习OpenGL、DirectX

weixin_30825199的博客 402

opengl二维几何变换实例

opengl二维几何变换 opengl提供的几何变换函数绘图函数是完全分开的,并没有指定一个变换矩阵然后再绘图的API。 opengl是先使用几何变换函数,此时相当于永久改变了坐标系,此后的所有绘图操作都相当于在新坐标系下进行。 如 glTranslatef(100, 100, 0); 相当于把当前坐标轴向x轴正向y轴正向同时移动100个单位,此后所有的绘图函数都参照此新坐标系进行。此时如果在新坐标系原点绘制一个点,相当于在原坐标系的(100,100)处绘制一个点 opengl一共有四个矩阵栈,应用于不

o83290102o5的博客 5767

OpenGL二维几何变换

图形变换的基本原理 ①变换图形就是要变换图形的几何关系,即改变顶点的坐标; ②保持图形的原拓扑关系不变(各个点的连接方式) 仿射变换 图形的仿射变换遵循两点: 1、“平直性”:即直线经过变换后依旧还是直线。 2、“平行性”:二维图形之间的相对位置关系保持不变,平行线依然是平行线,且直线上点的位置顺序不变。 点、直线、多边形变换的原理 T是指二维变换矩阵 二维几何变换函数 平移 glTranslatef( Tx, Ty, Tz,); 实例: void draw1() { glBegin(GL_POLY

weixin_52908396的博客 1174

计算机图形学(3):OpenGL2D物体进行平移,旋转缩放

每次渲染初始化模型矩阵,对其进行响应的变化然后传到着色器中,最后画出三角形。此代码为老师给的样例代码基础上进行修改。配置OpenGL环境看第一篇文章。按WASD进行上下左右移动。完整main.cpp。

jzb的博客 3054

OpenGL】绘制表情并实现二维基本变换:平移、旋转、缩放

OpenGL】绘制表情并实现二维基本变换:平移、旋转、 缩放1.绘制目标2.核心代码2.1 绘制圆面2.2 绘制圆弧2.3 绘制脸蛋2.4 键盘操作3.全部代码4.运行结果 1.绘制目标 二维基本变换:平移、旋转、缩放 • glTranslate*() • glRotate*() • glScale*() • 小提示:对圆盘进行三角化,然后基于GL_TRIANGLE_FAN绘制。 2.核心代码 2.1 绘制圆面 /// <summary> /// 绘制圆面 /// </summar

敲代码两年半的练习生博客 1874

(二)OpenGL坐标平移、旋转与缩放

1.坐标平移:glTranslate void glTranslated(GLdouble x,Gldouble y, Gldouble z) void glTranslatef(GLfloat x,Glfloat y, Glfloat z)   参数说明:x,y,z 指定平移向量的x,y,z坐标,即将当前坐标系分别向x,y,z方向移动x,y,z个单位长度。   举例,将在原坐标系中画一个红色三角...

遥望星河的博客 5388

实验5 OpenGL二维几何变换

1.实验目的: 理解并掌握OpenGL二维平移、旋转、缩放变换的方法。 2.实验内容: (1)阅读实验原理,掌握OpenGL程序平移、旋转、缩放变换的方法。 (2)根据示范代码,完成实验作业。 3.实验原理: (1) OpenGL下的几何变换OpenGL的核心库中,每一种几何变换都有一个独立的函数,所有变换都在三维空间中定义。 平移矩阵构造函数为glTranslate<f,d>(tx, ty, tz),作用是把当前矩阵一个表示移动物体的矩阵相乘。tx、ty、tz指定这个移动物体的矩阵

图形学与可视化 1万+

opengl三维几何变换实例

引言 > 接上一篇 要在opengl中显示三维物体需要将投影模式设置为透视 如gluPerspective(45, 1, 0, 100); 第一个参数为fov角,第二个参数是高比,后两个参数分别是最近可视距离最远可视距离 #include<glut.h> int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GL

o83290102o5的博客 3427

计算机图形学 学习笔记 二维几何变换

应用于对象几何描述并改变它的位置、方向或大小的操作称为几何变换几何变换有时也称为建模变换。建模变换一般用于构造场景或给出由多个部分组合而成的复杂对象的层次式描述等。

漫漫无期的博客 5398

计算机图形学实验五:OpenGL下的几何变换

本来是一个简单二维变换的题目,老师说做完让他看,于是逐渐加了诸多要求 题目描述 绘制如下图形: 提示: (1)写一个绘制菱形的函数drawDiamond(void); void drawDiamond(void) //绘制中心在原点的菱形 { glBegin (GL_POLYGON); //顶点指定需要按逆时针方向 glVertex2f (0.0f,-1.0f);//下点 glVertex2f (2.0f,0.0f);//右点 glVertex2f (0.0f, 1.0f).

Leon14138的博客 5976

计算机图形学基础:实验5 OpenGL二维几何变换

计算机图形学基础:实验5 OpenGL二维几何变换

weixin_63503933的博客 3039

计算机图形学笔记——第7章 二维几何变换 Python

第7章 二维几何变换 应用于对象几何描述并改变它的位置、方向或大小的操作称为几何变换(geometric transformation)。 几何变换有时也称为建模变换(modeling transformation),但有些图形系统将两者区分开来。建模变换一般用于构造场景或给出由多个部分组合而成的复杂对象的层次式描述等。 基本的二维几何变换 平移、旋转缩放是所有图形软件包中都包含的几何变换函数。可能包括在图形软件包中的其他变换函数有反射错切操作。 二维平移 通过将位移量加到一个点的坐标上来生成一个新的坐

绝尘 4855

计算机图形学(二维、三维几何变换

一、几何变换的概念 几何变换又称建模变换,指只改变组成形体的几何元素的几何信息(大小、形状、相对位置),而不改变图形拓扑信息的变换。 图形变换模式: (1)坐标系不动,图形变动(以下内容采用这种模式) (2)图形不动,坐标系变动 图形学中这些基本变换通过矩阵实现。 二、基本几何变换:相对于坐标原点坐标轴的平移、旋转、缩放(变比)、投影。 将参与变换的点写成向量的形式,如列向量: 1.二维平移变换 将点(x,y)平移到点(x’,y’) 2.二维旋转变换 需要指定旋转的基准点(绕那个点旋转)旋转的角度(

qq_51476492的博客 8981

计算机图形学头歌实训平台作业OpenGL二维几何变换

第1关 正方形的平移与缩放 // 提示:写完代码请保存之后再进行评测 #include <GL/freeglut.h> #include<stdio.h> // 评测代码所用头文件-开始 #include<opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp> #include<opencv2/imgproc/imgproc.hpp> // 评测代码所用头文件-结束 void i

qq_52497285的博客 4685

实验六 二维几何变换实验

本文实现了一个二维几何变换实验程序,通过OpenGL演示了三角形对象的平移、旋转缩放变换。程序采用3×3变换矩阵实现二维几何变换,包括初始化单位矩阵、矩阵乘法运算等基本操作。实验结果显示,原始蓝色三角形经过变换后成为红色三角形,验证了变换矩阵的正确性。该实验帮助学生理解二维几何变换原理,掌握变换矩阵的使用方法,为计算机图形学学习打下基础。

2301_81869658的博客 624

计算机图形学12:二维图形的几何变换

计算机图形学:二维图形的几何变换——附原理及详细代码

你的问题在于,读书太少而想得太多。 2360

OpenGL二维几何变换(1 - 4)

实验一: 实验步骤:首先要进行背景颜色的设定显示的范围图形的绘制,画一个凸多边形可以调用glBegin(GL_POLYGON),后边用glVertex2f( , )指定顶点坐标,需要注意凸多边形的顶点指定需要按逆时针方向 然后在myDraw函数里面设置颜色红色:glColor3f(1.0,0.0,0.0);绿色:glColor3f(0.0,1.0,0.0);蓝色:glColor3f(0.0,1.0,0.0); 平移函数 :glTranslatef(0.0,2.0,0.0);...

qq_44797733的博客 2783

OpenGL 二维几何变换实战:4个关卡代码解析与矩阵堆栈应用

本文深入解析OpenGL二维几何变换的实战应用,通过四个关卡详细讲解平移、旋转、缩放等矩阵操作与矩阵堆栈管理技巧。从基础变换到复杂的三菱图案实现,帮助开发者掌握CG2中的核心几何变换原理与应用方法,提升计算机图形学开发能力。

weixin_34014555的博客 380

计算机图形学(四)_几何变换_1_基本的二维几何变换(三)_缩放

改变一个对象的大小,可使用缩放(scaling)变换。一个简单二维缩放操作可通过将缩放系数(scaling factor)Sx Sy与对象坐标位置(x, y)相乘而得: 在缩放公式中包含固定点的坐标,类似于在旋转公式中包含基准点的坐标。我们可以建立一个其元素为方程(5.14)中常数项的列向量,然后将这个列向量加到等式(5.12)中的乘积S*P上。下一节将讨论仅包含矩阵乘法的变换方程的矩阵形式。 多边形的缩放可以通过将变换方程(5.14)应用于每个顶点,然后利用变换后的顶点重

heyuchang666的专栏 9973
上一篇: 胜利大逃亡
下一篇: OpenGL-学习之路-简单多边形显示 及 多边形类型判断 和 凹多边形的切割 (待更新)
一茶勺
博客等级 码龄12年 5粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值