原文查看
http://www.ibaiyang.org/2012/12/27/a-opengl-like-implementatio/
学过openGL人知道,openGL状态机的设计着实令人印象深刻。每一种状态都会一直持续影响后面物体的绘制,直到改变此状态。
openGL中维护了二套矩阵,模式视图矩阵,投影矩阵,这二套矩阵完成了所有的从三维到二维的几何变化,包括旋转,缩放,平移和投影。同时openGL还维护了二个栈,一个存储模式视图矩阵,一个存储投影矩阵。
千万不要小看这个栈的设计,我们可以举一个例子。
draw_object(1)
rotate(1)
translate(1)
push_matrix()
draw_object(2)
rotate(2)
translate(2)
pop_matrix()
draw_object(3)
其中rotate(2), translate(2)是不会影响draw_object(3)函数的,因为前面push_matrix将当前的压入栈中,当draw_object(2)后,pop_matrix()又恢复了之前的状态,故在draw_object(3)时,就恢复到了rotate(1),translate(1)的状态了。
我抽空用python和pyqt基本实现openGL的三维变化功能和二个栈的模拟。
代码放在我的github中。
https://github.com/baiyang/valleygl
以下是该代码的运行效果
分享到:
相关推荐
在实现OpenGL功能时,我们可能需要导入OpenGL的库,并通过易语言的动态链接库调用机制来调用OpenGL的函数。 其次,我们要了解OpenGL的基本概念,如顶点、图元、缓冲区、着色器等。在易语言中创建OpenGL上下文,设置...
在学习过程中,除了理解代码实现,还需要了解OpenGL的状态机模型、固定功能管道与着色器编程模型的差异,以及现代OpenGL更倾向于使用着色器进行复杂图形处理的特点。同时,实践是掌握OpenGL的关键,尝试修改代码,...
在这一部分中,你将学习如何为场景添加光照效果,并实现简单的键盘控制功能。光照可以让场景看起来更加生动,而键盘控制则可以使用户与场景互动。 #### 十、混合 混合技术可以为你的图形添加透明效果。这一章节将...
在NeHe的教程中,你将逐步了解到如何设置OpenGL环境,如何绘制基本形状,以及如何实现复杂的3D效果。 教程通常以实例驱动,每个章节都会涵盖一个特定的主题,例如: 1. **环境设置**:讲解如何配置OpenGL开发环境...
本项目“OpenGL制作的五角星”是初学者学习OpenGL的一个良好起点,通过这个简单的实例,我们可以深入理解OpenGL的基本概念和核心功能。 首先,我们要了解OpenGL的工作原理。OpenGL是一个基于向量图的API,它不直接...
在实现这些功能时,开发者需要理解数组或矩阵的数据结构来表示棋盘,并使用条件语句和循环来检查每一步棋的合法性。例如,通过遍历棋盘上的每一个位置,检查新落子是否形成连续的五个同色棋子,来判断是否构成五连珠...
2. **GLEW (OpenGL Extension Wrangler Library)**:GLEW是OpenGL扩展的管理库,它允许开发者访问最新的OpenGL功能和扩展。由于OpenGL的版本更新通常伴随着新特性的添加,GLEW使得开发者可以轻松地利用这些特性,而...
OpenGL入门C++教程 在计算机科学领域,OpenGL是一种开放源代码的图形库,它提供了一组用于绘制2D和3D图形的API。...无论你是游戏开发者、科研人员还是艺术创作者,掌握OpenGL都能帮助你在图形领域实现创新和突破。
OpenGL不仅包括了绘制基本几何形状的命令,还有用于美化图形、选择色彩、实现三维空间变换和动画制作等高级功能。在学习OpenGL的过程中,开发者将逐步接触到如何使用光照和材质来增强立体感,如何使用显示列表优化...
学习如何渲染复杂的场景是进一步掌握OpenGL的重要一步。这可能涉及到大量几何体的渲染、动态光照效果等。 **5.2 实时渲染技巧** 实时渲染技巧对于游戏开发尤为重要。例如,使用延迟渲染技术可以提高大型场景的渲染...
这些注释会指导你了解每一步的目的,帮助理解源码背后的逻辑。 此外,程序可能还包含了错误处理和用户输入处理机制,确保程序在遇到问题时能够正常退出,或者根据用户的键盘输入调整视图或模型状态。例如,用户可能...
OpenGL是用于创建2D和3D图形的强大框架,它被广泛应用于游戏开发、科学可视化以及各种图形密集型应用。...在C#中实现OpenGL教程,不仅能够提升你的图形编程技能,还能让你在.NET环境中充分利用OpenGL的潜力。
OpenGL提供了纹理坐标、纹理单元和过滤模式等功能来实现这一效果。 7. **深度测试与混合**:深度测试确保了正确处理多个对象的前后关系,而混合则用于透明效果。 8. **视口和变换**:视口定义了屏幕上的渲染区域,...
固定管线提供了一套预定义的功能集合,而可编程管线则允许开发者通过编写着色器程序来实现更为复杂的图形效果。其中,可编程管线的核心是顶点着色器(Vertex Shader)和片段着色器(Fragment Shader)。 #### ...
这些文件构成了OpenGL的主要库,是实现OpenGL功能的基础。 #### 三、创建MFC工程 1. **打开Visual Studio 2008**,选择“新建”->“项目”,然后在模板列表中选择MFC AppWizard(exe),命名为`mygl`。 2. 在向导中...
2. **固定功能管道(Fixed Function Pipeline)**:早期版本的OpenGL使用预定义的处理流程,包括顶点处理、几何变换、光照计算和像素操作。虽然在现代OpenGL中已被着色器模型取代,但理解其工作原理有助于理解API的...
10. **深度测试(Depth Testing)**:为了正确处理重叠的3D对象,OpenGL提供深度测试功能,确保离观察者更近的对象覆盖更远的对象。 通过这些基本的变换操作,开发者可以在OpenGL3.3环境中构建出复杂的3D场景。...
从基础知识到高级技巧,从简单图形到复杂场景,每一步都旨在帮助读者掌握OpenGL的核心技术和最佳实践。无论是初学者还是有一定经验的开发者,都能从中受益匪浅。通过学习本书的内容,你将能够构建出具有高度互动性和...