忍者ブログ
凡人の日々の経過を記録
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2011年になった。
今年はどんな年になるだろう。

さて、OpenGLを去年の12月から再び始めることにした。何もすることもなくただただ時間を無駄にするよりかはるかによいので。
で、始めたはいいが、はやりOpenGLはハードルが高い。
仕事もまったく関係していないので情報源はおもにWebと参考書しかなく四苦八苦している。
とくにOpenGL3.x, 4.xとなると情報量がガクンと減ってしまう。
新しいということもあるが、せめて3.xには対応した参考書とかもう少し増えてほしいとおもう。

そんな中でも、比較的お世話になっているのが、

「OpenGL ES 2.0 プログラミングガイド」

である。
この本はOpenGL ES本なのだが、3.x, 4.xに通じるところがあり、特にGLSLを使った内容がとても参考になる。また、4.xで削除されたAPIを使わない実装方法なんかもはやりこの本がないと始まらない。
もっとこういった本が出てほしいな。
もっとプログラミングに興味がある一般素人でも入りやすい環境がほしい。

とりあえずボヤいてみたりした。


拍手[0回]

PR


今年ももう終わりだ 今回ともだちに誘われてコミケにいってみたよ! 二日目ということもあって人が少ないらしかったんだけど、思ってた以上に人がいたよ。 中に入るのもやっとだったけど、会場のなかもごったがえしてた。 とりあえずそのともだちについってただけだったけど迷子になりそうだった。 知ってる会場なのに迷路になってた。 でもいろいろたのしかったよ!!!

拍手[0回]




VBOとVAOって名前が似ている。
似ているんだけど違いがいまいち分からなかった。
でも、今日ようやく理解できたのでメモしておく。
  • VBO:Vertex Buffer Object
  • VAO: Vertex Array Object
VBOは、サーバ側メモリに領域を確保して頂点座標配列、法線配列、テクスチャ座標配列、などを保持するために使用する。
VAOは、VBOをカプセル化するもので、VertexAttribPointer、EnableVertexAttribArrayといった制御もVAOに格納することができる。
VAOを使った場合、VBOのみ使用のときに比べてレンダリングするときの制御が簡潔になるのが利点。

----
GLuint vao[1];
GLuint vbo[2];
vertex_t verticies[] = { /* pos(x,y,z) , normal(x,y,z), coord(s, t) ... */ };
GLuint indices[] = {  ... };

///--- setup ----------

    // Create VBO
    glGenBuffers(2, vbo);
 
    // Create and bind VAO
    glGenVertexArrays(1, vao);
    glBindVertexArray(vao[0]);
    {   
      // --- VBO 0 ---
      glBindBuffer(GL_ARRAY_BUFFER, vbo[0]);
      glBufferData(GL_ARRAY_BUFFER, sizeof(verticies), verticies, GL_STATIC_DRAW);
 
      offset = 0;
      glVertexAttribPointer(context->positionLocation,
              3, GL_FLOAT, GL_FALSE, sizeof(vertex_t), (const void*)offset);
      offset += 3 * sizeof(GLfloat);
      glVertexAttribPointer(context->normalLocation,
              3, GL_FLOAT, GL_FALSE, sizeof(vertex_t), (const void*)offset);
      offset += 3 * sizeof(GLfloat);
      glVertexAttribPointer(context->texcoord0Location,
              2, GL_FLOAT, GL_FALSE, sizeof(vertex_t), (const void*)offset);
 
      glEnableVertexAttribArray(context->positionLocation);
      glEnableVertexAttribArray(context->normalLocation);
      glEnableVertexAttribArray(context->texcoord0Location);
 
      // --- VBO 1 ---
      glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbo[1]);
      glBufferData(GL_ELEMENT_ARRAY_BUFFER, numOfIndecies*sizeof(GLuint), indices, GL_STATIC_DRAW);
    }
    glBindVertexArray(0);
 
    glDeleteBuffers(2, vbo);

///--- render ----------

    // VAO - vertex, normal, texcoord0
    glBindVertexArray(vao[0]);
    glDrawElements(GL_TRIANGLES, numOfIndecies, GL_UNSIGNED_INT, 0);
 
---

上記から分かるとおり、VAOを使った場合、レンダリング時の処理は、
  • BindVertexArray
  • glDrawElements
の2つだけになる。
レンダリング時の記述が簡潔になるということは、CPU<->GPU間のバス占有率が下がるということで高速化が期待できる?!
根拠に自信ないけど。。

 

拍手[0回]



現状 とりあえず、以下で。

freeglut + GLEW + GLM
  • freeglut v2.6.0 : 
  • GLEW v1.5.7 : OpenGL4.1 support
  • GLM v0.9.0.6 : OpenGL Mathematics
今後、他のプラットフォームがOpenGL4.1をサポートするようになればそちらに乗り換えるかも。


拍手[0回]



 OSはUbuntu10.04


gxext.hの最新を入れる。
 % wget http://www.opengl.org/registry/api/glxext.h
 % sudo mv glxext.h /usr/include/GL

 % git clone git://glfw.git.sourceforge.net/gitroot/glfw/glfw 
 % cd glfw
 % cmake .
 % make
 % sudo make install
/usr/localにインストールされる。


/usr/localなので動的ライブラリは別途指定が必要とおもわれ、
 % sudo vi /etc/ld.so.conf.d/local    <= 新規作成
-----
/usr/local/lib
-----
 % sudo ldconfig







拍手[0回]




Powered by 忍者ブログ  Design by © まめの
Copyright © [ ずくのない凡人の日記 ] All Rights Reserved.
http://bambooflow.blog.shinobi.jp/