OpenGL 点滴积累

上学期自学的OpenGL 相当于是废了,看完总是忘,理解太肤浅。看来是缺少练习和思考的原因。

因此,现在把遇到的一些OpenGL相关的知识记录一下,当做一次整理思路的过程。是时候得好好学习了啊!!

1. 视点问题:

    默认视点在世界坐标系的原点,故需设置视点或者向-z方法移动物体,否则将看不到。如下:

    //设置视点
    gluLookAt(0.0,0.0,5.0, 0.0,0.0,-1.0, 0.0f,1.0f,0.0f);
    //或 移动坐标轴
    glTranslatef(0,0,-5);

    gluLookAt ()函数:

2. 光照: glEnable(GL_LIGHT)

3. 光栅化:glShadeModel(); 参数:GL_SMOOTH(默认)、GL_FLAT

作用:指定光栅化阶段(Rasterization)顶点之间 像素的颜色是插值(GL_SMOOTH)获得渐变色还是就近(GL_FLAT)获得单一色。

举例:相同的顶点放置及颜色代码:

    glBegin(GL_QUAD_STRIP);
        glColor3f(1.0f,0.0,0.0f);//R
        glVertex2f(-1.0f,0.0f);
        glVertex2f(-1.0f,1.0f);
        glColor3f(0.0f,1.0f,0.0f);//G
        glVertex2f(0.0f,0.0f);
        glVertex2f(0.0f,1.0f);
        glColor3f(0.0f,0.0f,1.0f);//B
        glVertex2f(1.0f,0.0f);
        glVertex2f(1.0f,1.0f);
    glEnd();

    a.  若使用glShadeModel(GL_FLAT);则效果:

               

   b.  若使用glShadeModel(GL_SMOOTH);则效果:

                 

4. OpenGL 基本图元 一篇文章:http://blog.csdn.net/feijj2002_/article/details/466987

其中对于GL_QUADS_STRIP ,给的示例图有误,正确的应见:http://hi.baidu.com/%E1%B0%B7%E7%D0%F1/blog/item/5cb71fff3a655ec2f3d385fe.html

5. GL_CULL_FACE 消隐处理

详见:转OpenGL 的消影处理

6. 使用OpenGL 的 GL_ELEMENT_ARRAY_BUFFER , 索引数组的类型必须是 unsigned int \ unsigned short \ unsigned byte 三种之一,对应在glDrawElements

,如使用int等,则无法绘制。

void init()
{
    VBOBuffers.resize(2, 0); // 成员变量 vector<unsigned int> VBOBuffers;
    glGenBuffers(2, VBOBuffers.data()); // 一个顶点对象,一个索引对象
    glBindBuffer(GL_ARRAY_BUFFER, VBOBuffers[0]); // 顶点对象
    glBufferData(GL_ARRAY_BUFFER, nodes.size() * 3 * sizeof(float), nodes.data(), GL_STATIC_DRAW);
    glVertexPointer(3, GL_FLOAT, 0, (GLvoid*) NULL);
    glEnableClientState(GL_VERTEX_ARRAY);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, VBOBuffers[1]); // 索引对象
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, faceNumber * sizeof(unsigned int), elementBufferLineIndex.data(), GL_STATIC_DRAW); //注意:顶点索引数组的类型必须是unsinged的,否则无法显示
}
void paint()
{
     glEnableClientState(GL_VERTEX_ARRAY);
     glDrawElements(GL_LINES, faceNumber, GL_UNSIGNED_INT, (GLvoid*)NULL); // GL中对应的unsigned类型宏定义 GL_UNSIGNED_BYTE\GL_UNSIGNED_SHORT

}

 7. 纹理

   使用

    GLint size[2];
    glGetIntegerv(GL_MAX_TEXTURE_SIZE, size); //查看当前GT9800 显卡支持的纹理图像的最大宽度为 8192, 最大高度为 3367440 。

 

posted on 2012-06-25 14:17  没有什么能够阻挡  阅读(293)  评论(0编辑  收藏  举报

导航