ultimate3d / sommaire
IntroductionFonctions de baseFonctions avancéesMise à jour U3DEpilogueExtensions GMIndex des fonctions

retour à la liste des exemples en français...
Mise à jour Ultimate 3D
Chaque fois qu'une nouvelle version de Ultimate 3D est réalisée, quelques scripts ont changé au sein de cette version et d'autres peuvent avoir été ajoutés. Pour cette raison vous devez les changer dans votre projet si vous voulez mettre à jour le projet dans une nouvelle version d'Ultimate 3D. Ce tutoriel vous guidera au cours de ce processus pour chaque version. Il vous suffit de trouver le sous-chapitre qui correspond à votre cas et de suivre les étapes. Si vous avez besoin de mettre à jour à partir d'une très ancienne version, vous pouvez également enchainer les mises à jour par étapes, pour obtenir par exemple de Ultimate 3D 2.0 beta 3 vers Ultimate 3D 2.0 final. Depuis, je fais toujours de mon mieux pour préserver de la baisse de compatibilité des processus de mise à jour et cela ne me prend en général pas plus de quinze minutes.
Mise à jour d'un projet Ultimate 3D final vers Ultimate 3D 2.1 béta
Ultimate 3D 2.1 a beaucoup de petites
nouvelles fonctionnalités, un nouveau principe de détection de
collision et un nouveau système de réponse de collision. Donc de très
nombreux scripts doivent être ajoutés, certains ont besoin d'être
modifiés et certains (en rapport avec la détection de collision)
doivent être supprimés. Vous aurez probablement à réécrire la plupart
de vos détections de collision et vos codes de réponse de collisions,
mais avec les nouvelles fonctions c'est très facile.
Voici une liste de tous les scripts qui ont besoin d'être
ajoutées. Tous ces scripts sont contenus dans le fichier NewScripts.gml, qui
est fourni avec le SDK d'Ultimate 3D 2.1, vous pouvez donc importer le fichier de scripts pour les ajouter automatiquement.
- SwitchBackgroundMode(...)
- GetBoneCount()
- GetBoneParent(...)
- StartPoseInterpolation(...)
- CopyAnimation(...)
- SetModelMaterialSpecular(...)
- SetObjectSolidity(...)
- AttemptMoveToPosition(...)
- CheckSweptEllipsoidIntersection(...)
- GetTriangleIntersectionCount(...)
- GetIntersectionTime(...)
- GetIntersectionPosition(...)
- GetIntersectedTriangleNormal(...)
- GetPushAwayVector(...)
- CheckRayIntersection(...)
- GetIntersectedMaterialIndex(...)
- GetTextureStrengthAtPosition(...)
- DeformTerrain(...)
- CreateTerrainDecal(...)
- SetParticleRotation(...)
- SwitchAdditiveBlending(...)
- SetRoomVisibilityEnforcement(...)
- SetRoomAmbient(...)
- GetMeshOccurrenceCount(...)
- GetMeshOccurrenceTransformation(...)
- InterpolateMatrices(...)
- GetMatrixEntry(...)
- CoordToScreen(...)
- CheckBoundingBoxVisibility(...)
- CalculateVectorDifference(...)
- CalculateVectorLongitude(...)
- CalculateVectorLatitude(...)
- ComputeMatrixTranslation(...)
- ComputeMatrixScaling(...)
- ApplyTransformationMatrix(...)
- GetDrawnTriangleCount()
- GetDrawCallCount()
- SetMipMapFilter(...)
Voici une liste de tous les scripts qui ont besoin d'être remplacés par de nouvelles versions:
- Step()
- SetAmbient(...)
- LightPoint()
- LightDirectional()
- LightSpot()
- SmoothNormals(...)
- SetModelMaterialEmissive(...)
- CreateTerrain()
- AddTerrainTexture(...)
- CreateParticleSystem()
- ParticleSystemStep(...)
- MoveCamera()
- SwitchWireFrameMode(...)
- Init()
- InitializeLightVariables() (Game Maker 6.0 et versions supérieures seulement)
Pour certaines de ces fonctions, l'utilisation a aussi changé. SmoothNormals(...) et (...) AddTerrainTexture ont maintenant un paramètre supplémentaire, mais si vous ignorez ce paramètre, des valeurs raisonnables par défaut seront utilisées. SwitchWireFrameMode(...) n'est plus "activer" ou "désactiver" le mode fil de fer pour tous les objets de la scène. Maintenant, il active ou désactive exceptionnellement pour un objet, celui qui a appelé la fonction. Assurez-vous que vous considérons les changements d'interface, lorsque vous mettez à jour votre projet. Enfin voici la liste des scripts qui doivent être supprimés:
- GetDistanceToModel(...)
- GetDistanceToPrimitive(...)
- GetDistanceToAnyPrimitive(...)
- GetDistanceToTerrain(...)
- CoordToScreenX(...)
- CoordToScreenY(...)
- CoordToScreenZ(...)
Ne vous sentez pas choqués par tout ceci. Il existe encore une fonction pour effectuer un test des intesections de ray-mesh pour tous ces types d'objets, et elle est encore plus polyvalente que l'ancienne fonction, car elle peut automatiquement faire un test de ray-tracing pour un ensemble prédéfini d'objets solides. La nouvelle fonction est appelée CheckRayIntersection(...). Quoi qu'il en soit, pour la détection de collision et la réponse de collision, il y a une solution encore meilleure. Vous pouvez lire à ce propos dans le fichier d'aide un chapitre réécrit sur ce sujet. Elle est beaucoup plus fiable, plus facile à utiliser et dans certaines circonstances, encore plus efficace que l'ancienne méthode.
CoordToScreenX/Y/Z(...) a été maintenant remplacée par une version vecteur appelée CoordToScreen(...). Au lieu d'appeler trois différentes fonctions, vous appelez une seule fonction, qui retourne un vecteur aussitôt.
A part tout ceci, il y a quelques changements mineurs. Si vous voulez faire une room zéro invisible, vous devez utiliser SetRoomVisibilityEnforcement (...) au lieu de SetRoomVisibility(...) maintenant. Les cartes des hauteurs de terrain sont interprétées différemment maintenant, pour ajouter la prise en charge 32 bits height maps. Si votre carte de hauteurs de terrain n'est pas exactement en niveaux de gris, vous obtiendrez des résultats indésirables. Le canal rouge de la carte a maintenant une très forte influence sur les résultats. Si vos cartes sont parfaites tons de gris, vous n'aurez pas de problèmes avec la nouvelle méthode d'interprétation des données.
Une dernière chose, qu'il faut dire ici, c'est que l'ordre inverse de l'espace tangent matriciel a changé. Dans Ultimate 3D 2.0, les normales étaient écrasées par la deuxième colonne des matrices, et la troisième série de coordonnées de textures est écrasées par la troisième colonne. Maintenant les normales sont écrasées par la troisième colonne, et la troisième série de coordonnée de textures est écrasée par la deuxième colonne. Le grand avantage de cette situation est que la troisième colonne de l'inverse tangente espace des matrices généralement égale aux normales. Pour cette raison, vous pouvez avoir des matériaux, qui utilisent l'éclairage par pixel, et d'autres qui ne l'utilise pas sur un même maillage en même temps. Malgré vous n'avez pas besoin de faire appel RecalculateNormals() si vous désactivez l'éclairage par pixel. Cela signifie, que si vous utilisez vertex shaders, qui utilisent l'espace tangente inverse matrices dont vous avez besoin pour swap v3 et v9. Si vous avez exporté Ultimate modèle 3D des fichiers avec l'espace des matrices inverses tangente avec les versions récentes d'Ultimate 3D 2.0, vous devez soit les réexporter ou vous devez appeler la commande AddInverseTangentSpaceMatrices() après les avoir chargés.
Mise à jour d'un projet Ultimate 3D 2.0 RC vers Ultimate 3D 2.0 final
Depuis Ultimate 3D 2.0 finale qui n'a pas vraiment de nouvelle fonctionnalités, les seuls scripts qui doivent être mis à jour sont GetObjectTransformation() et Destroy(). Quoi qu'il en soit, il est recommandé de mettre à jour / ajouter aussi les scripts suivants si vous utilisez Game Maker 6,0 ou supérieur. Il sera ainsi possible d'utiliser Ultimate 3D sans l'option Game Maker "Traiter les variables non-initialisées à la valeur 0". Les scripts suivants doivent être mis à jour à cet effet:
- CreateWall()
- CreateFloor()
- CreateCube()
- Create2D()
- CreatePolygon()
- LightDirectional()
- LightPoint()
- LightSpot()
- LoadMesh()
- CreatePrimitiveFromModel()
- CreateEmptyMesh()
- ApplyParallaxAndBumpMapping()
- SetMaterialEffectLightSource()
- CreateTerrain()
- CalculateTerrainLightMap(..,)
- CreateParticleSystem()
- MoveCamera()
- CreatePostScreenShader()
- Init()
Malgré les quatre scripts suivants ont besoin d'être ajoutés au groupe "Private fonctions":
- InitializePrimitiveVariables()
- InitializeLightVariables()
- InitializeVariable()
- InitializeVariableGlobal()
Une autre mise à jour facultative inclut quelques modifications dans le code du control objet. Le code, dans l'événement destroy et en fin de jeu, devrait être mis à jour et le code dans l'événement de fin de room doit être ajouté pour rendre Ultimate 3D correctement fonctionnel avec les changement de rooms.
Mise à jour d'un projet Ultimate 3D 2.0 beta 3 vers Ultimate 3D 2.0 RC
Ultimate 3D 2.0 RC est ce que 2,0 Ultimate 3D était à l'origine destiné à être similaires. Depuis le développement de l'Ultimate 3D 2.0 a pris beaucoup plus de temps que prévu, les versions bêta ont été réalisées avec certaines fonctionnalités manquantes pour réduire le délai de la réalisation. Celles-ci ont été ajoutées aujourd'hui. Pour pouvoir les utiliser, vous devrez un peu mettre à jour votre projet Game Maker. Alors prenez cinq minutes pour lire ce chapitre, passer encore dix minutes à faire ce qu'il est écrit, et vous pourrez commencer à utiliser Ultimate 3D 2.0 RC avec toutes ses nouvelles fonctionnalités.
La première chose que vous avez à faire est de télécharger la plus récente version du SDK sur Ultimate3D.org. Une fois que vous avez cela, vous pouvez remplacer l'Ultimate3D.dll de Ultimate 3D 2.0 beta 3 dans votre projet avec celle de la "release candidate". Juste après rien ne va travailler du tout. Premièrement, vous avez à remplacer un couple de scripts avec leurs versions plus récentes. Il suffit d'ouvrir le vieux BasicGM5.gmd (resp. BasicGM6.gm6 ou BasicGM7.gmk) et votre projet Game Maker, ouvrez les scripts qui ont besoin d'être remplacés, et copier leur nouveau contenu de la nouvelle version sur l'ancienne. Voici une liste de tous les scripts qui ont besoin d'être remplacés par des versions plus récentes:
- CreatePrimitiveFromModel(...)
- PreloadMesh(...)
- LoadMesh()
- AddFrame(...)
- Step()
- Destroy()
- Init()
- SetFilter()
- GetBoneTransformation()
- CreateTerrain()
- DrawText()
- CreateCube()
- DrawTex()
- DrawTexEx()
- RenderToCubeTexture()
- GetObjectTransformation()
- MoveCamera()
- SetObjectRoom()
Ensuite vous devez ajouter les nouveaux textes, afin de pouvoir utiliser les nouvelles fonctionnalités. Ici encore, voici une liste d'entre eux:
- ExportToU3DFile(...)
- SwitchAlphaBlending(...)
- SetBoneFrame(...)
- GetDistanceToTerrain(...)
- SetCustomTerrainLightMap(...)
- GetClippingPlaneSupport()
- SwitchWireFrameMode(...)
- UpdateSkeleton()
- ReleaseModel(...)
- AddTextureCoordinateSetsFromModel(...)
- ComputeMatrixRotationAngles(...)
- GetRayTracingNormal(...)
- ScreenCoordToVector(...)
- Tout dans le groupe "Shadow and post screen shader functions":
- GetShadowSupport()
- SwitchShadows(...)
- SwitchShadowCasting(...)
- CreateShadowOptimizedGeometry(...)
- SwitchShadowReceiving(...)
- CreatePostScreenShader()
- SetPSSTexture(...)
- SetPSSVSConstant(...)
- SetPSSPSConstant(...)
- SetPSSFilter(...)
- Le portail des fonctions du moteur:
- SwitchPortalEngine(...)
- GetObjectRoom()
- GetRoomVisibility(...)
- CreatePortal(...)
- SetPortal(...)
- OpenPortal(...)
- DestroyPortal(...)
Tous ces scripts sont disponibles dans un fichier Game Maker de scripts exportés qui est fourni avec le SDK. Pour les utiliser peut mettre un certain temps pour les ajouter. Selon le fichier sur lequel vous avez basé votre travail, vous devrez peut-être ajouter GetBoneTransformation(...), car ce script était absent dans certains des fichiers Game Maker fournis avec Ultimate 3D 2.0 beta 3. Aussi, vous devez supprimer LoadAnimated3DS(), car il s'agit seulement d'un vestige désuet d'anciennes versions d'Ultimate 3D. Il ne fait rien d'autre que d'appeller LoadMesh() en tout cas. Une fois que vous avez fait toutes ces choses dans votre projet Ultimate 3D en travaillant correctement, vous pouvez commencer à utiliser les fonctionnalités de Ultimate 3D 2.0 RC.
Mise à jour d'un projet Ultimate 3D 1.31 vers Ultimate 3D 2.0 béta 1
Ultimate 3D 2.0 est un remake complet de Ultimate 3D. Il n'y a pas une seule ligne de code qui soit la même que dans Ultimate 3D 1.31. Pour cette raison, il n'a pas été possible de tout garder pour autant. Il y a un paquet de choses qui ont changé car les anciennes ne sont pas des solutions suffisamment faciles à utiliser, cela a changé car les nouvelles fonctionnalités nécessitaient d'autres changements et un paquet de choses a été enlevé pour augmenter les performances d'Ultimate 3D. Ce texte dresse la liste de toutes ces modifications et permet de donner un compte rendu détaillé étape par étape, sur la description de la façon de mettre à jour des projets de Ultimate 3D 1,31 à Ultimate 3D 2.0. Cela peut prendre une heure ou deux pour convertir votre projet.
En ce qui concerne les caractéristiques
qui font partie de la section de base d'Ultimate 3D, presque rien n'a
changé. Les seuls changements sont que des objets cubes sont
définis différemment, et que la lumière est calculée
d'une manière plus naturelle. Quelques variables ont également été
ajoutées pour les objets primitifs et LoadAnimated3DS() n'existe plus
(c'est maintenant LoadMesh()). La signification des variables rotx, roty et rotz a changé pour objets caméra et sources lumineuses. Ces variables maintenant fonctionnent
exactement de la même façon que les variables correspondantes des objets
primitifs et des modèles. Aussi, vous ne pouvez plus utiliser de vertex shaders
pour les objets primitifs, ce qui a été un changement nécessaire pour rendre
le moteur de rendu primitif beaucoup plus efficace.
La plupart des fonctionnalités dans la section avancées
n'existait pas dans Ultimate 3D 1,31 façon il n'ya pas beaucoup qui
pourraient avoir changé. Le système d'effets de particules est
entièrement nouveau et les paramètres de fonctions de ray-tracing ont
un peu changés, principalement en raison de la modification de la
signification des variables rotx et roty pour les objets caméras. Tout fonctionne de la
même façon aujourd'hui. Cela signifie qu'une valeur de 90 pour rotx ferait
regarder la caméra vers le bas. Mais intéressons-nous maintenant à la
conversion des projets.
Première étape: Remplacer et ajouter tous les scripts
Vous devez être conscient de cette partie est vraiment ennuyeuse et prendra beaucoup de temps. Mais quand vous en avez fini avec cela, votre projet sera presque prêt pour Ultimate 3D 2.0. Je recommande l'ouverture de la nouvelle BasicGM5.gmd/gm6 et votre projet Ultimate 3D 1.31 dans deux fenêtres de Game Maker et en plaçant leurs fenêtres respectives à la moitié gauche et la moitié droite de l'écran. La première chose que vous devez faire pour obtenir les nouveaux scripts dans votre projet, est de supprimer les vieux scripts suivants qui n'existent plus désormais:
- CreateParticleSystem()
- DestroyParticle(...)
- GetParticleColorR/G/B/A(...)
- GetParticleNumber(...)
- GetParticlePosX/Y/Z(...)
- GetParticleSize(...)
- GetVSSupport()
- LoadAnimated3DS()
- LoadVS(...)
- SetParticleColor(...)
- SetParticleNumber(...)
- SetParticlePos(...)
- SetParticleColorEnd(...)
- SetParticleColorStart(...)
- SetParticleSize(...)
- SetParticlesLifetime(...)
- SetParticlesMovement(...)
- SetParticlesMovementInc(...)
- SetParticlesMovementOut(...)
- SetParticleSystemBase(...)
- SetViewport(...)
- SetVS(...)
- SetVSConstant(...)
Ensuite vous devez renommer les scripts suivants au nouveaux noms donnés:
- collision_h() to CollisionH()
- collision_model() to CollisionTerrainModel()
- collision_v() to CollisionV()
- collision_z() to CollisionZ()
- GetMaterialNumber(...) to GetMaterialIndex(...)
- move(...) to Move(...)
- SetMaterialSphereMap(...) to SetMaterialEnvironmentMap(...)
- Snapshot(...) to TakeScreenshot(...)
- SnapshotEx(...) to TakeScreenshotEx(...)
Quand vous en avez fini avec ces changements, vous devriez essayer de lancer votre jeu une fois en utilisant la vieille dll de Ultimate 3D 1.31 pour voir quelle partie du programme devra être changée ou refaite. Si vous avez des systèmes de particules réalisés avec Ultimate 3D 1.31, il sera plus simple de les supprimer et de les refaire complètement. Si vous utilisez des vertex shaders pour les objets primitifs dans votre projet, vous aurez à trouver un moyen d'obtenir le même effet, sans shaders, ou vous aurez à remplacer le modèle avec des objets primitifs. Quand vous en avez fini avec, ce jeu devrait bien fonctionner.
Maintenant, la partie suivante est très ennuyeuse. Vous devez ouvrir chaque script dans le nouveau fichier BasicGM5.gmd/gm6, copier son contenu et remplacer le contenu du script correspondant dans votre projet avec ce code. Si le script ne fait pas parti de l'ancienne version de Ultimate 3D, vous devez le créer. Vous devez refaire la structure du groupe ainsi. Ce n'est pas beaucoup de travail pour le créer, mais cela permet de tout rendre un peu plus facile.
Deuxième étape: changer les objets
Lorsque vous avez terminé avec le remplacement et l'ajout de tous les scripts, vous pouvez lancer votre jeu à nouveau en utilisant la nouvelle dll, mais le résultat ne sera pas encore motivant. Vous ne verrez rien. Mais ne vous inquiétez pas, c'est assez facile à corriger. Vous avez simplement a changer les appels de fonctions qui sont effectués par le contrôle objet. En fin d'étape de l'événement (end-event-step), vous trouverez un appel à MoveCamera() et un appel à la fonction Game Maker external_call(...). Vous devez remplacer ces deux appels par l'extrait de code suivant après retrait de la déclaration si c'est au-dessus de ces appels:
external_call(global.u3d_transmit_controller_information,BG_r,BG_g,BG_b,show_cursor);
|
|---|
Dans le commencement du step event, vous devez a enlever de nouveau et si vous devez remplacer call par external_call(...) avec le texte suivant:
external_call(global.u3d_present); |
|---|
Vous avez également a remplacer le matériel détruit dans l'événement et l'event de fin de jeu avec l'extrait de code suivant:
external_call(global.u3d_cleanup); |
|---|
Quand vous en avez fini avec ces changements, vous pouvez lancer le jeu à
nouveau et il devrait y avoir certains résultats visibles. Mais certaines choses
peuvent être un peu étranges. La caméra ne se comportera probablement pas de la
manière désirée et la détection de collision ne fonctionnera pas correctement.
Cela est dû à l'évolution du sens des variables rotx, roty et rotz et des
paramètres GetDistanceToModel (...) et Move(...).
Il n'y a aucun indice où je pourrais vous aider dans ce contexte. Vous
avez simplement à rechercher les codes qui utilisent ces variables
ou fonctions et de les corriger. Dans de nombreux cas, l'ajout de ces
quelques points négatifs sera tout ce que vous avez à faire. Une autre
chose que vous avez à faire est de mettre à jour tous les objets cubes
que vous pourriez avoir. Pour voir maintenant comment ils fonctionnent,
veuillez vous référer au chapitre sur les Objets primitifs.
Il y a aussi un ensemble de très petits changements:
* control.range a
changé pour camera.max_range
* global.fall et global.speed (les variables
qui peuvent être utilisés pour faire sauter les objets caméra ou à l'automne)
ont changé en camera.falling et camera.falling_speed.
* Global.x et
global.y (les variables de sortie du GetMousePos(...)) ont changé à global.mouse_x et global.mouse_y .
* Environnement cartographie additif
travaille maintenant. Cela signifie qu'un environnement de la carte noire ne
changerait rien du tout alors qu'une carte blanche environnement fortement
égayer le tout.
* Le paramètre Alpha de DrawTex(...) prend maintenant
les valeurs comprises dans une fourchette de 0 à 255 au lieu de valeurs comprises dans la fourchette
de 0 à 1.
Quand
vous en avez fini, tout ces changements devraient fonctionner et votre
projet est prêt à l'emploi avec Ultimate 3D 2.0. S'il y a encore
des problèmes quelque part, merci de les poster sur l'Ultimate 3D
Communautaire.
Conversion d'un projet Ultimate3D de GameMaker 5.x vers GameMaker 6.x et supérieur
En raison de la baisse de compatibilité de Game Maker 6.0, vous devez mettre à jour certains scripts lorsque vous convertissez un projet d'Ultimate 3D de Game Maker 5.x à 6,0 ou supérieur. Malgré plusieurs scripts diffèrents, car la version Game Maker version 6.0 d'Ultimate 3D est faite pour travailler sans le "Traitez les variables non initialisées comme valeur 0". Celles-ci devront être remplacés par les versions correctes, aussi. Voici une liste de tous les scripts qui ont besoin d'être remplacé par les versions Game Maker 6.0 correspondantes de la BasicGM6.gm6 (resp. BasicGM7.gm7):
- MoveCamera()
- SetSoundPosition()
- Init()
- CreateWall()
- CreateFloor()
- CreateCube()
- Create2D()
- CreatePolygon()
- LightDirectional()
- LightPoint()
- LightSpot()
- LoadMesh()
- CreatePrimitiveFromModel()
- CreateEmptyMesh()
- ApplyParallaxAndBumpMapping()
- SetMaterialEffectLightSource()
- CreateTerrain()
- CalculateTerrainLightMap(...)
- CreateTerrainDecal()
- CreateParticleSystem()
- CreatePostScreenShader()
En outre, l'issue de quatre scripts doivent être ajoutés à la "Private fonctions" groupe:
- InitializePrimitiveVariables()
- InitializeLightVariables()
- InitializeVariable()
- InitializeVariableGlobal()
En dépit plusieurs codes de quelques objets ont besoin être modifiés. Les morceaux de code dans le BasicGM5.gmd ont besoin d'être modifiés pour fonctionner avec Game Maker 6.0 ou plus et font partie de l'event de room de fin du contrôle objet et du setp event de la caméra.

© Christoph Peters. Certains droits réservés. (Traduction FR 04/2008, Franck Vernel / Damien Buhl).
©2008 webmaster.



