场景视图变化类似照相机拍照:
1.把照相机固定到三脚架上,并让它对准场景(视图变换)
使用gluLookAt 设置视图变换
2.对场景进行安排,是各个物体在照片中的位置是我们所希望的(模型变换)
使用模型变换的目的是设置模型的位置和方向,如,缩放,旋转灯
3.选择照相机镜头,并调整放大的倍数(投影变换)
正投影与透视投影
4.确定最终照片的大小(视口变换)
glViewport
透视投影
透视投影最显著的特征就是透视缩短,即越近的物体越大,越远的物体越小
glFrustum(left,right,bottom,top,near,far)
对于此函数,可将近观察者平面中心近似原点。Left 为原点左半部分,用负数表示。right为原点右半部分,用正数表示 其他也是一样。
还有另外一个函数和上面功能基本一致,也是指定透视投影的
glPersPective(foxy,aspect,near,far)
foxy:角度(可计算)
aspect:宽高比
near:近景距离
far:远景距离
正投影
通俗的说物体和观察者的举例不影响物体看上去的大小,及物体以原大小进行投影,不会随着观察者距离变化而变大或缩小
glOrtho()函数创建一个正交平行的视景体
视景体由6个平面构成:上下左右远近,最基本的视景体剪裁可针对这6个平面进行剪裁
视景体剪裁
做法:
1.启用视景体剪裁
glEnable(GL_CLIP_PLANE0)
2.设置剪裁面
Gldouble eqn[4]={0,1,0,0};
3.剪裁
glClipPlane (GL_CLIP_PLANE0, eqn)
glMatrixMode | GL_MODELVIEW GL_PROJECTION GL_TEXTURE |
指定需要修改的矩阵 |
glLoadIdentity | 重置矩阵 | |
glTranslatef(x,y,z) | 移动矩阵 | |
glRotate | 旋转矩阵 | |
glScale | 缩放矩阵 | |
glPushMatrix | 压入矩阵堆栈 | |
glPopMatrix | 弹出矩阵 | |
glShadeModel | GL_SMOOTH //平滑 GL_FLAT //单调 |
着色模式 单调模式处理下整个图元的颜色就是它任意一个顶点的颜色,平滑模式下,每个顶点的颜色都是单独处理的 |
视景体剪裁代码:
#include "header.h" void init(void) { glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel (GL_FLAT); } void display(void) { GLdouble eqn[4] = {0.0, 1.0, 0.0, 0.0}; GLdouble eqn2[4] = {1.0, 0.0, 0.0, 0.0}; glClear(GL_COLOR_BUFFER_BIT); glColor3f (1.0, 0.0, 1.0); glPushMatrix(); glTranslatef (0.0, 0.0, -5.0); glClipPlane (GL_CLIP_PLANE0, eqn); glEnable (GL_CLIP_PLANE0); //glClipPlane (GL_CLIP_PLANE1, eqn2); //glEnable (GL_CLIP_PLANE1); glRotatef (90.0, 1.0, 0.0, 0.0); glutWireSphere(1.0, 20, 16); glPopMatrix(); glFlush (); } void reshape (int w, int h) { glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0); glMatrixMode (GL_MODELVIEW); } void keyboard(unsigned char key, int x, int y) { switch (key) { case 27: exit(0); break; } } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutInitWindowSize (500, 500); glutInitWindowPosition (100, 100); glutCreateWindow (argv[0]); init (); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutMainLoop(); return 0; }
相关推荐
OpenGL是计算机图形学中的一种强大的...综上所述,这个压缩包提供了一个学习和实践OpenGL图形绘制,特别是复杂曲线和视图处理的资源集合。通过对这些知识点的深入理解和实践,开发者可以提升在3D图形编程领域的技能。
这份文档不仅是程序员和实施者理解OpenGL工作原理的关键资料,也是学习OpenGL图形编程的基础。 ### 引言与格式 文档首先阐述了如何格式化可选特性,这有助于开发者根据需求选择性地应用OpenGL的功能,同时保持代码...
OpenGL是用于创建2D和3D图形的强大编程接口,它由Khronos Group维护并广泛应用于游戏开发、科学...这个项目不仅涉及到OpenGL的基础使用,也涉及到窗口管理和用户交互的设计,是学习OpenGL和3D图形编程的一个好实践。
在IT领域,MFC(Microsoft Foundation Classes)是一个C++库,由微软开发,用于构建Windows应用程序。...这个项目对于学习和理解MFC与OpenGL的结合使用,以及如何在实际应用中实现视图分割,提供了宝贵的参考。
- **OpenGL坐标系统**:理解OpenGL的默认坐标系,以及如何使用投影和模型视图矩阵进行变换。 - **OpenGL状态机**:学习如何设置颜色、深度测试、混合模式等状态。 - **Windows API**:掌握如何使用Windows API创建和...
通过这个示例,开发者可以学习到如何在VC++中构建一个OpenGL应用程序,如何创建多个视图,以及如何使用自定义的类来封装OpenGL功能。这将涉及到窗口管理、上下文创建、绘图函数的编写、多线程处理(如果每个视图在...
OpenGL源代码: oglwrapperclass_demo 是一个用于学习和实践OpenGL编程的示例项目。这个项目包含了一系列的源文件,主要用于创建一个图形用户界面,并利用OpenGL进行图形渲染。在这个示例中,开发者可能创建了一个名...
此外,你还需要理解OpenGL的状态机模型,以及如何使用模型视图矩阵和投影矩阵来控制场景的显示。纹理映射的坐标系统也是理解的重点,包括纹理坐标系与屏幕坐标系之间的转换。 这个实例是一个很好的起点,帮助初学者...
现代OpenGL与Qt结合使用,为开发者提供了一个强大的平台来创建高性能的图形应用程序。...通过不断学习和实践,可以进一步探索OpenGL的高级特性,如纹理映射、反射、折射、阴影等,以实现更逼真的视觉效果。
通过这个项目,学习者可以深入理解OpenGL的基础知识,如顶点数组、缓冲区对象、矩阵操作、视口变换以及基本的图形渲染流程。同时,对于3D建模和三视图的理解也是机械设计、工程制图等领域的重要技能。对于初学者来说...
这个练习不仅有助于理解OpenGL的视图和投影机制,还锻炼了处理多视口渲染的能力,对于学习图形编程非常有帮助。同时,结合鼠标输入的交互控制,进一步增强了用户体验,使得3D场景的探索更加直观和生动。
总的来说,"旋转的箱子"实例是学习OpenGL基础的绝佳起点,涵盖了基本的几何体绘制、动画处理、矩阵操作等核心概念。通过深入理解并实践这个实例,开发者可以逐步掌握OpenGL的更多高级特性,如光照、纹理、着色器等,...
初学者在学习如何在OpenGL视图中绘制三维物体时,需要掌握以下几个核心概念和技术: 1. **OpenGL环境设置**:首先,你需要安装支持OpenGL的图形库,如GLUT、SDL或FreeGLUT,这些库提供了窗口管理和事件处理的基本...
这就是所谓的OpenGL多视图实现。在C++环境下,我们可以使用窗口管理器和OpenGL上下文来创建这样的多视图系统。 首先,理解基本概念是关键。在OpenGL中,一个视图通常对应一个绘图上下文(OpenGL context),它包含...
- **简介**:Lighthouse 3D提供了涵盖OpenGL多个方面的教程,包括视图剪切、GLSL数学、模型动画等内容。 - **特色**:该站点特别强调理论与实践相结合,很多教程都配有详细的代码示例和解释。 - **适用人群**:...
这个“OPENGL学习 3D小雪人”资源是为初学者设计的,旨在帮助他们理解并掌握OpenGL的基础知识,通过创建一个3D小雪人的实例来实践。 3D小雪人的实现涉及多个OpenGL的关键概念和技术: 1. **窗口系统绑定**:在...
OpenGL多视图的实现是图形学领域中的一个重要概念,它涉及到如何在同一个窗口或屏幕上同时显示多个不同的视角或场景。这种技术广泛应用于游戏开发、虚拟现实应用以及复杂的可视化系统中。下面将详细介绍OpenGL多视图...
#### 一、OpenGL简介 OpenGL(Open Graphics Library)是一种用于渲染2D、3D矢量图形的跨平台应用程序编程接口(API)。它最初由Silicon Graphics Inc.设计,并在OpenGL架构评审委员会(OpenGL ARB)的维护下发展...
### OpenGL学习内容以及参考书籍和网站-2008 #### 一、OpenGL背景与历史 OpenGL(Open Graphics Library)是一种跨平台的应用程序接口(API),用于渲染2D和3D矢量图形。它最初由Silicon Graphics Inc. (SGI) 开发...
OpenGL是一个强大的图形库,用于在各种操作系统和硬件平台上创建2D和3D图形。这个"openGL.zip"压缩包中的内容似乎是关于使用OpenGL编程来构建一个包含圆锥、...学习和理解这些基本概念对于深入掌握OpenGL编程至关重要。