首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在OpenGL中获取矩阵堆栈的当前大小?

在OpenGL中获取矩阵堆栈当前大小的方法如下:

首先,确保矩阵堆栈被启用。如果你没有将矩阵作为变换,则不需要它。使用OpenGL函数glEnableVertexAttribArray()启用相应的属性,并使用glGetAttribLocation()获取属性的唯一索引。下面是一个示例代码:

代码语言:txt
复制
// 顶点在缓冲区的位置
GLfloat vertices[] = {0.5f, 0.5f, 0.0f, 0.0f};

// 顶点属性
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vertices);

// 启用并设置矩阵堆栈属性
glEnableVertexAttribArray(1); // 启用属性 1
glVertexAttribDivisor(1, 1); // 设置 divisor

GLint matrixStackSize = 0;
glGetAttributei(GL_MATRIX_STACK_BINDING, GL_ACTIVE_MATRIX_STACK_DEPTH, matrixStackSize); // 获取矩阵堆栈属性

这个代码段中,属性的数量(0)指的是顶点缓冲区的大小,而1指的是矩阵堆栈大小,这是你关注的信息。你可以使用glGetIntegeri_v()函数访问属性值。

总之,启用矩阵堆栈并使用glGetAttribLocation()获取属性id1并使用glGetIntegeri_v()获取矩阵堆栈的大小。

此外,还可以使用如下代码:

代码语言:txt
复制
// 矩阵缓冲区大小
glNamedBufferSubData(matrixBuffer, 0, &matrixStackSize * sizeof(GLint), NULL);
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

何在代码获取Java应用当前版本号?

最近需要在项目中获取项目的版本号,最笨方法莫过于硬编码一个版本号,当然我也是这么干。不过闲下来时候突发奇想Spring Boot项目中pom.xml定义版本号能不能通过API获得呢?...从配置文件读取 Maven在构建项目时可以通过资源插件将构建属性即pom.xml属性注入到指定资源文件,具体操作为: ... 恰好spring-boot-starter-parent已经设置了这种方式。...Spring Boot提供 Spring Boot其实已经内置了获取项目构建信息自动配置ProjectInfoAutoConfiguration,它包含一个条件BeanBuildProperties:...spring-boot-version", "time" : { "epochSecond" : 1620664643, "nano" : 591000000 } } 总结 今天介绍了几种从通过API获取项目构建版本信息方法

3.1K20

何在代码获取Java应用当前版本号?

最近需要在项目中获取项目的版本号,最笨方法莫过于硬编码一个版本号,当然我也是这么干。不过闲下来时候突发奇想Spring Boot项目中pom.xml定义版本号能不能通过API获得呢?...从配置文件读取 Maven在构建项目时可以通过资源插件将构建属性即pom.xml属性注入到指定资源文件,具体操作为: ... 恰好spring-boot-starter-parent已经设置了这种方式。...Spring Boot提供 Spring Boot其实已经内置了获取项目构建信息自动配置ProjectInfoAutoConfiguration,它包含一个条件BeanBuildProperties:...spring-boot-version", "time" : { "epochSecond" : 1620664643, "nano" : 591000000 } } 总结 今天介绍了几种从通过API获取项目构建版本信息方法

5.7K20

C#.NET 如何在第一次机会异常 FirstChanceException 获取比较完整异常堆栈

在 FirstChangeException 事件,我们通常只能拿到异常堆栈第一帧,这对于我们捕捉到异常是好,但对分析第一次机会异常可能并不利。...本文介绍如何在 FirstChangeException 事件拿到比较完整异常堆栈,而不只是第一帧。...另外,你也可以用 ExceptionDispatchInfo 让内部异常堆栈也连接起来,详见我另一篇博客: 使用 ExceptionDispatchInfo 捕捉并重新抛出异常 - 吕毅 获取较完整第一次机会异常堆栈...我们需要等到 FirstChanceException 事件异常被 catch 到,就能获取到第一次抛出地方到 catch 处之间所有帧。...因为我们只需要当前调用堆栈异常处理执行完成即可。

27140

OpenGL API 简介

核心库函数主要可以分为以下几类函数: 绘制基本几何图元函数: glBegain()、glEnd()、glNormal*()、glVertex*(); 矩阵操作、几何变换和投影变换函数: 矩阵入栈函数...错误反馈工具: 获取出错信息字符串 gluErrorString()。 3.OpenGL 辅助库 包含有 31 个函数,函数名前缀为 aux。...在跨平台编程实例和演示,aux 很大程度上已经被 glut 库取代。OpenGL 辅助库不能在所有的 OpenGL 平台上运行。...glListBase 为 glcallList 设定显示列表基础 glLoadIdentity 用恒等矩阵替换当前矩阵 glLoadMatrixd,glLoadMatrif 用一个任意矩阵替换当前矩阵...glPushmatrix,glPopMatrix 矩阵堆栈压入和弹出操作 glPushName,glPopName 名字堆栈压入和弹出操作 glRasterPos 定义像素操作光栅位置

2.2K41

实验5 OpenGL模型视图变换

当我们需要保存时,调用glPushMatrix()函数,它相当于把当前矩阵压入堆栈。当需要恢复最近一次保存时,调用glPopMatrix()函数,它相当于从堆栈栈顶弹出一个矩阵当前矩阵。...OpenGL规定堆栈容量至少可以容纳32个矩阵,某些OpenGL实现堆栈容量实际上超过了32个。因此不必过于担心矩阵容量问题。...通常,用这种先保存后恢复措施,比先变换再逆变换要更方便,更快速。 注意:模型视图矩阵和投影矩阵都有相应堆栈。使用glMatrixMode来指定当前操作究竟是模型视图矩阵还是投影矩阵。...OpenGL矩阵坐标之间关系 物理坐标*模型视图矩阵*投影矩阵*透视除法*规范化设备坐标——〉窗口坐标 ?...除了考虑视野之外,投影变换确定物体如何投影到屏幕上,OpenGL提供了两种基本类型投影,1、透视投影:远大近小;2、正投影:不影响相对大小,一般用于建筑和CAD应用程序 (4)视口变换 视口变换指定一个图象在屏幕上所占区域

1.6K30

glPushMatrix和glPopMatrix作用

就如很多opengl书上所讲:调用glPushMatrix其实就是把当前状态做一个副本放入堆栈之中。...整个过程是符合人思维过程,由于每次建模都是以单位阵为变换起点,故便于采用统一实现方式进行处理。 矩阵堆栈对复杂模型运动过程多个变换操作之间联系与独立十分有利。...因为所有矩阵操作函数glLoadMatrix()、glMultMatrix()、glLoadIdentity()等只处理当前矩阵堆栈顶部矩阵,这样堆栈中下面的其它矩阵就不受影响。...第二个函数表示弹出堆栈顶部矩阵,令原第二个矩阵成为顶部矩阵,接受当前操作,故原顶部矩阵被破坏;当堆栈仅存一个矩阵时,不能进行弹出操作,否则出错。...:OpenGL模型视图变换矩阵全是右乘当前变换矩阵 glPushMatrix(); //将当前变换矩阵(单位阵)压入堆栈 glTranslatef( 0.0, 0.0, -5.0 );

44430

实验6 OpenGL模型视图变换

(4)视口变换:将投影变换得到投影图映射到屏幕视区上,确定最终图像在屏幕上所占区域。 上述变换在OpenGL实际上是通过矩阵乘法来实现。...无论是移动、旋转还是缩放大小,都是通过在当前矩阵基础上乘以一个新矩阵来达到目的。OpenGL可以在最底层直接操作变换矩阵。...总结起来,OpenGL矩阵坐标之间关系为:模型世界坐标→模型视图矩阵→投影矩阵→透视除法→规范化设备坐标→窗口坐标。   ...在深度测试算法,通过扫描投影在xOy平面上每一点z坐标的大小,确定遮挡关系,只显示z坐标小像素,进而完成遮挡效果。...物体近大远小,参数分别为(视角,宽高比,近处,远处) else glOrtho(-3, 3, -3, 3, -100, 100); glMatrixMode(GL_MODELVIEW);//对模型视景矩阵堆栈应用随后矩阵

2K30

实验5 OpenGL二维几何变换

3.实验原理: (1) OpenGL几何变换 在OpenGL核心库,每一种几何变换都有一个独立函数,所有变换都在三维空间中定义。...从“相对移动”观点来看,改变观察点位置与方向和改变物体本身位置与方向具有等效性。在OpenGL,实现这两种功能甚至使用是同样函数。...当我们需要保存时,调用glPushMatrix()函数,它相当于把当前矩阵压入堆栈。当需要恢复最近一次保存时,调用glPopMatrix()函数,它相当于从堆栈栈顶弹出一个矩阵当前矩阵。...OpenGL规定堆栈至少可以容纳32个矩阵,某些OpenGL实现堆栈容量实际上超过了32个。因此不必过于担心矩阵容量问题。 通常,用这种先保存后恢复措施,比先变换再逆变换要更方便、更快速。...注意:模型视图矩阵和投影矩阵都有相应堆栈。使用glMatrixMode来指定当前操作究竟是模型视图矩阵还是投影矩阵

2.4K10

OpenGL基本框架与三维对象绘制

} } //自定义绘制圆函数 void glCircle() { double n=50;//分段数 float R=1.0;//半径 int i; //将绘图前模型变换矩阵压入堆栈...//这样,对当前图形变换对后面图形绘制不影响 glPopMatrix(); } //opengl 用户自定义绘图函数 void display(void) { //清除颜色缓存和深度缓存...度 //glRotatef(10, 1, 0, 0); //查看当前4X4 矩阵变量 Mat44 mat; //取得模型-视图变换矩阵 glGetFloatv...——在原有变换基础上,又增加了新变换; //为了不影响后续对象变换,采用压栈方式,保存当前变换矩阵 glPushMatrix(); { glTranslatef...0.7, 30.0f, 30.0f);//绘制实心圆环 } glPopMatrix(); //从堆栈恢复已压栈变换矩阵 //绘制实心球 glPushMatrix()

69620

OpenGL投影使用

OpenGL投影使用 在OpenGL,投影矩阵指定了可视区域大小和形状。对于正投影与透视投影这两种不同投影类型,它们分别有各自用途。...正投影 它适用于2D图形,文本、建筑画图等。在它应用场合,我们希望在屏幕上展示准确物体大小和度量。...这是一个经典嵌套变换样例,我们使用矩阵堆栈将一个物体依据还有一个物体进行变换,执行结果如图所看到: /* 程序清单 4-3 * 2014/5/18 */ #include <glut.h...fAspect = (GLfloat)w / (GLfloat)h; // 设置当前操作矩阵为投影矩阵 glMatrixMode(GL_PROJECTION);...glLoadIdentity(); // 定义*截头体, 45度视野,*、远*面为1.0和425.0 gluPerspective(45.0f,fAspect, 1.0, 425.0); // 设置当前操作矩阵为模型视图矩阵

78910

实验4 二维几何变换

3.实验原理: (1)OpenGL几何变换 在OpenGL核心库,每一种几何变换都有一个独立函数,所有变换都在三维空间中定义。...从“相对移动”观点来看,改变观察点位置与方向和改变物体本身位置与方向具有等效性。在OpenGL,实现这两种功能甚至使用是同样函数。...当我们需要保存时,调用glPushMatrix()函数,它相当于把当前矩阵压入堆栈。当需要恢复最近一次保存时,调用glPopMatrix()函数,它相当于从堆栈栈顶弹出一个矩阵当前矩阵。...OpenGL规定堆栈至少可以容纳32个矩阵,某些OpenGL实现堆栈容量实际上超过了32个。因此不必过于担心矩阵容量问题。 通常,用这种先保存后恢复措施,比先变换再逆变换要更方便、更快速。...注意:模型视图矩阵和投影矩阵都有相应堆栈。使用glMatrixMode来指定当前操作究竟是模型视图矩阵还是投影矩阵。 (3) 某图形绕任意点(cx, cy)旋转 α\alphaα 角。

1K20

实验3 OpenGL几何变换

(投影变换) 4、我们可能希望把整个看到图形画下来,但它只占据纸张一部分,而不是全部(指定在显示器窗口那个位置显示)。(视口变换) 这些,都可以在OpenGL实现。...从“相对移动”观点来看,改变观察点位置与方向和改变物体本身位置与方向具有等效性。在OpenGL,实现这两种功能甚至使用是同样函数。...当我们需要保存时,调用glPushMatrix()函数,它相当于把当前矩阵压入堆栈。当需要恢复最近一次保存时,调用glPopMatrix()函数,它相当于从堆栈栈顶弹出一个矩阵当前矩阵。...OpenGL规定堆栈容量至少可以容纳32个矩阵,某些OpenGL实现堆栈容量实际上超过了32个。因此不必过于担心矩阵容量问题。...通常,用这种先保存后恢复措施,比先变换再逆变换要更方便,更快速。 注意:模型视图矩阵和投影矩阵都有相应堆栈。使用glMatrixMode来指定当前操作究竟是模型视图矩阵还是投影矩阵

1.2K20

OPengl、DirectX、OPenCV、OpenCL

版本(否则有一些异常问题出现)   OpenGLgl库是核心库,glu是实用库,glut是实用工具库,gl是核心,glu是对gl部分封装,glut是OpenGL跨平台工具库   OPenGL...分为:核心模式(不支持以前版本)和兼容模式(支持以前版本函数) 状态变量:   1.Opengl State Value,保存Opengl相关参数设置,glClearColor设置清除颜色保存在...模型坐标系旋转)   glScale(模型坐标系缩放)   glMatrixMode(变换模式设置)   glloadindentity(移动模型坐标到视口原点)   glPushMatrix(获取当前栈顶矩阵压栈到新栈...)   glLoadMatrix(矩阵栈顶重赋值)   glMultiMatrix(栈顶相乘)   glGetFloatV(获取矩阵可以保存当前模型矩阵实现多个模型矩阵切换)   glDrawArrays...(绘制顶点数组)   glDrawElements(按索引数组,绘制顶点数组----两个数组)   glDrawRangeElements(按索引数组,绘制顶点数组任意段) OpenGL四种矩阵堆栈

2.1K50

投影矩阵 视图模型矩阵「建议收藏」

OpenGL在设置场景时,要用到两个矩阵:投影矩阵 和 模型视图矩阵通过glMatrixMode来指定下面的矩阵操作是针对哪一个矩阵进行。...gluLookatup,glTranslate, glRotate, glScale, glOrtho ,gluPerspective 等函数只根据其参数计算出一个矩阵M,然后与当前栈顶元素T相乘;但这些函数本身不能自动找到应该对应矩阵堆栈...,你可以将它们放在任何矩阵堆栈操作,比如可以将gluLookatup放在glMatrixMode(GL_PROJECTION)后面,则视点矩阵与投影矩阵堆栈当前栈顶元素相乘得到一个新投影矩阵,这样在某些情况下也可以得到正确结果...因此,最好按照Red Book规定,将glOrtho,gluPerspective放在投影矩阵,gluLookatup,glScale等放在视图模型矩阵。...(OpenGL为列主序矩阵,转置) 但可以在绘图之前任何时候执行投影变换和视口变换。 视锥体设置: 投影变换创建了一个六面体,位于视锥体内模型才能被看到,而外面的模型则被裁剪掉。

48120

OpenGL】十、OpenGL 绘制点 ( 初始化 OpenGL 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | 清除缓冲区 | 设置当前颜色值 | 设置点大小 | 绘制点 )

文章目录 一、初始化 OpenGL 矩阵 1、设置投影矩阵 2、设置模型视图矩阵 二、绘制点 1、清除缓冲区 2、设置当前颜色值 3、设置绘制点大小 4、绘制点 5、将缓冲区绘制到前台 三、部分代码示例...四、运行效果展示 五、相关资源 上一篇博客 【OpenGL】九、OpenGL 绘制基础 ( OpenGL 状态机概念 | OpenGL 矩阵概念 ) 简单介绍 OpenGL 一些理论概念 ; 本篇博客开始使用...(); 设置矩阵套路就是 , 先选中指定矩阵 , 然后再设置该矩阵 ; 二、绘制点 ---- 绘制点操作需要以下几步 , ① 清除缓冲区 , ② 设置当前颜色 , ③ 设置当前绘制大小 ,...// 获取窗口设备 dc = GetDC(hWnd); // 颜色描述符, 像素格式描述符 , 选取 OpenGL 渲染像素格式 PIXELFORMATDESCRIPTOR..., 蓝色 , 透明度 // 这里设置是红色 glClearColor(1.0, 0.0, 0.0, 1.0); 设置 当前绘制颜色 是白色 , 设置当前绘制点大小 20 像素 , 绘制效果就是一个

1.7K00

opengl glpushmatrix和glpopmatrix函数个人理解「建议收藏」

大家好,又见面了,我是你们朋友全栈君。最近在学习opengl,看到视图部分,感觉十分抽象,尤其是各种矩阵变换,头大。在网上看了很多高手们文章,感觉稍微有点眉目,就把自己理解写出来。...opengl坐标变换,总是针对当前矩阵,如果当前矩阵为M,紧跟变换矩阵为I,则执行完I后,当前矩阵变为M*I。...假设有一个存放矩阵变换堆栈当前矩阵为M,使用glpushmatrix将当前矩阵M副本M1压入栈顶,当前矩阵变为M1=M,当执行下一步矩阵变换I后,当前矩阵变为M1*I,执行完相应绘画功能后,我们希望下一步操作的当前矩阵为...M,使用glpopmatrix将当前矩阵M1*I弹出栈顶,M称为栈顶矩阵,也就是当前矩阵。...由于刚开始学习opengl,里面可能很多地方写不对,请大家见谅。

42420

附加实验2 OpenGL变换综合练习

3.实验原理: OpenGL通过相机模拟、可以实现计算机图形学中最基本三维变换,即几何变换、投影变换、视口变换等,同时,OpenGL还实现了矩阵堆栈等。...二、OpenGL几种变换 OpenGL各种转换是通过矩阵运算实现,具体说,就是当发出一个转换命令时,该命令会生成一个4X4阶转换矩阵OpenGL物体坐标一律采用齐次坐标,即(x, y..., z, w),故所有变换矩阵都采用4X4矩阵),当前矩阵与这个转换矩阵相乘,从而生成新的当前矩阵。...例如,对于顶点坐标v ,转换命令通常在顶点坐标命令之前发出,若当前矩阵为C,转换命令构成矩阵为M,则发出转换命令后,生成新的当前矩阵为CM,这个矩阵再乘以顶点坐标v,从而构成新顶点坐标CMv。...实际上这个函数操作是创建一个正射投影矩阵,并且用这个矩阵乘以当前矩阵

1.4K30

OpenGL】九、OpenGL 绘制基础 ( OpenGL 状态机概念 | OpenGL 矩阵概念 )

OpenGL 是一个状态机 , 其中包含了很多状态 , 简单列举下面的几项 : OpenGL 矩阵 Matrix , 包含了 投影 ( Projection ) 矩阵 , 模型 ( Model...View ) 矩阵 , 当前颜色 Color , 当前清除缓冲区颜色 ClearColor , 点大小 PointSize , 线宽度 LineWidth , 光照 Light \ \ \ \ \...(); 当前颜色值设置 : 绘制元素前 , 将当前颜色值设为一个值 , 白色 , 开始绘制后 , 就会自动使用该颜色进行绘制 ; 稍后会使用 OpenGL 在桌面窗口中绘制一个点 , 绘制前将当前颜色设置为白色..., 然后绘制颜色就是白色 ; 如果想要绘制不同颜色点 , 就需要在每次绘制前 , 都修改当前颜色值 ; 整个 OpenGL 只有一个当前颜色值 ; 二、OpenGL 矩阵概念 ---- OpenGL... 矩阵 Matrix , 包含了 投影 ( Projection ) 矩阵 , 模型 ( Model View ) 矩阵 , 绘制 点 定义在 世界坐标系 下 , 是一个三维点 , 该三维点需要将其显示到二维屏幕上

4K00

终端图像处理系列 - OpenGL ES 2.0 - 3D基础(矩阵投影)

Overview 移动设备屏幕是二维平面,要想把一个三维场景渲染在手机二维屏幕上,需要利用OpenGL矩阵投射,将三维空间中点映射到二维平面上。...三维矩阵相关知识是学习OpenGL最重要课程之一。 线性代数 学习OpenGL三维投射知识之前,我们得事先了解下一些基础线性代数知识,向量运算,矩阵运算。...矩阵矩阵之间加减: ? 矩阵乘法 矩阵数乘 ? 矩阵相乘 ? 单位矩阵OpenGL,由于大部分向量都是4分量 (x,y,z,w),所以我们通常使用 4x4 变换矩阵。...裁剪空间(Clip Space):顶点着色器运行到最后,OpenGL期望所有的坐标落在一个特定范围内,且任何在这个范围之外点会被裁剪掉。...3D Demo 至此我们了解了OpenGL 3D渲染需要知道矩阵知识,运用这些知识,便可进行开发OpenGL3D程序了;苹果官方提供一个很好GL demo GLEssentials ?

2.4K110
领券