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]
daripada positions[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:
Vector3 {
GLfloat x,y,z;
};
Color3 {
GLbyte r,g,b;
};
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:
union Vector3f {
GLfloat v[3];
struct {
GLfloat x,y,z;
};
};
union Color3b {
GLbyte c[3];
struct {
GLbyte r,g,b;
};
};