25 February 2009

Développement d'une API 3D en C++: textures (2)

Je n'ai pas pu résister à l'envie de poster quelques réalisations supplémentaires. C'est comme ça, à chaque fois que je raffine un peu plus mon API 3D et que je la teste à l'aide de quelques programmes dédiés que je développe, je passe parfois bien du temps à contempler le résultat. Cela met du beaume au coeur, mais permet également de s'évader un peu et de réfléchir à la prochaine étape. Je laisse l'inspiration venir en "jouant" avec mes réalisations présentes.

Vous trouverez dans cet article les copies d'écran de trois objets que j'ai modélisés à l'aide de Blender, que j'ai exportés en Wavefront avec ce dernier, et que j'ai finalement chargés dans un programme de test développé à l'aide de mon API C++/OpenGL. Deux objets très simples à modéliser, mais qui comportent aussi bien des aspects d'ombrage et de texture: la Terre et la planète Mars. Et oui, j'ai assez bien la tête dans les étoiles et l'espace me fascine (bien que je ne sois pas un grand fan de Star Wars). Le dernier objet est un peu bizarre, c'est tout à fait normal: il a été modélisé assez rapidement dans le cadre d'une démonstration que j'ai réalisée en famille. La démonstration consistait bien sûr à montrer comment un objet modélisé avec Blender pouvait se retrouver très facilement dans une application 3D basée sur mes travaux.




Développement d'une API 3D en C++: textures

Le développement de ma propre API C++/OpenGL continue, bien que ralentie ces derniers temps suite à un emploi du temps très chargé, et bon nombre d'heures passées sur d'autres travaux informatiques. Bien évidemment, il n'était pas question d'abandonner ce projet: lentement mais sûrement, l'API évolue, permettant de charger des objets 3D de plus en plus complexes... et beaux !

Lors du dernier article, j'avais présenté la fonctionnalité de chargement des matériaux. Tout objet modélisé à partir de Blender peut être exporté, puis affiché dans mon application 3D (basée sur mon API) avec sa géométrie complète, une distribution de la lumière (shading) et certaines caractéristiques comme la couleur spéculaire, le degré de brillance, la couleur diffuse, etc.

Désormais, tout objet modélisé dans Blender peut être exporté avec tous ces aspects, plus une texture appliquée. Ceci incombe que les coordonnées de placage de la texture (UV) soient également exportées dans le fichier Wavefront associé, puis chargées et gérées par l'API 3D. Il est donc désormais possible de créer très rapidement un objet 3D complexe, ombragé, émettant de la lumière et possédant une texture (image au format TIFF), dans toutes mes réalisations 3D.

Je pense avoir implémenté toutes les fonctionnalités de base en ce qui concerne les objets 3D, je vais donc maintenant m'attaquer aux interactions: détection des collisions, mouvements mécaniques, etc. Beaucoup d'amusement en perspective !