简单模仿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/
感谢园子,感谢各位支持。本文版权归伟征和博客园共有,欢迎转载@ 但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
只是想分享,欢迎拍砖!促进我成长

原文地址:https://www.cnblogs.com/leisure/p/2510875.html