zoukankan      html  css  js  c++  java
  • 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 。
  • 相关阅读:
    使用 %matplotlib inline 出错?
    RandomForest 调参
    sql中的笛卡尔积
    Sublime text 3 搭建Python3 IDE
    在Windows Python3.5 安装LightGBM
    lodash获取数组或对象的值 at
    lodash 移除数据元素 pull without 删除数组元素
    js 常用类型转换简写
    UTC时间格式转换
    CSS Flexible 布局兼容性以及解决方案
  • 原文地址:https://www.cnblogs.com/wenshanzh/p/2561193.html
Copyright © 2011-2022 走看看