• 简单模仿OpenGL中的栈的作用


    OpenGL中的栈的作用的作用是保存当前矩阵

     pushMatrix() 作用

    声明一下 图形学中的三维坐标变化:

    OpenGL当中的坐标变化过程中保存当前矩阵(包括投影矩阵、变换矩阵,等等)下面代码简单模仿了矩阵的保存与恢复。

    代码:(应用了STL中的栈数据结构,自己实现请跟帖)

     1 #include "stdafx.h"
     2 #include <iostream>
     3 #include <stack>
     4 #include "Windows.h"
     5 using namespace std;
     6 /************************************************************************/
     7 /* 对于opengl中栈操作的模拟,简单模拟了 其中的世界坐标系的操作。
     8 其中:压栈出栈 为了保存当前的矩阵变换
     9 本例子用  initFunc() 模仿初始化 transformFunc() 表示坐标变换 */
    10 /************************************************************************/
    11 
    12 struct Vector3f{
    13 
    14     float x,y,z;//表示坐标 x,y,z
    15 };
    16 
    17 Vector3f currentVector;//全局的坐标表示 用来表示世界坐标(全局)
    18 stack<Vector3f> saveVectorStatic;
    19 //初始化函数
    20 void showVector();
    21 void initFunc()
    22 {
    23     currentVector.x=0;
    24     currentVector.y=0;
    25     currentVector.z=0;
    26 }
    27 //变换函数
    28 void transformFunc(float x,float y,float z)
    29 {
    30     currentVector.x=currentVector.x+x;
    31     currentVector.y=currentVector.y+y;
    32     currentVector.z=currentVector.z+z;
    33 }
    34 
    35 int _tmain(int argc, _TCHAR* argv[])
    36 {
    37     initFunc();
    38     cout<<"我想看看目前的坐标位置:"<<endl;
    39     showVector();
    40 
    41     cout<<"我要向上平移6个单位,保存当前矩阵!!"<<endl;
    42     cout<<"执行:“saveVectorStatic.push(currentVector); 来保存!”"<<endl;
    43     cout<<"执行:“transformFunc(0.0f,6.0f,0.0f);” 来移动!"<<endl;
    44     saveVectorStatic.push(currentVector);
    45     transformFunc(0.0f,6.0f,0.0f);
    46 
    47     cout<<"我想看看目前的坐标位置:"<<endl;
    48     showVector();
    49 
    50     cout<<"我想按照原点的位置向左移动3各单位!!"<<endl;
    51     currentVector=saveVectorStatic.top();
    52     transformFunc(3.0f,0.0f,0.0f);
    53 
    54     cout<<"执行:“currentVector=saveVectorStatic.top(); ”来恢复!"<<endl;
    55     cout<<"执行:“transformFunc(3.0f,0.0f,0.0f); ”来移动!"<<endl;
    56 
    57 
    58 
    59     cout<<"我想看看目前的坐标位置:"<<endl;
    60     showVector();
    61     return 0;
    62 }
    63 void showVector()
    64 {
    65     cout<<"当前栈内元素数目: "<<saveVectorStatic.size()<<endl;
    66     cout<<"坐标:"<<"   X"<<"   Y"<<"   Z"<<endl;
    67     cout<<"       "<<currentVector.x<<"    "<<currentVector.y<<"   "<<currentVector.z<<endl;
    68 }

    原文连接:(我们博创论坛):http://bochuang.sinaapp.com/forum.php?mod=viewthread&tid=55

     


    作者:leisure
    原文出自:http://www.cnblogs.com/leisure/
    感谢园子,感谢各位支持。本文版权归伟征和博客园共有,欢迎转载@ 但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    只是想分享,欢迎拍砖!促进我成长

  • 相关阅读:
    基于TensorRT的YOLO(V3\4\5)模型部署《方案二》
    realsenseD435采集图片
    LibTorch实战六:U2Net实战部署<三>
    LibTorch实战六:C++版本YOLOV5.4的部署<二>
    Win10环境下YOLO5 快速配置与测试
    《一、YOLOV1细节原理全解析》
    LibTorch实战六:U2Net实战训练<二>
    基于TensorRT的YOLO(V3\4\5)模型部署《方案一》
    《YOLOV4&5原理与源代码解析之六:注意力机制SAM》
    LibTorch实战五:模型序列化
  • 原文地址:https://www.cnblogs.com/leisure/p/2510875.html
Copyright © 2020-2023  润新知