商务合作:179001057@qq.com

OpenGL小结12箴言(1)

技术2022-05-11  0


某平台价值19860元的编程课程资料免费领取【点我领取】


这个暑假一晃就过去了,当了一个月的保安,得的工资买了个诺基亚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)