Apa praktik terbaik dalam hal menyimpan data vertex di Open GL? Yaitu:
struct VertexColored {
public:
GLfloat position[];
GLfloat normal[];
byte colours[];
}
class Terrian {
private:
GLuint vbo_vertices;
GLuint vbo_normals;
GLuint vbo_colors;
GLuint ibo_elements;
VertexColored vertices[];
}
atau meminta mereka disimpan secara terpisah di kelas yang diperlukan seperti:
class Terrian {
private:
GLfloat vertices[];
GLfloat normals[];
GLfloat colors[];
GLuint vbo_vertices;
GLuint vbo_normals;
GLuint vbo_colors;
GLuint ibo_elements;
}
Jawaban:
Tidak ada praktik terbaik. Semuanya bervariasi pada aplikasi yang sedang dikembangkan.
Untuk game penyaji ada tidak perlu ke toko simpul di kedua RAM dan VRAM , yang berarti Anda perlu menjaga hanya VBO id. Pengecualian adalah medan di mana Anda harus memiliki akses ke posisi karena penempatan / tabrakan pemain tinggi.
Apakah Anda perlu memiliki semua data vertex bersama? Jika Anda ingin memiliki beberapa warna untuk simpul yang sama seperti warna yang berbeda untuk model pemain yang sama maka menyatukan semuanya dapat menyebabkan sedikit hambatan dalam pengembangan.
Apakah Anda mengakses data di luar dari kelas? Jika tidak, Anda hanya akan berakhir dengan lebih banyak kode seperti
vertices->position[i]
daripadapositions[i]
. Dalam perancang permainan / model Anda harus mengaksesnya dari luar, tetapi Anda tidak mengakses semua data pada saat yang sama ketika Anda memodelkan maka Anda mengakses posisi dan ketika Anda mewarnai maka Anda mengakses warna.Satu-satunya hal yang saya akan kumpulkan adalah
xyz
(rgb
) nilai ke dalam satu struktur untuk kode yang lebih bagus:Sunting: Saya ingin menambahkan, bahwa beberapa orang menggunakan
unions
untuk glVertex * 3v, glVertex * 4v, glUniform * v ... lebih mudah memanggil di mana array dilewatkan daripada variabel yang dipisahkan:sumber