Bonjour,
Voilà alors j'ai un problème concernant mon algorithme pour faire de la 3D, par avance je n'utilise aucune fonctions du gpu pour faire la 3D.
Et j'aimerais gardé cette aspect simple/facile, plutôt que faire appel au fonctions matriciel, fonction lookat() et j'en passe et des meilleurs .
Je passe donc tout par cpu, alors voiçi l'algorithme:
- Au départ, j'ai un vecteur point correspondant à un point de mon objet.
- Object_Management:
- Camera_Management:
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 - J'addition ce vecteur avec un autre vecteur appeller obj_position[4] - Puis je passe ce vecteur à travers mes equation de rotations: X-axe 1y = (1y * cos(phi_x)) - (1z * sin(phi_x)) 1z = (1z * cos(phi_x)) + (1y * sin(phi_x)) Y-axe End.1z = 1z' = (1z * cos(phi_y)) - (1x * sin(phi_y)) 1x = (1x * cos(phi_y)) + (1z * sin(phi_y)) Z-axe End.1x = 1x' = (1x * cos(phi_z)) - (1y * sin(phi_z)) End.1y = 1y' = (1y * cos(phi_z)) + (1x * sin(phi_z)) - J'addition le vecteur sortie avec un autre vecteur appeller obj_repere[4]
- Screen_Management :
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 - J'addition le vecteur sortie avec un autre vecteur appeller world_repere[4] - J'addition le vecteur sortie avec un autre vecteur appeller cam_repere[4] - Je passe ce vecteur à travers mes equation de rotations une nouvelles fois: X-axe 1y = (1y * cos(phi_x)) - (1z * sin(phi_x)) 1z = (1z * cos(phi_x)) + (1y * sin(phi_x)) Y-axe End.1z = 1z' = (1z * cos(phi_y)) - (1x * sin(phi_y)) 1x = (1x * cos(phi_y)) + (1z * sin(phi_y)) Z-axe End.1x = 1x' = (1x * cos(phi_z)) - (1y * sin(phi_z)) End.1y = 1y' = (1y * cos(phi_z)) + (1x * sin(phi_z))
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 - J'affiche ce vecteur à l'ecran en le mettant dans un tableaux grace à l'equation: x = (x * distance) / z y = (y * distance) / z screen[repere - (x * BPP + PITCH * y)] = color
Et pour gérée le déplacement de la camera, je change le vecteur cam_repere[] selon sur l'axe où je veut me déplacer, mais si je veut m'avancer selon l'axe forward de la camera, je me retrouve vite coincés.
Merci d'avance.
Partager