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:
Et j'ai crée un program shader de ray marching pour visualiser le volume,
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);
Pour tester si tous marche bien, j'ai générer des valeurs aléatoire pour remplir les données de la texture:
Et voilà le résultat:
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);
Ma question est: comment faire pour insérer l'objet dans le volume, afin de le voxeliser
Merci.
Partager