Voici, pour les collectionneurs, un moteur 3D que j'ai développé en PHP 4.0.5 avec un peu de JavaScript, et ça tient sur une disquette. Il permet de générer des objets, des reliefs... les orienter dans l'espace, créer des lumières et des dégradés, les voir en stéréoscopie, générer des story-boards et séquences d'images (pour réaliser des GIF animés, AVI, Divix...), le tout en interactif dans un navigateur. C'est la lenteur d'exécution   =:(    qui m'a fait arrêter ce développement pourtant prégnant. Voici donc l'ensemble à télécharger, dans l'espoir que quelqu'un saura faire avancer cette curiosité et m'envoyer un ptit mot (email sur la page d'accueil).

Exemples
Cartes stellaires 3D
Caractéristiques
Téléchargement
Installation

Exemples
Limités par la faible puissance de calcul dont je dispose (PHP est interprété, donc lent). Images générées en 30 s à 4 mn sur un Celeron 800 à 256 Mo Ram. Je suis preneur d'un Cray Y-MP-2 d'occase.

Quelques écrans et objets à différents stades de programmation.



Module de topographie
La surface de Mars, le canyon Valles Marineris avec quatre volcans dont Olympus Mons en haut à gauche, et le réseau de failles du Labyrinthe de la nuit au centre. Le niveau de gris correspond à l'altitude. Voici la carte d'origine. Il suffit de balayer l'image (x,y) et de transformer le niveau de gris en altitude (z).


...et le résultat avec le module de topographie en mode faces cachées:

La résolution de cette image est réduite pour diminuer le temps de traitement. Pas mal quand même, pour du PHP... Vous pouvez obtenir les cartes topographiques complètes dans les "ressources 3D" des liens 3-D


Stéréoscopie
Le navigateur stéréo affiche deux fois la même image décalée. Le relief apparaît lorsqu'on regarde à travers, comme si elles étaient à plusieurs mètres de l'écran. Il suffit de relaxer les yeux sans loucher, et de laisser les cubes se confondre en un seul au centre (oubliez les cubes résiduels des côtés). Il est important de garder le regard horizontal. Persévérez, avec un peu d'entraînement le truc est acquis pour la vie. La modification pour la stéréo avec lunettes rouge et bleue est simple.

Caractéristiques

Objectifs

réaliser un moteur 3D compatible web

JavaScript, Java, VRML...? PHP!

demander le minimum côté client

le serveur calcule puis transmet l'image

manipuler des scripts d'animation

fichiers texte ou MySQL optionnel

varier les représentations 3D

faces cachées, filaires ou points

manipuler / orienter en interactif

interface navigateur (JavaScript)

Problèmes rencontrés

la lenteur croît extrêmement vite avec le nombre de faces (sphères, etc)

optimisation peu efficace...

limite provisoire de 255 couleurs (parmi 16 millions tout de même)

librairie GD2 nécessaire mais non standard (fonctions images truecolor)

clipping inachevé dans les angles

flemme de terminer

Résultats

Ca marche!!!

Pure satisfaction intellectuelle

translation et rotations

sans matrices, gnek gnek...

faces cachées

calcul (original ?) de retournement, sans vecteur normal

éclairages et dégradés. Sources de lumières colorées définissables et mixables, éclairage d'ambiance.

Orientation de la face non prise en compte (pas de vecteur normal). Pas d'ombres portées.

homotéthies

par script (interactif aisément faisable)

insertion d'images de fond

réduit le nb de couleurs disponibles

interface de commande

Oups! l'axe de tangage (a) s'oriente après le lacet (b)...

souris non utilisée (par flemme)

utiliser les imagemaps?

topographie (très chouette)

Génère points, faces rectangulaires ou lignes verticales. Nécessite en entrée une carte topo N&B.

stéréographie

testée avec succès en // (vision à l'infini); aisément adaptable en rouge & bleu

vues multiples (côté, face, dessus et perspective simultanément)

testé avec succès, mais qu'est-ce que c'est leeennnnnt


Téléchargement
Toute l'application tient largement sur une disquette! Attention, il faut vraiment respecter les répertoires.  Télécharger ici (pas de virus, que du texte!): Reportez-vous ensuite au chapitre installation.

Voici la description des fichiers:

Moteur 3D
Peut être utilisé seul, voir les paramètres d'appel dans 3d_aff.php

composant

fichier

répertoire

importance

moteur

3d_aff.php
3d_config.inc.php
3d_lib.php
3d_database.php
3d_fic.php

3d_v5

indispensable

Menu (facilite la navigation parmi tous ces modules...).

fichier

répertoire

3d_menu.php

3d_v5

accueil.php

3d_v5

index.htm

3d_v5

Visualisation (appel du moteur)

composant

fichier

répertoire

importance

navigateur

_3d_cible.htm
_3d_navig.php
navigateur.htm

3d_v5/browsers

extrêmement utile

navigateur stéréoscopique

3d_navig_stereo.htm
_3d_navig_stereo.php
navigateur_stereo.htm

3d_v5/browsers

seulement pour stéréo

pellicule virtuelle

story_board.php (nécessite MySQL)

3d_v5/browsers

optionnel; utile pour scripts longs

visualiseurs d'objets

bibliotheque_objets.php

3d_v5/browsers

utile (visualise des objets sans passer par un script)

Génération d'objets

composant

fichier

répertoire

importance

générateur de sphère

sphere.php

3d_v5/generators

utile

générateur de grille faces cachées / filaires / points

grille.php

3d_v5/generators

utile

générateur de cube (divisible)

cube.php

3d_v5/generators

utile

générateur de relief

topographie.php (voir liens ressources 3D pour les cartes topographiques, attention il faut une carte sans ombrage ou "shading"), voir ICI

3d_v5/generators

optionnel mais très chouette

représentation d'étoiles proches n°1, sans garantie

catalogue_hyg.php
hyg_cas.txt (le catalogue d'entrée pour Cassiopée)

3d_v5/generators

optionnel; PHP a du mal à suivre avec autant de points...

représentation d'étoiles proches n°2, plus simple

etoiles_proches.php
nearstars.txt (le catalogue d'entrée)

3d_v5/generators

idem mais plus léger

Visualisation de scripts. Attention à ne pas trop réduire le temps entre les images, sinon le PC va vite être engorgé (il n'y a pas de synchronisation entre client et serveur).

composant

fichier

répertoire

importance

projette un film d'après un script texte

production_scene_script.php

3d_v5/browsers

utile

idem avec un script SQL

production_scene_sql.php

3d_v5/browsers

utile

idem mais autre présentation

visionneuse_sql.php

3d_v5/browsers

un peu superflu

Génération de scripts.
Tous ces petits programmes sont utiles pour générer des scripts; aucun n'est indispensable, mais tous nécessitent MySQL. J'ai arrêté leur maintenance et ne garantit pas que les scripts qu'ils génèrent sont à jour (= compatibles avec les commandes interprétées dans 3d_aff.php). Cependant, leur maintenance est très aisée. Vous trouverez des modules dont les fonctions se recouvrent.

fichier

répertoire

changer_action.php

3d_v5/modules

ecran_dimension.php

3d_v5/modules

ecran_rotation.php

3d_v5/modules

ecran_rvb.php

3d_v5/modules

ecran_translation.php

3d_v5/modules

export_sql_script.php

3d_v5/modules

lumiere_creation.php

3d_v5/modules

lumiere_rvbi.php

3d_v5/modules

lumiere_translation.php

3d_v5/modules

objet_chargement.php

3d_v5/modules

objet_rotation.php

3d_v5/modules

objet_rvbi.php

3d_v5/modules

supprimer_action.php

3d_v5/modules

Quelques objets 3D indispensables.

fichier

répertoire

reticule.3d

3d_v5/objects

point.3d

3d_v5/objects

ligne01.3d

3d_v5/objects

cube01.3d

3d_v5/objects

repere.3d

3d_v5/objects

etoile.3d

3d_v5/objects


Installation PHP & MySQL
NOTE: La table suivante date de 2004. Mise à jour 2009: utilisez plutôt WAMP (gratuit, PHP, MySQL...) pour Windows. Il faut ensuite traduire les sources PHP4 en PHP5, ce qui est à la portée de tout programmeur PHP en quelques heures dans ce cas.

sous Windows (tm)

easyphp chez Phpguide (en français), simple à installer et complète

apache, php, mysql, PhpMyAdmin

ou encore phptriad chez sourceforge (en anglais)

apache, php, mysql

sous Linux

d'origine dans RedHat
d'origine dans Mandrake

il restera PhpMyAdmin à télécharger

Note: MySQL n'est utile que pour des scripts longs (générer des animations longues). Si vous installez MySQL,  phpmyadmin est conseillé mais non indispensable.

ATTENTION: il est impératif d'installer le moteur 3D dans le répertoire 3d_v5 et ses sous-répertoires (en général c:\apache\htdocs\3d_v5 pour Windows, ou /var/www/html/3d_v5 pour Linux).

Pour activer la librairie GD: enlever le point-virgule dans le fichier PHP.INI sur la ligne suivante:
extension=php_gd.dll
Faites l'effort de lire la doc d'installation PHP pour utiliser GD2; 16 millions de couleurs au lieu de 255 parmi 16 millions, vous pourrez alors modifier 3d_lib et 3d_aff pour utiliser les fonction images truecolor.

Utilisez au choix le serveur PWS, IIS ou Apache que je recommande fortement (en v1.3, la v2 pose des problèmes).

Configuration fine de l'application 3D: voir 3d_v5/3d_config.inc.php qui contient tous les paramètres (répertoires, port du serveur, etc).

Le temps de calcul est volontairement limité: il s'agit du paramètre max_execution_time dans PHP.INI (par défaut 30 secondes). Pour le modifier (l'allonger à 300 s par exemple) , arrêter apache, modifier le fichier et relancer apache.

Enfin, en cas de problème dans le navigateur, recopiez l'URL de la ligne du bas vers la zone "adresse" du navigateur; vous appelerez ainsi le moteur directement, et il affichera les erreurs (jusqu'à présent soit un fichier .3d manquant, soit un dépassement de temps de calcul).


 up