30

>kevin... je pense bien que ton algo est faux...

Peut-être qu'il ne rend pas bien optiquement (je n'ai pas essayé), mais il répond aux conditions du problème.

Il est possible qu'on peut trouver des algorithmes "meilleurs" (qui rendent mieux optiquement).

Il existe une infinité de possibilités pour "étirer" l'intérieur d'un quadrilatère quelconque en celui d'un autre quadrilatère quelconque.

On peut par exemple remplacer le centre du quadrilatère par n'importe quel autre point dans ma fonction f. On n'aura plus qC=qC'=pi, mais la définition de f ne le suppose nulle part.

On peut aussi remplacer l'interpolation affine par quelque chose de totalement différent.

On peut aussi trouver des algorithmes totalement différents.
[edit]Edité par Kevin Kofler le 30-06-2001 à 18:23:39[/edit]
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

31

je sais pas.. ptere que je ne l'ai pas compris...

32

Suffit de faire ligne par ligne:
Prenons ABCD le quadrilatère quelconque.
On trace AB...jusqu'à DC ligne par ligne. Chaque ligne correspond à une ligne bien précise du sprite. La ligne doit être tracée point par point, de la même façon que l'on déplace la ligne AB->DC mais c'est un point A->B jusqu'à D->C. La ligne courante se trouve de la même façon que le point courant, et facilement.
Ca marche, je l'ai fait en basic, et ca étire bien comme demandé.

33

encore bravo Kevin !
t'as eu une mention ? (jcrois ke oui).

grin
Fiou.

34

oui, mais pour ce cas là, c'est dur d'en avoir une !
:D

35

ah je me suis planté de truc !
oubliez ce que je viens de dire !
:D

36

Pour en revenir au sujet, c'est ce que l'on appelle "affine texture mapping"... cherche un peu sur le net, il y a plein de tutoriaux la dessus. La plupart se baseront sur des triangles, mais le principe est facile à étendre aux quadrilateres.
So much code to write, so little time.

37

>[Pollux]: je viens je juste de voir un truc "un quadrilatère convexe (=non croisé)" : non, un quadrilatère non croisé peut être non convexe

Oui, tu as raison Pollux. Désolé pour l'erreur. Je corrige.

Mise à jour: c'est corrigé.
[edit]Edité par Kevin Kofler le 02-07-2001 à 00:13:32[/edit]
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

38

J'ai compris quand-même. D'ailleurs, ton exemple m'a l'air d'être un pentagone. Un quadrilatère concave non croisé serait constitué de 2 "V" de taille différente.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

39

pre deconne..
il faut editer le post et rajouter les espaces.. roll

40

meme &nbsp marche pas
[edit]Edité par Paxal le 02-07-2001 à 08:42:26[/edit]
Cours et tutos Asm: http://membres.lycos.fr/sirryl

41

Moi je vais vous dire: le BAC, pour vous (Kevin et JS), c'est une étape de merde, leurs exos sont nuls à chier et sur 2 ans c'est toujours les mêmes (sauf les pb, c'est toujours la même chose).
Alors vus vos moyennes, allez faire une Maths Sup, Maths Spé, et quand vous aurez 19 pour JS et 20 pour Kevin aux épreuves de Maths de l'X et des ENS on en reparlera... tout ca pour dire que le BAC, ça n'est pas une référence: il suffit de bosser.
Cours et tutos Asm: http://membres.lycos.fr/sirryl

42

tu te tapes pas forcément des sales notes en prépa, moi j'avais une bonne moyenne Maths/PC en Sup, mais en Spé ca se gate et comme je ne me suis jamais mis à bosser, les notes sont descendue sad.
Moi il me manque 2pts à l'X pour avoir le 16 que g eu au bac... peut etre l'année prochaine smile
Cours et tutos Asm: http://membres.lycos.fr/sirryl

43

19/2 ?? :-)
(pitié, ze veux pas que ça m'arrive)

44

Il faut bosser pour avoir 19 au BAC ?
Ah bon gringringrin

45

oulala, bon, jsuis parti le week-end à la montagne là où j'ai pas internet, et quand je reviens, mon topic a explosé...

bon, déjà,
Kevin>dans mon cas, la routine de texturage doit se faire au minimum plusieurs centaines, voire milliers de fois par seconde, et elle n'est pas toute seule dans le prog... donc je sais pas si ton système peut être assez rapide...
Nitro> oui, c bien du texture mapping que je parlais (je crois que c l'un des seuls ki a comprisgrin , je rigole, bien sûr...)

bon, g trouvé comment faire, g implémenté ça en ti-basic, mais c mortel comme ça rame... je me demande même si c la peine que je me casse le c.. à passer ça en asm...
sinon, ça marche impec... mais c Leeeeeennnnnntttt....embarrassed

je vais de ce pas faire des captures d'écran et je vous les balance, ainsi que la source en basic du prog, pour ceux que ça intéresse...grin

sinon, vite fait, voila ce que fait mon prog:
-recherche de la hauteur du polygone
-pour chaque y de cette hauteur, enregistre chaque coordonnée x des deux lignes (marche que pour les polys convexes...)
-enregistre les coordonnées U et V correspondantes de la texture dans ce même tableau, en fonction de y

-dessine des "scanlines" en interpolant les coords U et V de la texture entre les deux bornes X0 et X1 stockées dans le tableau précédent...

c pas clair? attendez, je balance la source dans un pitit moment...tongue
si qqun a une idée d'un algo RAPIDE, ce seraitcool
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

46

De toute façon, pour du "texture mapping", ma solution serait beaucoup trop loin de la perspective exacte.

Dans le cas le plus simple, le "texture mapping" se fait rectangle -> trapèze, le trapèze étant le rectangle vu en perspective. Tu prends une hauteur du trapèze comme axe des abscisses, le pied sur une des bases comme origine et la distance entre les 2 pieds comme unité. Tu fais la même chose avec le rectangle. (Choisis la hauteur que tu veux projeter sur celle du trapèze.)
Alors, x'=x, et pour l'ordonnée, ce sera une fonction affine différente pour chaque abscisse, qui sera définie de manière à remplir toute la verticale du trapèze au point d'abscisse x sans sortir du trapèze.

Tu devrais te limiter à cela si c'est possible plutôt que d'utiliser des quadrilatères quelconques.
[edit]Edité par Kevin Kofler le 02-07-2001 à 22:09:44[/edit]
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

47

K: apparement mes reflexions ne t'ont pas inspiré.
Cours et tutos Asm: http://membres.lycos.fr/sirryl

48

Je n'ai parlé du 20 au BAC que pour expliquer pourquoi j'arrivais à faire tant de Mathématiques aussi rapidement, mais là, je voudrais bien revenir au sujet.

Et puis, à propos du "suffit de bosser": je n'ai pas travaillé beaucoup pour avoir mon 20.
[edit]Edité par Kevin Kofler le 02-07-2001 à 22:15:17[/edit]
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

49

oki, bon, voilà les captures:
001.gif
002.gif
003.gif
004.gif
005.gif
et le prog qui les fait:
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

50

ya qques couilles visibles sur les img (comme la 5)
img2> test de clipping

SOURCE:
main_file:
fillpoly.9xp
fillpoly(xb0,yb0,xb1,yb1,xb2,yb2,xb3,yb3,utiling,vtiling,mapwidth,mapheigh)
Prgm
mapwidth
mapheigh
setGraph("axes","off")
ClrGraph
ClrDraw
newMat(102,6)->polymap

[[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]
[1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1]
[1,0,0,0,1,1,0,0,0,0,1,1,0,0,0,1]
[1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1]
[1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1]
[1,0,1,0,0,1,1,0,0,1,1,0,0,1,0,1]
[1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1]
[1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1]
[1,0,1,0,1,0,0,0,0,0,0,1,0,1,0,1]
[1,0,0,1,0,1,0,0,0,0,1,0,1,0,0,1]
[1,0,0,1,0,0,1,1,1,1,0,0,1,0,0,1]
[1,0,0,0,1,1,0,0,0,0,1,1,0,0,0,1]
[1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1]
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]]->texture

4096->top
-4096->bot
If yb0<top:yb0->top
If yb1<top:yb1->top
If yb2<top:yb2->top
If yb3<top:yb3->top

If yb0>bot:yb0->bot
If yb1>bot:yb1->bot
If yb2>bot:yb2->bot
If yb3>bot:yb3->bot

bot-top->height
If height=0:Goto fin
top-1->top
yb0-top->yb0
yb1-top->yb1
yb2-top->yb2
yb3-top->yb3
(mapwidth-1)*utiling->utile
(mapheigh-1)*vtiling->vtile

drawedge(xb0,yb0,xb1,yb1,1,1,1,30)
drawedge(xb1,yb1,xb2,yb2,1,30,30,30)
drawedge(xb2,yb2,xb3,yb3,30,30,30,1)
drawedge(xb3,yb3,xb0,yb0,30,1,1,1)

1->yloop

PxlLine 50,200,50,216
PxlLine 50,216,66,216
PxlLine 66,216,66,200
PxlLine 66,200,50,200

While yloop<height
 If polymap[yloop,3]!=0 Then
 If polymap[yloop,4]!=0 Then
 drawfrun(yloop+top,polymap[yloop,1],polymap[yloop,2],polymap[yloop,3],polymap[yloop,4],polymap[yloop,5],polymap[yloop,6],16,16)
 EndIf
 EndIf
 yloop+1->yloop
EndWhile
PxlText "SORTING ENDED",35,80
Pause 
Lbl fin
DispHome
EndPrgm


SUB_ROUTINE:
drawedge.9xp:

drawedge(xa0,ya0,xa1,ya1,ua0,ua1,va0,va1)
prgm

 If xa0>xa1 Then
 xa0->temp
 xa1->xa0
 temp->xa1
 ya0->temp
 ya1->ya0
 temp->ya1
 ua0->temp
 ua1->ua0
 temp->ua1
 va0->temp
 va1->va0
 temp->va1
 EndIf

 xa1-xa0->dx
 ya1-ya0->dy

 abs(dx)->udx
 abs(dy)->udy
 If dy<0 Then
 PxlText "<0",8,80
 -1->yadd
 Else
 PxlText " ",8,80
 1->yadd
 EndIf
 PxlText string(yadd)&" ",8,100
 0->error
 0->loops
 If udx>udy Then
 (ua1-ua0)*256/udx»uadd
 (va1-va0)*256/udx»vadd
 ua0*256->u
 va0*256->v
 udx->maxi
 If polymap[ya0,1]=0 Then
 xa0->polymap[ya0,1]
 ua0->polymap[ya0,3]
 va0->polymap[ya0,5]
 Else
 If polymap[ya0,2]=0 and polymap[ya0,1]?xa0 Then
 xa0->polymap[ya0,2]
 ua0->polymap[ya0,4]
 va0->polymap[ya0,6]
 EndIf
 EndIf
 While loops<maxi
 error+udy->error
 u+uadd->u
 v+vadd->v
 loops+1->loops
 xa0+1->xa0
 If error>=udx Then
 ya0+yadd->ya0
 error-udx»error
 If polymap[ya0,1]=0 Then
 xa0->polymap[ya0,1]
 int(u)->polymap[ya0,3]
 int(v)->polymap[ya0,5]
 Else
 If polymap[ya0,1]!=xa0 Then
 xa0->polymap[ya0,2]
 int(u)->polymap[ya0,4]
 int(v)->polymap[ya0,6]
 EndIf
 EndIf
 EndIf
 If ya0+top>=0 and xa0>=0
 PxlOn ya0+top,xa0
 EndWhile
 Else
 If udx<udy Then
 (ua1-ua0)*256/udy->uadd
 (va1-va0)*256/udy->vadd
 ua0*256->u
 va0*256->v
 udy->maxi
 While loops<maxi
 If polymap[ya0,1]=0 Then
 xa0->polymap[ya0,1]
 int(u)->polymap[ya0,3]
 int(v)->polymap[ya0,5]
 Else
 If polymap[ya0,1]!=xa0 Then
 xa0->polymap[ya0,2]
 int(u)->polymap[ya0,4]
 int(v)->polymap[ya0,6]
 EndIf
 EndIf
 ya0+yadd->ya0
 error+udx->error
 If error>=udy Then
 error-udy->error
 xa0+1->xa0
 EndIf
 loops+1->loops
 u+uadd->u
 v+vadd->v
 If ya0+top>=0 and xa0>=0
 PxlOn ya0+top,xa0
 EndWhile
 Else
 (ua1-ua0)*256/udy->uadd
 (va1-va0)*256/udy->vadd
 ua0*256->u
 va0*256->v
 udy->maxi
 While loops<maxi
 If polymap[ya0,1]=0 Then
 xa0->polymap[ya0,1]
 int(u)->polymap[ya0,3]
 int(v)->polymap[ya0,5]
 Else
 If polymap[ya0,1]!=xa0 Then
 xa0->polymap[ya0,2]
 int(u)->polymap[ya0,4]
 int(v)->polymap[ya0,6]
 EndIf
 EndIf
 ya0+yadd->ya0
 xa0+1->xa0
 loops+1->loops
 u+uadd->u
 v+vadd->v
 If ya0+top>=0 and xa0>=0
 PxlOn ya0+top,xa0
 EndWhile
 EndIf
 EndIf
endprgm


TEXTURE_FILLER:
DRAWFRUN:

drawfrun(yt,xt0,xt1,ut0,ut1,vt0,vt1,twidth,theight)
Prgm
 0->loopz

 If xt0>xt1 or xt0<0 Then
 xt0->temp
 xt1->xt0
 temp->xt1
 ut0->temp
 ut1->ut0
 temp->ut1
 vt0->temp
 vt1->vt0
 temp->vt1
 EndIf

 xt1-xt0->length
 ut1-ut0->du
 vt1-vt0->dv
 du*256/length->uadd
 dv*256/length->vadd
 ut0*256->u
 vt0*256->v
 0->loopz

 While loopz<length
 loopz+1->loopz
 u+uadd->u
 v+vadd->v

 If u<0:twidth->u
 If v<0:theight->v
 If u>twidth:1->u
 If v>theight:1->v

 If texture[int(v/65536)+1,int(u/65536)+1]=1 Then
 If yt>0 and xt0+loopz>0
 PxlOn yt,loopz+xt0
 EndIf

 PxlText string(uadd)&" "&string(vadd),80,50
 PxlText string(twidth)&" "&string(theight),80,10
 PxlText "TEXTURE "&string(int(v*16/65536)+int(u/65536)+1)&" ",8,150
 PxlText "v "&string(int(v))&" ",16,150
 PxlText "u "&string(int(u))&" ",24,150
 PxlChg 50+int(v/65536),200+int(u/65536)
 EndWhile
EndPrgm

[edit]Edité par SbiBI le 02-07-2001 à 22:38:14[/edit]
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

51

Kevin>ça, ça aurait été + commode, de se limiter à 2 côtés //, donc à un trapèze, mais malheureusement, c pas possible...

g essayé d'intégrer la routine d'interpolation à celle de calcul des coordonnées X (drawedge) mais g plein de bugs et ya tout qui part en couille, je verrai ça demain, je v dormir...

et demain, les résultats du...bang
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

52

c tres bô tout ça smile
tu as des url à recommander la dessus ?

53

Je suis d'accord avec toi pen²
Cours et tutos Asm: http://membres.lycos.fr/sirryl

54

sur koi, sur le texture mapping?
yen a un qui est vachement bien, c'est...
attends, faut que je retrouve l'addresse
[edit]Edité par SbiBI le 03-07-2001 à 10:56:54[/edit]
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

55

ha! attends, je viens d'en trouver un super!!!
http://www.geocities.com/SiliconValley/2151/tmap.html
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

56

Merci.
j'en ai aussi trouvé.
je les poste tout à l'heure smile

57

a ben je l'av deja cette page.

58

ah! ça y est, g retrouvé le site d'où g pris l'algo du texture mappingsmile

Exaflop! the programmers resource

http://www.exaflop.org

[edit]Edité par SbiBI le 03-07-2001 à 12:19:54[/edit]
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

59

In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

60

là où il faudrait regarder, dans les trucs de temps réel...

bon, je retourne bosser dessus...
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina