zoukankan      html  css  js  c++  java
  • 3D Computer Grapihcs Using OpenGL

    本节绘制一个三角形,并讲解Buffer Object-缓冲对象

    OpenGL的窗口坐标

    屏幕中心为坐标原点,横向朝右为x正方向,纵向朝上为y正方向,最大值最小值分别为1,-1.

    Buffer Object

    缓冲对象为内存中的一块空间,用来和OpenGL交互数据。

    使用BufferObject的步骤:

    1. 创建Buffer的“名称”(或者理解为ID,地址), GLuint类型;
    2. 生成Buffer;
    3. 绑定Buffer到OpenGL的绑定点(Binding Point);
    4. 设置Buffer数据;

    具体代码实现如下,修改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 }
    18  
    19 void MyGlWindow::paintGL()
    20 {
    21     glClearColor(1,0,0,1);     
    22 }

    13 行创建了一个GLuint对象(在OpenGL中可以用作对象的“名称",或者理解为ID或者类似指针的东西)。

    14 行使用glGenBuffers函数创建了一个Buffer Object,第一个参数表示创建一个Buffer Object,第二个参数要使用一个GLuint类型对象的地址,用来把刚创建的Buffer Object的“地址/名称/ID”填充进去。

    15 行把刚才创建的Buffer 对象绑定到OpenGL的一个GL_ARRAY_BUFFER绑定点。绑定点包括 GL_ARRAY_BUFFER, GL_ELEMENT_ARRAY_BUFFER等。绑定以后,绑定点的操作和绑定的Buffer对象就是等价的了。

    16 行给Buffer 对象填充进数据。第一个参数说明是给GL_ARRAY_BUFFER绑定点填充数据,因为上一步已经绑定了,这里其实就是在给Buffer 对象填充数据。第二个参数表示数据的长度,第三个是要填充的数据,第四个参数表示数据是否要经常变化,因为这里只绘制一次,就不在变化,所以使用GL_STATIC_DRAW。

  • 相关阅读:
    2017寒假练习赛总结(实时更新)
    NOIP
    挖坑--总结
    BZOJ3709: [PA2014]Bohater
    BZOJ3714: [PA2014]Kuglarz
    BZOJ2276: [Poi2011]Temperature
    VIJOS P1543极值问题
    BZOJ2749: [HAOI2012]外星人
    BZOJ2173: 整数的lqp拆分
    BZOJ1100: [POI2007]对称轴osi
  • 原文地址:https://www.cnblogs.com/AnKen/p/8330902.html
Copyright © 2011-2022 走看看