OpenGL小结12箴言(1)

    技术2022-05-11  47

    这个暑假一晃就过去了,当了一个月的保安,得的工资买了个诺基亚5630的手机,也算没白忙活。不过学习上到是耽搁了许多((*^__^*) 嘻嘻……),确实,到大二以后就改邪归正,一心只读圣贤书了呀,所谓孜孜不倦,说的不就是是我吗,哈哈,哎~时间过得NND个快啊。

    好了,虽然没看多少书,这里还是有点学习小结需要传上来,(为了防止可恶的垃圾电脑崩溃格盘啊~想来伤心)

     

    这是空闲时写的一些句子,寄存于此!

     

    1glMatrixMode() 的参数是GL_MODELVIEWGL_PROJECTS,在绘制图形前必须保证其状态为前者,在修改投影时需保证其为后者。时刻注意这点,否则会发生一些莫名奇妙的事情!

    2:如果不是特殊情况,请使用glPerspective(),即对称透视投影。裁剪投影实在是用得不多。

    3:请注意使用多态,它能使不可能变成可能。

    4:请注意使用显示列表和顶点数组,这将极大的提高运行速度,提高效率。

    5:请使用gluLookAt()函数,它将有利于你观察全局情况,从而作出正确的判断。

    6:请注意以下情况,前者与后者有着天壤之别

    /

          glTranslatef(0,0,-5.0f);

          glRotatef(x+=10.0f,1.0f,0.0f,0.0f);

          object.Render();

    /

          glRotatef(x+=10.0f,1.0f,0.0f,0.0f);

          glTranslatef(0,0,-5.0f);

          object.Render();

    7: 在glut下面请记得使用线程来处理一些不能通过Windows消息处理的事情。

    8:请记住:glPushMatrix()函数压入即将绘制的内容,因此该绘制内容内对当前矩阵的操作在出栈后将不会影响先前矩阵。请看下面这个复合体:

    static float ptFace[12]={-4.14f,3.0f,0.0f,   -4.14f,-3.0f,0.0f, 4.14f,-3.0f,0.0f, 4.14f,3.0f,0.0f};

          glPushMatrix();

          for (int i(0);i<8;++i)

          {

               glPushMatrix();

               glRotatef(45*i,0,1,0);

               glTranslatef(0.0f,0.0f,-10.0f);

               glColor3f(i*0.15+0.1,0.3,0.3);

               face[i].Render(mode,ptFace);

               glPopMatrix();

          }

          glPopMatrix();

    该代码绘制了一个8面围成的复合图形,巧妙使用了rotatetranslate的顺序,画起来就相当简单了。

    9glPushName()会使栈元素增加,栈的大小取决与selectbuffer的大小,请不必担心该栈不够用的情况。

    10:请尽量使用数组(向量),使用*fv(pt),注意,这种函数具体作用是从pt地址开始取3个数进去。这种做法具有简便、快捷等优点。

    11:如果可以,请尽量使用指针作为类成员,它能使之更小、而且在异常处理上也更加方便、安全,再者它便于传递,特别是传递数组时。

    12:关于类A向类B传递数组问题解决:

    class Dest

    {

    protected:

          int* pSourArray;

    public:

          Dest(int *p):pSourArray(p){}

    };

    class Source

    {

    protected:

          Dest dest;

          int array[10];

    public:

          Source():dest(array){};

    /12箴言,至此。

     


    最新回复(0)