AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 Sprites en 2D dans un monde en 3D

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Simpson55
Débutant


Messages : 11

MessageSujet: Sprites en 2D dans un monde en 3D   Sam 11 Juin 2016 - 15:27

Bonjour,

Je viens ici pour vous exposer un problème qui me tracasse depuis peu, je suis en train de créer un jeu en 3D dans lequel certains objets doivent êtres représentés par des sprites en 2D, bien sûr je pourrais simplement utiliser des surface faisant toujours face à la caméra mais dans ce cas là, la perspective ferait subir quelques déformations au sprite utilisé comme texture (agrandissement, rétrécissement, etc ...) , j'ai donc eu l'idée de convertir les coordonnés x,y,z des objets en question en coordonnés x,y pour pouvoir dessiner les sprites qui leurs sont associé à ces coordonnés, et ce en utilisant les formules
x' = x / z et y' = y / z, cette méthode marche à peu près, mon seul problème pour le moment étant le suivant, Lorsque un de ces objets se déplace, le sprite qui le représente se déplace aussi mais de façon légèrement incohérente avec le décor en 3D, je ne sais pas comment l'expliquer alors j'éspère que le schéma ci dessous peut aider.
image:
 

Je vous vous remercie d'avance!  gnii
Revenir en haut Aller en bas
Kabcorp
Utilisateur confirmé: Rang **
avatar

Messages : 315
Localisation : Savoie
Projet Actuel : trop...

MessageSujet: Re: Sprites en 2D dans un monde en 3D   Sam 11 Juin 2016 - 23:15

Hello!

Appel ce script Wink

d3d_draw_sprite()
Code:
//Call: d3d_draw_sprite(sprite,index,x,y,z,x_rot,y_rot,z_rot,x_scale,y_scale,z_scale)
d3d_transform_set_identity()
d3d_transform_set_scaling(argument8,argument9,argument10)
d3d_transform_add_rotation_x(argument5)
d3d_transform_add_rotation_y(argument6)
d3d_transform_add_rotation_z(argument7)
d3d_transform_add_translation(argument2,argument3,argument4)

draw_sprite(argument0,argument1,0,0)

d3d_transform_set_identity()

_________________
Vous voulez un jeu pas comme les autres? Voici DeFRaG :
 
Revenir en haut Aller en bas
http://kabcorp.fr
Simpson55
Débutant


Messages : 11

MessageSujet: Re: Sprites en 2D dans un monde en 3D   Dim 12 Juin 2016 - 7:10

Merci d'avoir répondu ^^

J'avais déjà essayé quelque chose dans le même style mais le soucis est que le sprite est déformé par la projection en perspective, autrement dit mettons par exemple que si l'objet est près de la caméra, 1 pixel du sprite en occupera en réalité 8 sur l'écran. voilà j'espère que c'est que c'est plus compréhensible Wink
Revenir en haut Aller en bas
Kabcorp
Utilisateur confirmé: Rang **
avatar

Messages : 315
Localisation : Savoie
Projet Actuel : trop...

MessageSujet: Re: Sprites en 2D dans un monde en 3D   Dim 12 Juin 2016 - 9:26

Tout est déformé avec un angle de vue superieur à 45°.

Tu veut que ta sprite soit affichée comme HUD?
(Comme en haut sur les côtées: https://chasmofthought.files.wordpress.com/2016/01/crash-bandicoot-3-medieval.jpg?w=680)

_________________
Vous voulez un jeu pas comme les autres? Voici DeFRaG :
 
Revenir en haut Aller en bas
http://kabcorp.fr
Simpson55
Débutant


Messages : 11

MessageSujet: Re: Sprites en 2D dans un monde en 3D   Dim 12 Juin 2016 - 10:02

Ah non afficher un hud c'est très simple seulement là je voudrais représenter un objet présent dans le monde en 3D ( et donc qui a des coordonnées x,y,z ) avec un sprite en 2D qui n'est jamais déformé par la projection, et qui n'a donc que des coordonnés x et y. Les seuls exemples qui me viennent à l'esprit sont des jeux comme F zero et Mario Kart sur SNES où les obstacles et tous les  autres objets fonctionnent  de la même façon
Revenir en haut Aller en bas
Kabcorp
Utilisateur confirmé: Rang **
avatar

Messages : 315
Localisation : Savoie
Projet Actuel : trop...

MessageSujet: Re: Sprites en 2D dans un monde en 3D   Dim 12 Juin 2016 - 10:17

Il faut dessiner la sprite et simuler sa position dans un faux espace 3D...

J'ai déjà éssayé mais ça ma vite gonflé =/

Attend un peut et peut-être que tu auras ta réponse via un autre utilisateur =)

_________________
Vous voulez un jeu pas comme les autres? Voici DeFRaG :
 
Revenir en haut Aller en bas
http://kabcorp.fr
Simpson55
Débutant


Messages : 11

MessageSujet: Re: Sprites en 2D dans un monde en 3D   Dim 12 Juin 2016 - 10:40

à vrai dire ça j'avais déjà réussi à le faire, comme je l'avais dit dans mon premier post avec une formule du genre
x2d = ( x3d / y3d ) * échelleX
y2d = ( z3d / y3d ) * échelleY
J'ai eu de très bons résultats en bidouillant un peu les variables échelleX et échelleY à peu près égales à la longueur et à la largeur de l'écran respectivement mais je préfère ne pas compter sur les approximations.
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8926
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: Sprites en 2D dans un monde en 3D   Dim 12 Juin 2016 - 11:01

T'as un exemple officiel GameMaker avec un petit Doom, et comme dans doom les sprites sont en 2d et suivent bien la caméra, ça devrait t'aider.
Cherche doom game maker sur google tu devrais trouver ton bonheur.

_________________
                 
Revenir en haut Aller en bas
Simpson55
Débutant


Messages : 11

MessageSujet: Re: Sprites en 2D dans un monde en 3D   Dim 12 Juin 2016 - 11:18

Je n'ai trouvé que des liens morts triste2 mais merci quand même ^^"
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8926
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: Sprites en 2D dans un monde en 3D   Dim 12 Juin 2016 - 12:02

Effectivement c'est devenu la mort les exemples GM depuis GMS...
C'est stupide c'était 90% de l'interet de GM qu'y ai autant d'exemples, maintenant y a plus que de la daube.

Bref après pas mal de recherches j'ai réussi a choper l'exemple: http://wyvup.com/?c=A2rzir3

_________________
                 
Revenir en haut Aller en bas
Simpson55
Débutant


Messages : 11

MessageSujet: Re: Sprites en 2D dans un monde en 3D   Dim 12 Juin 2016 - 12:57

Merci d'avoir trouvé l'exemple mais je crains que ça ne soit pas ce que je cherches Embarassed
Ce jeu utilise la fonction d3d_draw_wall pour dessiner les ennemis, c'est justement ce que j'essaie d'éviter à tout prix.
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8926
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: Sprites en 2D dans un monde en 3D   Dim 12 Juin 2016 - 14:16

Je comprend pas le soucis d'utiliser d3d_draw_wall, en gros tu veux que le sprite soit toujours en scale x1? Oubien t'as un soucis avec l'interpolation des pixels? (chose qui peut être désactivée en principe).

_________________
                 
Revenir en haut Aller en bas
Simpson55
Débutant


Messages : 11

MessageSujet: Re: Sprites en 2D dans un monde en 3D   Dim 12 Juin 2016 - 14:20

Oui c'est bien pour garder le sprite à taille réel Smile
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8926
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: Sprites en 2D dans un monde en 3D   Dim 12 Juin 2016 - 14:22

Mais tu peux pas juste changer la taille du "wall" en fonction de la distance a la camera?

_________________
                 
Revenir en haut Aller en bas
Simpson55
Débutant


Messages : 11

MessageSujet: Re: Sprites en 2D dans un monde en 3D   Dim 12 Juin 2016 - 14:31

J'y ai pensé mais quelle serait la relation à calculer ?
et puis les côtés du mur dessiné seraient plus ou moins verticaux selon leur position par rapport à la caméra
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8926
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: Sprites en 2D dans un monde en 3D   Dim 12 Juin 2016 - 14:34

Dans l'exemple du fps j'ai essayé de faire:
Code:
texture_set_interpolation(false)
tex = sprite_get_texture(tex_barrel,image_index)
r = point_distance(x, y, obi_player.x, obi_player.y)/32
d3d_draw_wall(x-r*global.camsin,y-r*global.camcos,r*2,
              x+r*global.camsin,y+r*global.camcos,0,tex,1,1)

Le soucis c'est que ça scintille, peut être parce que j'ai pas réglé le z en fonction de la distance a la caméra.

_________________
                 
Revenir en haut Aller en bas
Simpson55
Débutant


Messages : 11

MessageSujet: Re: Sprites en 2D dans un monde en 3D   Dim 12 Juin 2016 - 14:47

En ce qui me concerne ce code semble bien marcher, bon il y a encore quelques défauts de déformation mais je pense pouvoir faire avec, merci en tout cas gnii
Revenir en haut Aller en bas
glcraft
Utilisateur confirmé: Rang *****
avatar

Messages : 1698
Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P
Projet Actuel : Jeu de survie avancé
||--------

MessageSujet: Re: Sprites en 2D dans un monde en 3D   Mar 14 Juin 2016 - 14:00

s'il existait des matrices dans game maker, la question se poserait meme pas. Un simple calcul de matrice inverse et ce serait réglé.
Revenir en haut Aller en bas
http://gameblog49.skyblog.com/
onilink_
Modérateur
avatar

Messages : 8926
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: Sprites en 2D dans un monde en 3D   Mar 14 Juin 2016 - 15:39

Bah tu peux faire des matrices avec des ds_grid, mais faut écrire les fonctions de transformation a la mano.
J'imagine que ça existe déjà quand même.

_________________
                 
Revenir en haut Aller en bas
glcraft
Utilisateur confirmé: Rang *****
avatar

Messages : 1698
Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P
Projet Actuel : Jeu de survie avancé
||--------

MessageSujet: Re: Sprites en 2D dans un monde en 3D   Mer 15 Juin 2016 - 7:18

J'avais fait une bibliothèque de script de matrice qui fonctionnait pas mal et qui fonctionnait conjointement avec la 3D de Game Maker, mais je n'arrive plus a remettre la main dessus. Faudrait que je la refasse :3
(Encore faudrait-il aussi que j'ai encore acces a la 3D de Game Maker. Je ne pense pas avoir une version compatible avec.)
Revenir en haut Aller en bas
http://gameblog49.skyblog.com/
Simpson55
Débutant


Messages : 11

MessageSujet: Re: Sprites en 2D dans un monde en 3D   Mer 15 Juin 2016 - 8:31

il n'y a aucun moyen de faire sans matrice?
Revenir en haut Aller en bas
Simpson55
Débutant


Messages : 11

MessageSujet: Re: Sprites en 2D dans un monde en 3D   Jeu 16 Juin 2016 - 12:58

J'ai bien trouvé une solution différente qui fonctionne mais qui est extrêmement lente et donc qui perd tout intérêt, j'avoues que ça me désespère...
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: Sprites en 2D dans un monde en 3D   

Revenir en haut Aller en bas
 
Sprites en 2D dans un monde en 3D
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Le portage dans le monde
» 91 % des crimes d’honneur dans le monde sont commis par des musulmans
» Dans mon monde à moi, y a que des poneys [LGee G5]
» Les différentes formes d'immatriculation dans le monde
» L'engagement militaire français dans le monde

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Entraide confirmés-
Sauter vers: