• OpenGL学习笔记(5)3D基本概念



    这次介绍的都是一些比较枯燥的概念.在现实生活中都非常真实,为了避免枯燥,我们还是讲点大家都经历过的事情

    视图变换


    拍照:

    1. 第一步先选景(模型)
    2. 选好景之后你就需要挑一个好的位置(视图)来拍
    3. 挑好位置以后拿起你的照相机对准景物

    接下来针对不同的景,你会做出不同的动作

    比如拍杭州西湖:那么你会横放你的照相机进行全景拍摄

    但是换做拍雷峰塔的,你想拍全景的就必须把照相机竖起来
    比如你的头可以左右移动,也可以上下移动

    以上讲的就是视图变换,即模型(参照物)位置不变,但视图在发生变化.

    模型变换

    假设现在不拍景色,而是拍人,即参照物可以移动变化.但视图没有变化

    即这时照相机的位置,拍摄的角度都已经固定了.
    但可能会让模型(人)发生一些变化
    比如位置的移动(包括左右,上下,前后)
    缩放(人是无法缩放的微笑,所以其可能做的动作是蹲下,站在一个假山上使得自己更高(也不会飞))

    旋转(大部分人只会左右旋转,艺术家则会翻跟斗),所以这时候你应该拿一块大的橡皮泥来做参照物微笑

    下面还是来看代码吧

    #include <GL/glut.h>
    #include <stdlib.h>
    
    void init(void) 
    {
       glClearColor (0.0, 0.0, 0.0, 0.0);
       glShadeModel (GL_FLAT);
    }
    
    void display(void)
    {
       glClear (GL_COLOR_BUFFER_BIT);
       glColor3f (1.0, 1.0, 1.0);
       glLoadIdentity ();             /* clear the matrix */
       /* viewing transformation  */
       gluLookAt (1.0, 1.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
    
       glutWireCube (1.0);
       glFlush ();
    }
    void reshape (int w, int h)
    {
       glViewport (0, 0, (GLsizei) w, (GLsizei) h); 
       glMatrixMode (GL_PROJECTION);
       glLoadIdentity ();
       glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);
       glMatrixMode (GL_MODELVIEW);
       
    }
    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);
       glutMainLoop();
       return 0;
    }

    以下是效果
    image

    矩阵相乘

    当设置对象矩阵时,会把当前矩阵(可能是OpenGL内部一个全局的变量)与当前的矩阵相乘,为了清除这个变量,需要先调用glLoadIdentity 方法,当然在组合变换的时候则不需要此方法.但当参照物发生变化时,则需要调用此方法

    选择矩阵模式

    glMatrixMode方法用于修改的是选择模型视图矩阵还是投影矩阵

    设置视图变换

    gluLookAt 方法方便的设置了视图需要的一些参数
    image

    这里的模型则是使用glutWireCube 画了一个立方体

    请下载http://www.xmission.com/~nate/tutors.html此处的示例教程,改变参数来理解视图变换和模型变换

    image

  • 相关阅读:
    [Python3网络爬虫开发实战] 1.2.6-aiohttp的安装
    [Python3网络爬虫开发实战] 1.3.1-lxml的安装
    [Python3网络爬虫开发实战] 1.2.5-PhantomJS的安装
    [Python3网络爬虫开发实战] 1.2.3-ChromeDriver的安装
    [Python3网络爬虫开发实战] 1.2.4-GeckoDriver的安装
    [Python3网络爬虫开发实战] 1.2.2-Selenium的安装
    [Python3网络爬虫开发实战] 1.2.1-Requests的安装
    tensorflow 根据节点名称获取节点
    tensorflow 根据节点获取节点前的整张图
    tf.estimator.Estimator
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/1853617.html
Copyright © 2020-2023  润新知