glPushMatrix/glPopMatrix简介及示例(在不同位置绘制图形)

这篇具有很好参考价值的文章主要介绍了glPushMatrix/glPopMatrix简介及示例(在不同位置绘制图形)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

glPushMatrix()函数

glPushMatrix()函数是OpenGL中的一个栈操作函数,用于将当前矩阵压入栈中。

在OpenGL中,矩阵是用来对三维坐标进行变换的工具。例如,使用glTranslatef()函数可以对坐标进行平移变换,使用glRotatef()函数可以对坐标进行旋转变换。

在调用glPushMatrix()函数之后,当前矩阵会被复制一份并压入栈中。这样,在之后的操作中,可以使用栈顶的矩阵进行变换,而不会影响之前的变换。

压入的当前矩阵是什么?

glPushMatrix()函数压入的是当前矩阵,当前矩阵是一个4*4的矩阵,用来存储当前所有变换信息。在OpenGL中,进行坐标变换时,会对当前矩阵进行相应的操作,例如平移、旋转、缩放等。

例如,在调用 glTranslatef(1.0, 0.0, 0.0) 之后,当前矩阵会被更新成平移矩阵,在调用glRotatef(30, 0.0, 1.0, 0.0)之后,当前矩阵会被更新成旋转矩阵。

glPushMatrix() 函数将当前矩阵复制一份并压入栈中,这样就可以在之后的操作中使用栈顶的矩阵进行变换而不会影响之前的变换。

示例:OpenGL一次画三个不同位置的圆柱体

在OpenGL中绘制三个不同位置的圆柱体,可以使用glPushMatrix()和glPopMatrix()函数。

首先,在绘制第一个圆柱体之前调用glPushMatrix(),这样可以将当前矩阵压入栈中。然后在绘制第一个圆柱体时,使用glTranslatef()函数将其平移到需要的位置。接着在绘制第二个圆柱体之前调用glPushMatrix(),并使用glTranslatef()函数将其平移到另一个位置。同理绘制第三个圆柱体。最后,在绘制完第三个圆柱体之后,需要调用glPopMatrix()两次 将矩阵出栈,这样才能保证矩阵变换不会影响后续的渲染。

如果你需要对每个圆柱体做不同的旋转或缩放,那么在glPushMatrix()和glTranslatef()之间增加glRotatef()或glScalef()函数即可。

下面是一个简单的示例,绘制三个不同位置的圆柱体,并将其旋转不同的角度。

glPushMatrix()
glTranslatef(1.0, 0.0, 0.0)
glRotatef(30, 0.0, 1.0, 0.0)
drawCylinder()
glPopMatrix()

glPushMatrix()
glTranslatef(-1.0, 0.0, 0.0)
glRotatef(-30, 0.0, 1.0, 0.0)
drawCylinder()
glPopMatrix()

glPushMatrix()
glTranslatef(0.0, 0.0, 1.0)
glScalef(0.5, 0.5, 0.5)
drawCylinder()
glPopMatrix()

在绘制圆柱体时,需要对每个圆柱体进行不同的平移和旋转变换,所以需要使用glPushMatrix()函数将当前矩阵压入栈中,这样可以保证每个圆柱体之间互不影响。

使用glPopMatrix()函数可以将当前矩阵从栈中弹出。这样可以保证当前矩阵只包含当前圆柱体的变换。文章来源地址https://www.toymoban.com/news/detail-699990.html

到了这里,关于glPushMatrix/glPopMatrix简介及示例(在不同位置绘制图形)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 鸿蒙开发-UI-图形-绘制自定义图形

    鸿蒙开发-UI-组件 鸿蒙开发-UI-组件2 鸿蒙开发-UI-组件3 鸿蒙开发-UI-气泡/菜单 鸿蒙开发-UI-页面路由 鸿蒙开发-UI-组件导航-Navigation 鸿蒙开发-UI-组件导航-Tabs 鸿蒙开发-UI-图形-图片 鸿蒙开发-UI-图形-绘制几何图形 文章目录 前言 一、使用画布组件绘制自定义图形 1.初始化画布组

    2024年04月15日
    浏览(34)
  • Pygame 教程(3):绘制图形

    本章,你将学习如何在 Pygame 中绘制图形。 上一章:重要的概念及对象 下一章:图像传输和绘制文本 抗锯齿(anti-aliasing,简称 AA)是一种消除显示器输出的画面中图物边缘出现凹凸锯齿的技术。实现抗锯齿效果需要更多的计算时间,因此在进行高质量绘制的同时,也会带来

    2024年02月06日
    浏览(33)
  • 17、二维图形绘制

    目录 (一)plot绘图指令 (1)plot(x,y) (2)plot(y)。 (3)plot(z)。 (4)plot(A)。 (5)plot(x,A)。 (6)plot(A,x)。 (7)plot(A,B)。 (8)plot(x,y,str)。 (9)plot(x1,y1,str1,x2,y2,str2,...)。 (二)格栅 grid ongrid off (三)文字说明(标注、文字格式) (四)线型、标记和颜色 1.线型 2.标记

    2024年02月09日
    浏览(33)
  • MATLAB简单图形绘制(五)

    目录 实验目的 实验内容   1)掌握MATLAB图形绘制的基本原理和方法; 2)熟悉和了解MATLAB图形绘制程序编辑的基本指令; 3)掌握利用MATLAB图形编辑窗口编辑和修改图形界面,并添加图形的各种标注; 4)掌握plot、subplot的指令格式和语法。 2-1)、设 在=0~2π区间等间隔取100点

    2023年04月14日
    浏览(74)
  • 实验绘图绘制有效图形

    科研作图 草稿,辅助实验:说明目的即可,甚至直接在纸上作出草图。简单的分 析利用Excel、VectorNTI和画图板即可。 简便易学,但较为粗糙,难登大雅之堂。 演示,用在PowerPoint或海报中。要求制作精细,色彩鲜明。3.发表文章 发表文章,需要输出为EPS和TIF格式的图片。由于

    2024年01月22日
    浏览(51)
  • 【bar堆叠图形绘制】

    在数据可视化中,条形图是一种常用的图表类型,用于比较不同类别的数据值。Python的matplotlib库为我们提供了方便易用的功能来绘制条形图。 首先,我们展示如何绘制基本的条形图。假设我们有一个包含十个类别的数据集,其中每个类别都有两个相关的数据值。我们使用

    2024年02月15日
    浏览(33)
  • c++基本图形绘制

    在C++的OpenCV库中,你可以使用 line 函数来绘制一条直线。这个函数允许你指定线段的起点和终点,以及线段的颜色和线宽。 以下是 line 函数的基本语法: img :要在其上绘制线段的图像。 pt1 :线段的起点坐标。 pt2 :线段的终点坐标。 color :线段的颜色,通常使用 Scalar 来表

    2024年02月03日
    浏览(38)
  • opencv图形绘制2

    目录 制作宣传语(中文) 制作宣传语(英文) 绘制标记 鼠标交互绘制十字线 鼠标交互绘制图形 鼠标交互制作几何画板 滚动条控制 鼠标事件练习 # cv2.putText函数在图像上添加文本 # cv2.putText(img, text, org, font, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]]) \\\'\\\'\\\'     img:图像

    2024年02月20日
    浏览(36)
  • 使用OpenCV绘制图形

    绘制黄色的线: 绘制矩形: 绘制圆形: 绘制多边形: 绘制文字:

    2024年01月22日
    浏览(51)
  • Html利用Canvas绘制图形

    今天接到粉丝私信,询问是否可以通过Canvas绘制一些图形,然后根据粉丝提供的模板图,通过Canvas进行模拟绘制,通过分析发现,图形虽然相对简单,但是如果不借助相应的软件,纯代码绘制还是稍微费些时间。今天将绘制图形源码分享出来,仅供学习分享之用,如有不足之

    2024年02月16日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包