Salut amis développeurs
J'aurai besoin de votre expertise sur quelque chose :
Je veux rendre une surface nurbs (points de controle réguliers) avec un seul appel de glDrawElements. La solution que j'ai trouvé utilise GL_TRIANGLE_STRIP et consiste à :
- parcourir de bas en haut tout en alternant le sens à chaque extrémité de ligne (un coup de droite à gauche, un coup de gauche à droite)
Voici la fonction qui prend en argument sizeu(nb de points sur chaque ligne) et sizev(nb de points sur chaque colonne)...sizeu*sizev représentant le nombre total de points.
Le seul problème est que j'utilise le culling avec glEnable(GL_CULL_FACE) etinline void computeTriangleStripIndices(GLint sizeu, GLint sizev, std::vector<GLint> &res){
assert(sizeu > (GLint)0 && sizev > (GLint)0);
//FLAG = true signifie droite vers gauche et FLAG = false le contraire
bool FLAG = true;
GLint i = (GLint)-1;
res.push_back((GLint)0);
res.push_back((GLint)1);
for(GLint j=0; j<sizev; j++){
if(j >= sizev-1)
return;
if(i <= 0){
i+=2;
FLAG = true;
}
else{
i-=2;
FLAG = false;
}
while(i >= 0 && i < sizeu){
res.push_back((i*sizev)+j);
res.push_back((i*sizev)+j+1);
if((FLAG == true && i >= sizeu-1 && j< sizev-2) || (FLAG == false && i <= 0 && j< sizev-2))
res.push_back((i*sizev)+j+2);
if(FLAG == true)
i++;
else
i--;
}
//std::cout<<"sortie while i = "<<i<<std::endl;
}
}
ce dernier me cull toute la surface quand je finis par un parcours droite->gauche...Il me faut tourner de 180° pour que la surface soit visible..
Voilà j'espère avoir été assez clair....
Est-ce que quelqu'un aurait-il une meilleure idée pour un rendu en une seule fois avec glDrawElements sans parcours droite->gauche ???
Partager