`
tiankefeng0520
  • 浏览: 143167 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

OpenGL学习九:视图简介

 
阅读更多

 场景视图变化类似照相机拍照:
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;
}

 

  • 大小: 11.9 KB
分享到:
评论

相关推荐

    在OpenGL视图中绘制三维物体

    在OpenGL视图中绘制三维物体,典型例子.有利于初学者学习。

    在OPENGL视图中绘制三维物体

    在OPENGL视图中绘制三维物体,对学习OPENGL具有很好的参考价值

    VC OpenGL封装学习例子

    这是一个我学会Opengl时的例子,主要是对Opengl的渲染场景设置,视图操作,渲染数据库等的封装,很好地把相关的职能分开,以便后续使用扩展。 这一源码主要体显示的三维软件的开发雏形,有兴趣的可以看一下。 由于...

    OPENGL OSG相机操作实例

    展示了OPENGL OSG相机,视图等各种操作,是学习相机,视图,漫游器等不可多得的资料。

    IOS应用源码Demo-采用了openGL的视图3D切换效果-毕设学习.zip

    前两年IOS应用源码-主要是用于毕业设计学习的。

    OpenGL 射击游戏 exe

    学习OpenGL的基础综合性完整VC++工程,包含了基础的视图变换,纹理贴图,雾和混合等内容。利用选择制作的简单的OpenGL射击游戏,希望对你的学习有所帮助。

    OpenGl实验报告.doc

    实验目的与要求 1、学习和掌握OpenGL的使用 2、掌握矩阵堆栈的实现方法 3、根据自己的创意实现实验内容,进一步掌握和理解OpenGL的使用 2. 实验内容 1、请编写地球围绕太阳自动旋转的方式 2、请再加上一个月亮, 并...

    OpenGL 射击游戏

    学习OpenGL的基础综合性完整VC++工程,包含了基础的视图变换,纹理贴图,雾和混合等内容。 利用选择制作的简单的OpenGL射击游戏,希望对你的学习有所帮助。

    UG NX 与 Opengl联合编程

    xusir98开发的程序,很值得学习。 程序主要过程: 找出NX视图的显示窗口 HOOK NX视图的鼠标操作 在HOOK的回调函数中利用OPENGL的换算得出点在视窗的位置 移动窗口

    《OpenGL ES 2.0 开发向导》源码

    本教程向您展示了如何创建一个简单的Android应用程序,该应用程序使用OpenGL ES 2.0 API来执行一些基本的图形操作。你将学习如何: - 使用GLSurfaceView和GLSurfaceView. renderer创建一个活动 - 创建并绘制图形对象 ...

    OpenGLDemo:OpenGL学习演示

    OpenGL learn demo 01-环境配置 02-移动 03-图元 04-花托(剔除、深度测试、多边形模式) 05-裁剪 06-颜色混合 07-抗锯齿 08-移动(矩阵变换) 09-更多对象(球体、花托、圆柱圆锥、圆盘) 10-正投影矩阵 11-透视投影...

    OpenGL入门学习.pdf

    5.1、模型变换和视图变换...............................................................................................................25 5.2、投影变换.....................................................

    OpenGL开发学习

    在 Android 中我们使用 GLSurfaceView 来显示 OpenGL 视图,该类位于 android.opengl 包里面。它提供了一个专门用于渲染3D 的接口 Renderer。 例如双页翻页功能等。

    二维/三维图形的几何变换(基于OpenGL)

    支持二维和三维图形的几何变换代码,变换包括平移、旋转、对称、投影、错切等

    OpenGL编程指南(第四版

    该章还提供了一个简单的OpenGL程序,并介绍需要了解的一些基本编程细节,有助于学习后续章节的内容。  ·第2章解释如何创建一个物体的三维几何图形描述,并最终把它绘制到屏幕上。  ·第3章描述三维模型在绘制到...

    基于MFC OpenGL读取obj文件并以双视图显示

    此代码可以实现在VS2013上读取并绘制OBJ点云文件,并且以双试图显示,注释清晰明了,便于初学者的学习,可以完整运行!

    MFC_OpenGL.rar

    基于MFC开发的OpenGL示例程序,有多个不同opengl视图,适合初学者学习。 在visual studio 2010中亲测可以编译通过,并能正常运行。

    基于OpenGL的计算机图形学实验七定义一个简单形体(OpenGL提供的基础形体,立方体、球体等),并生成正交投影及透视投影视图

    通过本次实验,将老师在课堂上讲解的正交投影和透视投影进行具体代码的实现,如怎么利用OpenGL的函数绘制三维立方体,如何利用鼠标拖动调整观察姿态和位置,通过深入学习进而得以实现立方体的正交投影和透视投影。

    rust-cubes-demo:Rust中的OpenGL和SDL技术演示

    这是我编写的一个简单的技术演示,因此我可以学习Rust。 它利用OpenGL 3和SDL2。 控制项 使用鼠标悬停并爆炸子立方体。 左键单击:爆炸(细分)悬停的子多维数据集 右键单击:将所有子多维数据集重新排列到其原始...

    计算机图形学实验报告

    3、学习鼠标、键盘交互技术。 4、实现二点定矩形的橡皮筋技术。 ) 2、 实验二:定义四面体和填充图案 (1、通过段,定义四面体。 2、定义填充图案。 3、了解OPENGL反走样技术。 4、通过菜单,填充的、线框的...

Global site tag (gtag.js) - Google Analytics