Günlük Kayıt #1

  • 3D koodinatları 2D piksellere dönüştürme işlemi, OpenGL'in graphics pipeline tarafından yönetilir.
  • Graphics pipeline
    • Vertex Shader
    • Shape Assembly
    • Geometry Shader
    • Rasterization
    • Fragment Shader
    • Tests and Blending
  • Kendi shaderlarımızı yazabileceğimiz bölümler:
    • Vertex Shader
    • Geometry Shader
    • Fragment Shader
  • Örneğin üçgen çizdirmek istersek yapmamız gereken verileri tanımlamak:
    • VBO oluşturmak
    • Bu VBO'ya unique id vermek (glGenBuffers(size, &VBO))
    • Belli bir VBO buffer tipi ile bağlamak. (glBindBuffer(GL_ARRAY_BUFFER, VBO))
    • Sonrasında tanımlanan veriyi bu bağlanmış olan VBO'ya göre o buffer tipine veri yüklemeyi gerçekleştirmek. (glBufferData(GL_ARRAY_BUFFER, sizeof(data), data, GL_STATIC_DRAW*3 form alabilir*))
  • Yazılan shader programlarda kullanılan dil GLSL'dir.
  • Attribute tanımlarken in keyword kullanılır. 
  • Attribute değişkenin konumu layout (location = x) in vec3 a_variableName; şeklinde belirtilir.
  • OpenGL'de render olmadan önce vertex data nasıl yorumlanması gerektiği programcı tarafından belirtilmelidir. Örneğin VBO'da yer alan verinin yapısı şu şekilde olsun:
    • Stride: 12
    • offset: 0
    • Vertex 1
      • x1 → 4 byte (32-bit float) [0-4]
      • y1 → 4 byte (32-bit float) [4-8]
      • z1 → 4 byte (32-bit float) [8-12] 
    • Vertex 2
      • x2 → 4 byte (32-bit float) [12-16]
      • y2 → 4 byte (32-bit float) [16-20]
      • z2 → 4 byte (32-bit float) [20-24]
    • Vertex 3
      • x3 → 4 byte (32-bit float) [24-28]
      • y3 → 4 byte (32-bit float) [28-32]
      • z3 → 4 byte (32-bit float) [32-36]
    • Bu bilgiler ışığında vertex data'nın nasıl yorumlanması gerektiğini glVertexAttribPointer fonksiyonu ile söyleriz:
    • glVertexAttribPointer(x, 3(size), GL_FLOAT(data_type), GL_FALSE(normalized), 3*sizeof(float)(stride),(void*)0(offset));
    • x olarak temsil edilen parametre attribute location değeridir. Bu sayede hangi veriyi yapılandırmak istediğimizi belirtiyoruz. Konumunu ne olarak belirtmişsek o konumu vermeliyiz.
    • glVertexAttribPointer verileri hangi buffer GL_ARRAY_BUFFER'a bağlıysa ondan veriyi alır.
  • Vertex Attribute'lar default olarak devre dışıdır. Bu sebeple kullanabilmek için aktif edilmelidirler. Bunun glEnableVertexAttribArray(x) kullanılır.
  • VAO kullanımı ise bundan sonra ihtiyaç haline gelmektedir. VAO için VBO'ların depolandığı bir nesne olarak bahsedebiliriz. Bu nesne içinde positions, colors, normal vectors, texture_coords gibi veriler barındıran VBO olarak depolanmaktadır. VAO yani Vertex Array Object aslında bir attribute liste yapısıdır.
  • Bir şeyi çizmeden önce şu adımları uygulayabiliriz:
    • VAO, VBO oluşturulur.
    • VAO bağlanır.
    • VBO bağlanır.
    • VBO'ya ilgili veri verilir.
    • Veri uygun şekilde yorumlanır.
    • Döngü içinde VAO bağlanır.
    • Çizim metodu kullanılır.

Hiç yorum yok:

Yorum Gönder