Bonjour,

Je veux crée un programme qui permet de représenter un objet 3D par un ensemble de voxels, j'ai comme entrée un mesh d'un fichier obj et je cherche une manière simple et efficace de voxeliser juste le contours, je travaille avec le C++ et GLSL 3.3 sous VS2008, j'ai crée la grille de voxels en utilisant la texture 3D:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
glGenTextures(1, &m_texID);
glBindTexture(GL_TEXTURE_3D, m_texID);
 
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAX_LEVEL, 0);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_BASE_LEVEL, 0);
glBindTexture(GL_TEXTURE_3D, 0);
Et j'ai crée un program shader de ray marching pour visualiser le volume,

Pour tester si tous marche bien, j'ai générer des valeurs aléatoire pour remplir les données de la texture:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
float* data = new float[m_dim.x * m_dim.y * m_dim.z * 3];
for (size_t i = 0; i < m_dim.x * m_dim.y * m_dim.z * 3; i++) {
  data[i] = (rand() / (float) RAND_MAX) * 0.5f + 0.1f;
  //std::cout << data[i] << "\n";
}
 
glBindTexture(GL_TEXTURE_3D, m_texID);
glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB8, m_dim.x, m_dim.y, m_dim.z, 0,
             GL_RGB, GL_FLOAT, data);
glBindTexture(GL_TEXTURE_3D, 0);
Et voilà le résultat:

Nom : img02.png
Affichages : 568
Taille : 59,9 Ko

Ma question est: comment faire pour insérer l'objet dans le volume, afin de le voxeliser

Merci.