Home › Forums › A Demokészítés művészete › Programozás › Segítség, kezdőknek! › Válasz erre: Segítség, kezdőknek!
Első ránézésre:
Mi van a vbo-ban? Lehet nem egy struct tömböt kellene átadni, ahol egymás után vannak az adatok, hanem külön-külön tömböket; nekem úgy néz ki innen (ha jól értelmezem), hogy nem kapja meg a shader az UV-t.
struct{
float *vertex; //vertexek egymas utan x, y, z; [0..3*vertex_darab]
float *normal; //ugyanigy
float *uv; // [0..2*vertex_darab]
float *tobbi; // minden egyeb vertex adat; pl. tengens vektor
unsigned int *indexek; //bizonyos eszkozokon, pl. openges2-ben unsigned short lehet
unsigned int vertex_darab;
unsigned int texture_id;
}mesh;
// ...
// shader be
// vbo be (most siman vbo nelkul)
glBindAttribLocation(shader.program, 0, "texUV"); //lehet ez hianyzik neked;
glVertexAttribPointer(0, 2, GL_FLOAT, 0, 0, mesh.uv);
glEnableVertexAttribArray(0); //ennek elvileg a sorrendje mindegy
glBindAttribLocation(shader.program, 1, "vertexCoord"); //lehet ez hianyzik neked;
glVertexAttribPointer(1, 3, GL_FLOAT, 0, 0, mesh.vertex);
glEnableVertexAttribArray(1); //ennek elvileg a sorrendje mindegy
// draw
// vertex attrib ki
// vbo ki
// shader ki
Amit hozzátennék; nem tudom milyen oprengl-t használsz (3-at talán, abba nincs vertex array, meg hasonlók, helyette mindent vertex attribbal kell átadni; de nem tudom hogy van ez) előfordulhat hogy bizonyos kártyák bizonyos level-öket fenntartanak fix paramétereknek, pl. ez.
Én opengl2-t használok, tehát a vertex, normal, és uv értékeket nem atribbal adom át, hanem gl[Vertex|Normal|TexCoord]Pointer függvénnyel. Ha így használod, akkor előtte/utána gl[Enable|Disable]ClientState() kell majd.
A (most már) ingyenes gDEBuggerrel meg tudod nézni mit művel futás közbe, illetve a shadereid megkapják-e a paramétereiket, vagy nem.
Nekem ennyi ötletem támadt, de ha nem ez, akkor jelenleg nem tudom.