[WIP] Moteur 3D Towanda en direct Live !
-
Merci Yomgui pour ton aide, je vais essayer de mettre ça en place dans mon moteur. Si mon moteur n’est pas conventionnel, c’est parfaitement normal, je ne m’appuie sur rien (ou pas grand chose) pour le faire. C’est plus un test pour moi, je voulais me prouver que j’en étais capable .
Si je montre le source, cela hérissera très surement le poil de nombreuses personnes ici
Abonnez-vous à ma nouvelle chronique "En Route vers le Futur" sur Youtube !
Si tu viens à l’Alchimie, j’amènerai 2 livres qui parlent de la conception d’un moteur 3D à la Wolfeinstein 3D … cela m’avait servi à créer mon 1er moteur 3D Sur Amiga 1200 ( 68060 nécessaire car pas optimisé par ma part) :p
J’obtenai avec l’aide du moteur 3D détaillé, ce genre de rendus :
(avant d’avoir supprimé l’effet fish eye :p)
Après avoir fixé l’effet fish eye, j’obtenai un truc genre :
Et après avoir amélioré le moteur (multi cases sur +ieurs hauteurs) j’obtenai ce genre de résultat :
(gestion de lumières à la louche :p , etc …)
Je dois aussi, toujours avoir le code 100% assembleur 680×0 dans un coin de mon HD si cela t’intéresse :p
@+
AmiDARK
@Amidark: Au cas ou, je l’ai encore
Par contre, Pb, j’arrive pas à lire des source amos avec un éditeur de texte, il faut obligatoirement Amos.
Au cas ou, j’ai une source d’un raycast sous hollywood, ma version est plutôt pas terrible, par contre la version de jali est excellente mais rame à mort
@Artblink : Lool
Je te l’avais envoyé ? MDR
Oui, pour l’Amos, il faut avoir l’Amos et exporter en .ASCII
J’ai l’Amos, je pourrai l’exporter si tu veux (enfin, si cela n’utilise pas de librairies externes de l’Amos que je n’aie pas installé)
Oui, je me souviens de ton prog Sympa
@ +
AmiDARK
Vi, c’était pour mon moteur 3D sous hollywood… hum… pas top mais c’était marrant. Avec la meuh meuh et le vaisseau de Mister Thellier.
Idem pour mon moteur raycast tous pourri qui fonctionnait un peux
Si c’est possible de me sortir le code Amos pour que je puisse le lire, se serais cool, mais fait seulement si t’a le temps, j’y regarderai pas maintenant.
@YomGui: , moi bidouilleur, alors impossible de sortir un truc complet en 3D, par contre, en 2D, j’trouve plein de truc, mais j’ai encore beaucoup de mal avec les IA… Si quelqu’un a des combine, c’est main’nantJe recherche des petites routines pour l’IA d’un jeu de course de voiture, des ennemies dans un jeu de plateformes,shoot, pi c’est tous, en fait je cherche plein de source sur les IA.
Coucou,
Il y a un fichier qui s’appel Motor092399d.Amos
Le A* je l’ai déjà sous hollywood, il marche bien, c’est un pathfinding qui calcule un trajet sur l’horizontale et la vertical, le pb c’est que je veux bloquer le pathfinding à 2 changement de direction, ex :
H=Horizontale
V=Verticale
H-V-H on arrête, pathfind pas bon ou
V-H-V
J’arrive pas à insérer une variable qui compte le changement de sens
Pour l’IA, j’ai pensé à une table mais bon, sa me parait trop simple, sûr qu’il y a une autre méthode
Perso, c’est se que je fais avec Tarzin, mais en se moment on a tous les 2 des projets autre que le code, d’ailleurs, on recherche tjrs des coders francophone sur hollywood
V’la le code source, sa peut aider pour d’autre langage:
; Hollywood port of the
;
; A* algorithm For LUA
; Ported To LUA by Altair
; 21 septembre 2006
;
;
; Ported to Hollywood by jalih, it took 20 mins and two beers.
;
; Bugs are mine naturally.
;
;
Function CalcMoves(mapmat, px, py, tx, ty)
Local openlist = {}
Local closedlist = {}
Local listk = 0
Local closedk = -1
Local tempH = Abs(px - tx) + Abs(py - ty)
Local tempG = 0
Local xsize = ListItems(mapmat[0]) - 1
Local ysize = ListItems(mapmat) - 1
Local curbase = {}
Local basis = 0
InsertItem(openlist, { x = px, y = py, g = 0, h = tempH, f = 0 + tempH, par = 0 } )
While listk > -1
Local lowestF = openlist[listk].f
basis = listk
For Local k = listk To 0 Step -1
If openlist[k].f < lowestF lowestF = openlist[k].f basis = k EndIf Next closedk = closedk + 1 InsertItem(closedlist, openlist[basis], closedk) curbase = closedlist[closedk] Local rightOK = True Local leftOK = True Local downOK = True Local upOK = True If closedk > -1
For k = 0 To closedk
If closedlist[k].x = curbase.x + 1 And closedlist[k].y = curbase.y Then rightOK = False
If closedlist[k].x = curbase.x - 1 And closedlist[k].y = curbase.y Then leftOK = False
If closedlist[k].x = curbase.x And closedlist[k].y = curbase.y + 1 Then downOK = False
If closedlist[k].x = curbase.x And closedlist[k].y = curbase.y - 1 Then upOK = False
Next
EndIf
If curbase.x + 1 > xsize Then rightOK = False
If curbase.x - 1 < 0 Then leftOK = False If curbase.y + 1 > ysize Then downOK = False
If curbase.y - 1 < 0 Then upOK = False If curbase.x + 1 <= xsize And mapmat[curbase.y][curbase.x + 1] <> 0 Then rightOK = False
If curbase.x - 1 >= 0 And mapmat[curbase.y][curbase.x - 1] <> 0 Then leftOK = False
If curbase.y + 1 <= ysize And mapmat[curbase.y + 1][curbase.x] <> 0 Then downOK = False
If curbase.y - 1 >= 0 And mapmat[curbase.y - 1][curbase.x] <> 0 Then upOK = False
tempG = curbase.g + 1
For Local k = 1 To listk
If rightOK And openlist[k].x = curbase.x + 1 And openlist[k].y = curbase.y And openlist[k].g > tempG
tempH = Abs((curbase.x + 1) - tx) + Abs(curbase.y - ty)
InsertItem(openlist, {x = curbase.x + 1, y = curbase.y, g = tempG, h = tempH, f = tempG + tempH, par = closedk}, k)
rightOK = False
EndIf
If leftOK And openlist[k].x = curbase.x - 1 And openlist[k].y = curbase.y And openlist[k].g > tempG
tempH = Abs((curbase.x - 1) - tx) + Abs(curbase.y - ty)
InsertItem(openlist, {x = curbase.x - 1, y = curbase.y, g = tempG, h = tempH, f = tempG + tempH, par = closedk}, k)
leftOK = False
EndIf
If downOK And openlist[k].x = curbase.x And openlist[k].y = curbase.y + 1 And openlist[k].g > tempG
tempH = Abs(curbase.x - tx) + Abs((curbase.y + 1) - ty)
InsertItem(openlist, {x = curbase.x, y = curbase.y + 1, g = tempG, h = tempH, f = tempG + tempH, par = closedk}, k)
downOK = False
EndIf
If upOK And openlist[k].x = curbase.x And openlist[k].y = curbase.y - 1 And openlist[k].g > tempG
tempH = Abs(curbase.x - tx) + Abs((curbase.y - 1) - ty)
InsertItem(openlist, {x = curbase.x, y = curbase.y - 1, g = tempG, h = tempH, f = tempG + tempH, par = closedk}, k)
upOK = False
EndIf
Next
If rightOK
listk = listk + 1
tempH = Abs((curbase.x + 1) - tx) + Abs(curbase.y - ty)
InsertItem(openlist, {x = curbase.x + 1, y = curbase.y, g = tempG, h = tempH, f = tempG + tempH, par = closedk }, listk)
EndIf
If leftOK
listk = listk + 1
tempH = Abs((curbase.x - 1) - tx) + Abs(curbase.y - ty)
InsertItem(openlist, {x = curbase.x - 1, y = curbase.y, g = tempG, h = tempH, f = tempG + tempH, par = closedk }, listk)
EndIf
If downOK
listk = listk + 1
tempH = Abs(curbase.x - tx) + Abs((curbase.y + 1)- ty)
InsertItem(openlist, {x = curbase.x, y = curbase.y + 1, g = tempG, h = tempH, f = tempG + tempH, par = closedk }, listk)
EndIf
If upOK
listk = listk + 1
tempH = Abs(curbase.x - tx) + Abs((curbase.y - 1)- ty)
InsertItem(openlist, {x = curbase.x, y = curbase.y - 1, g = tempG, h = tempH, f = tempG + tempH, par = closedk }, listk)
EndIf
RemoveItem(openlist, basis)
listk = listk - 1
If closedlist[closedk].x = tx And closedlist[closedk].y = ty Then Return(closedlist)
Wend
Return(Nil)
EndFunction
Function CalcPath(closedlist)
If closedlist = Nil Then Return(Nil)
Local path = {}
Local pathIndex = {}
Local last = ListItems(closedlist) - 1
InsertItem(pathIndex, last, 0)
Local i = 0
While pathIndex > 0
i = i + 1
InsertItem(pathIndex, closedlist[pathIndex].par, i)
Wend
For Local n = ListItems(pathIndex) - 1 To 0 Step -1
InsertItem(path, { x = closedlist[pathIndex[n]].x, y = closedlist[pathIndex[n]].y })
Next
closedlist = Nil
Return(path)
EndFunction
map = {}
map[0] = { 0, 1, 0, 0, 0 }
map[1] = { 0, 1, 0, 0, 0 }
map[2] = { 0, 1, 0, 0, 0 }
map[3] = { 0, 1, 0, 1, 0 }
map[4] = { 0, 0, 0, 1, 0 }
moves = CalcMoves(map, 0, 0, 4, 4)
path = CalcPath(moves)
If path <> Nil
For i = 0 To ListItems(path) - 1
DebugPrint("move:", "(", path.x, ",", path.y, ")")
Next
Else
DebugPrint("Sorry, no path to target")
EndIf
@Amidark:Par contre, comment sa va se passer le passage à Gallium 3D? ton outil ne fonctionnera plus?!!!
T’a des news la dessus ou on risque d’avoir plusieurs driver 3D, sa risque d’être chiant surtout quand on y connais pas grand chose (comme moi). On risque de se perdre… Lequel choisir?
En tout cas, je suis content d’avoir lancé ce petit boost à vos projets de moteur 3D ^^. Cela me donne encore plus envie de continuer le mien
Abonnez-vous à ma nouvelle chronique "En Route vers le Futur" sur Youtube !
- Vous devez être connecté pour répondre à ce sujet.
› Forums › AmigaOS, MorphOS et AROS › Développement › [WIP] Moteur 3D Towanda en direct Live !