??xml version="1.0" encoding="utf-8" standalone="yes"?>
Q?Q相同的范围Q在同一个类中)Q?
Q?Q函数名字相同;
Q?Q参C同;
Q?Qvirtual 关键字可有可无?
Q?Q不同的范围Q分别位于派生类与基c)Q?
Q?Q函数名字相同;
Q?Q参数相同;
Q?Q基cd数必Lvirtual 关键字?/p>
Q?Q如果派生类的函C基类的函数同名,但是参数不同。此Ӟ不论有无virtual关键字,基类的函数将被隐藏(注意别与重蝲hQ?
Q?Q如果派生类的函C基类的函数同名,q且参数也相同,但是基类函数没有virtual 关键字。此Ӟ基类的函数被隐藏Q注意别与覆盖淆)
C,C++中的四种ơ语a..
1.C. c基础..
2.Object-Oriented C++ ,c++的主?class ,cd?l承,多态等.
3.Template C++ ..c++里头的泛型编E?.模板~程.
4.STL. 标准模板?.如vector,queue,map{?
q个条款所叙述?.应当在次语言变换时?高效~程守则也需要做出相应的改变{略..例子:
对内|对象类型而言..使用 g?要比 引用传递?来的高效
对于自定义类而言, 常引用传递往往更好..(const class& )
STL 中而言.其是在C指针之上塑?因此.g?也再ơ适用..
谨记: 对于C++高效~程原则应当视情况而定..取决使用C++中的那一部分
误?
1.对于单纯帔R,最好以const对象或enums 替换?#define..
? const double PI = 3.141592653
class Test{
static const double PI; //声明?br /> };const double Test::PI = 3.141592653; //定义?在实现文?
2. 对于形似函数的宏..最好改?inline 函数的Ş?替换.
>
谨记:
1.某些东西声明ؓconst 可帮助编译器侦测错误用法. const 可被施加于Q何作用域的对?函数参数.函数q回cd.成员函数本体.
? 在C++里常用的 const 引用传?如?const 指针一?不以前函C改其?q就很好的保护了.参数的g能被修改.
? 定义成const 成员函数,在该成员函数?是不允许修改成员变量?因此q样一个接口往往可以启动保护数据的作?
const 引用传值时?只能调用.const 成员函数...
const q回?往往会作为接口时?使得q回g允许被外部修?因此也是非常有用.
STL 当中的iterator.. const vector<int>::Iterator 表示 int * const 指针帔R.
vector<int>::const_Iterator ?const int * 帔R指针..
2. ~译器强制实?bitwise constness. 但用时?应注意是概念上的帔R.
mutable 释放掉q种U束..?q么定义. mutable int size;
其定义的变量允许在const 成员函数中予以修?.
3.当const ?non-const 成员函数 h{h实现时?,令non-const 函数 调用const 函数 可避免重?
Z么不const 调用 non-const ..原因在于.const 需要保证不允许修改成员变量. 而调用non-const 成员函数.则存在可能已l修改了成员变量.因此q是一U不正确..
例子可入下所C?
[const_cast<T&>]( static_cast<const T&>(*this) .function()); const_cast 视情况而定..如需要返回值去掉const属性则需要了. static_cast<> 则进行一ơ强制{换成const 引用..
其实今天在ȝq个的时候,q不是在用opengl而是在用osg设计一个项目h物汽车R{O游类《可能应用在手机Q汽车导航上》的时候,惌vȝq的。我其实是想M图来写这份ȝ可能会更Ҏ理解?然而实在懒...
在图形学的显C流E:
三维囑Ş->模型视图变换->投媄变换->三维裁剪->视口->屏幕囑Ş昄
三维->二维的变换,ȝ来理解只是三l的物体在一pd的变换之后决定了屏幕上某些像素位|的颜色倹{最后这些颜色组成了一q图甅R就是我们所看到得最l屏q二l图形了?/p>
在大概了解这U流E之后,模型视图变换 无疑成为决定我们所看到的囑փ的轮廓?/p>
模型视图变换 应该来讲是包含两个变换的:模型变换,视图变换。ؓ什么将他们合在一起呢Q?在照相机成像pȝ?若固定相Z动移动模型会 {h?/span> 固定模型不动Ud相机?/p>
考究如下内容Q?/p>
glMatrixMode(GL_MODELVIEW); glLoadIdentity(); //当前矩阵讄为单位矩?/p>
glRotatef(45.0f,0.0,0.0,1.0); //按[0.0,0.0,1.0]u旋{45?/p>
glTranslatef(2.0,2.0,2.0); // q移?[2.0,2.0,2.0] glBegin(...); // L些东?br> ... 有两U方式理解:一U是局部坐标系的理解,一U是全局坐标pȝ理解?/p>
如果按照上面那些内容从上C的理解的方式是局部坐标系的理?/span>。opengl变换上的实现其实是个矩阵的乘法。按照局部坐标系的理?上面代码的变换是按照q样的顺序执行的: 先将局部坐标系lz轴旋?5度,在将局部坐标系的原点^U至[2.0,2.0,2.0]Q然后在局部坐标系内画物体?/p>
假设 旋{步骤的矩阵ؓRQ^U部分的矩阵为T 当前矩阵为C?/p>
new_C=old_C*R*T q是一个矩阵右乘操?/p>
理论上来?q就是一个坐标系的变换过E,R*T q个矩阵其实是原先的坐标pd换到现在的坐标系Q这个时候原先坐标系的点p变换成p1,p1=(R*T)*p?/p>
而按照全局坐标pȝ理解Q它的变换过E则是相反的Q这也是相当的好理解?在当前世界坐标系中画好该物体之后Q我必须它Ud到正的位置。那必须得先q移物体到[2.0,2.0,2.0],然后物体绕z轴旋?5度。这是一个相反的变换q程Q然而这个与前面的是{h?Z么? 考虑世界坐标pM点pQ经q^UL作后 p11=T*p; 在经q旋转操作后 p1=R*P11=R*(T*p) q是矩阵的一个左乘操?先变换的在后? 所以说new_C=(old_c*(R*(T))) 左乘 所以说q是一个等Lq程. 一般来,我们考虑的时候L世界坐标p考虑旋{q移{操作的.所以在写变换的时候最好的方式是?变换步骤一直左乘,而代码中则按左乘后结果矩늚序写代码?/p>
其次在理解以上的变换q程中模型变换的原理Q我们可以很好的理解gluLookAt(eye,center,up)的视囑֏换的q程Q现在只考虑模型不动Q照相机Ud的过E,且是在全局坐标pM的移动过E? opengl默认照相机框?是视点在原点 y轴ؓ向上方向 z轴负方向U方?/span> gluLookAt的目的在于得视点移动到eye位置 q看向center?/span> 则gluLookAt的过E先q移至eye,而center->eye(center指向eye)则ؓz方向设ؓz(Zx,Zy,Zz),Up方向为y轴方向,y,z的叉U则为x轴方?则只需它们都旋{Cp?/span> 所以这个时候模型变换矩阵就为《相对于模型来讲 相机Ud到eye{h于模型移动到-eye. |Xx Xy Xz 0| |1 0 0 -eyex| |Yx Yy Yz 0| * |0 1 0 -eyey| |Zx Zy Zz 0| |0 0 1 -eyez| |0 0 0 1| |0 0 0 1 |
...
...
glEnd();
]]>