Bonjour, non, ce n'est pas un message pour demander pour la 50e fois comment charger un fichier 3ds sous tel ou tel API.
Je suis actuellement en train de réaliser un loader 3ds (j'aime réinventer la roue, allez savoir pourquoi) et je rencontre certaines difficultés pour le calcul des normals.
J'arrive bien à lire les sommets, les faces, et comme les normales ne sont pas fournies. Pas grave, je les calculs. Et là... C'est le drame, certaines sont bonnes et d'autres sont inversés. Donc je viens poster ici voir si quelqu'un a déjà eu ce problème.
Voici le code pour calculer ma normale de surface :
L'ordre des sommets (v1, v2, v3) est celui dans lequel je les lis et je pense qu'il est bon (après différents tests).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 void calc_surface_normal(float v1[3], float v2[3], float v3[3], float normal[3]) { float u[3]; float v[3]; u[0] = v1[0] - v3[0]; u[1] = v1[1] - v3[1]; u[2] = v1[2] - v3[2]; v[0] = v3[0] - v2[0]; v[1] = v3[1] - v2[1]; v[2] = v3[2] - v2[2]; normal[0] = u[1] * v[2] - u[2] * v[1]; normal[1] = u[2] * v[0] - u[0] * v[2]; normal[2] = u[0] * v[1] - u[1] * v[0]; float temp = sqrt(normal[0] * normal[0] + normal[1] * normal[1] + normal[2] * normal[2]); normal[0] /= temp; normal[1] /= temp; normal[2] /= temp; }
Voila, merci d'avoir au moins lu ce message jusqu'au bout
Partager