场景视图变化类似照相机拍照:
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视图中绘制三维物体,对学习OPENGL具有很好的参考价值
这是一个我学会Opengl时的例子,主要是对Opengl的渲染场景设置,视图操作,渲染数据库等的封装,很好地把相关的职能分开,以便后续使用扩展。 这一源码主要体显示的三维软件的开发雏形,有兴趣的可以看一下。 由于...
展示了OPENGL OSG相机,视图等各种操作,是学习相机,视图,漫游器等不可多得的资料。
前两年IOS应用源码-主要是用于毕业设计学习的。
学习OpenGL的基础综合性完整VC++工程,包含了基础的视图变换,纹理贴图,雾和混合等内容。利用选择制作的简单的OpenGL射击游戏,希望对你的学习有所帮助。
实验目的与要求 1、学习和掌握OpenGL的使用 2、掌握矩阵堆栈的实现方法 3、根据自己的创意实现实验内容,进一步掌握和理解OpenGL的使用 2. 实验内容 1、请编写地球围绕太阳自动旋转的方式 2、请再加上一个月亮, 并...
学习OpenGL的基础综合性完整VC++工程,包含了基础的视图变换,纹理贴图,雾和混合等内容。 利用选择制作的简单的OpenGL射击游戏,希望对你的学习有所帮助。
xusir98开发的程序,很值得学习。 程序主要过程: 找出NX视图的显示窗口 HOOK NX视图的鼠标操作 在HOOK的回调函数中利用OPENGL的换算得出点在视窗的位置 移动窗口
本教程向您展示了如何创建一个简单的Android应用程序,该应用程序使用OpenGL ES 2.0 API来执行一些基本的图形操作。你将学习如何: - 使用GLSurfaceView和GLSurfaceView. renderer创建一个活动 - 创建并绘制图形对象 ...
OpenGL learn demo 01-环境配置 02-移动 03-图元 04-花托(剔除、深度测试、多边形模式) 05-裁剪 06-颜色混合 07-抗锯齿 08-移动(矩阵变换) 09-更多对象(球体、花托、圆柱圆锥、圆盘) 10-正投影矩阵 11-透视投影...
5.1、模型变换和视图变换...............................................................................................................25 5.2、投影变换.....................................................
在 Android 中我们使用 GLSurfaceView 来显示 OpenGL 视图,该类位于 android.opengl 包里面。它提供了一个专门用于渲染3D 的接口 Renderer。 例如双页翻页功能等。
支持二维和三维图形的几何变换代码,变换包括平移、旋转、对称、投影、错切等
该章还提供了一个简单的OpenGL程序,并介绍需要了解的一些基本编程细节,有助于学习后续章节的内容。 ·第2章解释如何创建一个物体的三维几何图形描述,并最终把它绘制到屏幕上。 ·第3章描述三维模型在绘制到...
此代码可以实现在VS2013上读取并绘制OBJ点云文件,并且以双试图显示,注释清晰明了,便于初学者的学习,可以完整运行!
基于MFC开发的OpenGL示例程序,有多个不同opengl视图,适合初学者学习。 在visual studio 2010中亲测可以编译通过,并能正常运行。
通过本次实验,将老师在课堂上讲解的正交投影和透视投影进行具体代码的实现,如怎么利用OpenGL的函数绘制三维立方体,如何利用鼠标拖动调整观察姿态和位置,通过深入学习进而得以实现立方体的正交投影和透视投影。
这是我编写的一个简单的技术演示,因此我可以学习Rust。 它利用OpenGL 3和SDL2。 控制项 使用鼠标悬停并爆炸子立方体。 左键单击:爆炸(细分)悬停的子多维数据集 右键单击:将所有子多维数据集重新排列到其原始...
3、学习鼠标、键盘交互技术。 4、实现二点定矩形的橡皮筋技术。 ) 2、 实验二:定义四面体和填充图案 (1、通过段,定义四面体。 2、定义填充图案。 3、了解OPENGL反走样技术。 4、通过菜单,填充的、线框的...