• 3D Computer Grapihcs Using OpenGL


    本节将绘制一个三角形

    先看最终代码:

    MyGlWindow.cpp:

     1 #include <glglew.h>
     2 #include "MyGlWindow.h"
     3  
     4 void MyGlWindow::initializeGL()
     5 {
     6     glewInit();
     7     GLfloat verts[]=
     8     {
     9         +0.0f, +1.0f,
    10         -1.0f, -1.0f,
    11         +1.0f, -1.0f,
    12     };
    13     GLuint myBufferID;
    14     glGenBuffers(1, &myBufferID);
    15     glBindBuffer(GL_ARRAY_BUFFER, myBufferID);
    16     glBufferData(GL_ARRAY_BUFFER, sizeof(verts), verts, GL_STATIC_DRAW);
    17     glEnableVertexAttribArray(0);
    18     glVertexAttribPointer(0,2,GL_FLOAT,GL_FALSE,0,0);
    19 }
    20  
    21 void MyGlWindow::paintGL()
    22 {
    23     glViewport(0,0,width(),height());
    24     glDrawArrays(GL_TRIANGLES, 0, 3);  
    25 }

    启用通道

    每个顶点都有多种attributes,例如位置,颜色等。

    为了让把数据从内存发送到显卡中,我们需要告诉OpenGL去开启某个attribute。

    17 行使用glEnableVertexAttribArray()函数来启用位置属性,参数0表示默认的数据通道,位置。

    数据描述

    我们接着需要对数据进行描述,告诉OpenGL这串数据代表几个顶点,每个顶点是几个数据组成。18行使用glVertexAttribPointer()函数达到这个目的。

    第一个参数和前一行的函数参数表示同样的意思,位置0,位置通道。

    第二个参数表示每个元素由几个数据组成,因为我们使用了2个数据来表示x和y,所以这里是2。

    第三个参数表示数据类型是GL_FLOAT

    第四个参数表示是否对数据进行Normalize,这里不需要

    第五个参数表示数据的Stride,即两组数据间的跨度,有时不只有表示位置的数据,还有表示颜色等其他信息的数据,那么两组同类型数据之间就有一些跨度。

    第六个参数表示起始的偏移,和第五个参数结合使用。

    绘制

    24 行使用glDrawArrays对数组进行绘制。

    第一个参数表示绘制的图元类型,这里是三角形。

    第二个参数表示第一个顶点的起始位置。

    第三个参数表示绘制几个顶点。

    窗口自适应

    OpenGL窗口没有根据Qt窗口大小动态调整,所以添加第23 行来进行调整。

    glViewPort()函数用来指定用窗口的哪个区域进行OpenGL绘制,四个参数分别表示左上角x,左上角y,绘制宽度,绘制高度。

    这里的width()和height()是Qt的函数。

  • 相关阅读:
    python eval() 进行条件匹配
    spring boot 学习
    JAVA基础
    在mac上进行JAVA开发
    移动端开发基础【8】页面生命周期
    数据挖掘【1】概述(引言)
    项目管理【26】 | 项目成本管理-规划成本管理
    项目管理【24】 | 项目进度管理-控制进度
    项目管理【25】 | 项目成本管理-成本管理概念
    操作系统【8】 Linux虚拟内存和物理内存
  • 原文地址:https://www.cnblogs.com/AnKen/p/8331001.html
Copyright © 2020-2023  润新知