tracer une droite en mode video 13h

tracer une droite en mode video 13h - ASM - Programmation

Marsh Posté le 17-01-2006 à 00:21:00    

s'il vous plait ,y a quelqu'un qui peut m'aider en me donnant un programme en asm,qui trace un segment d'une droite en mode video 13h,quelle que soit la pente de cette droite,
pleeeeeeeeeeaaaaaaaase,c'est urgent, et j'ai vraiment besoin d'une reponse

Reply

Marsh Posté le 17-01-2006 à 00:21:00   

Reply

Marsh Posté le 17-01-2006 à 01:03:29    

C'est urgent de tracer des droites en assembleur à une heure du matin ?  [:pingouino]

Reply

Marsh Posté le 17-01-2006 à 10:05:42    

penche toi sur l'algo de tracé de droites de bresenham ... il est simple à comprendre et très performant tu devrais trouver tout ca facilement sur google

Reply

Marsh Posté le 17-01-2006 à 11:21:18    

sinon sans bresenham, tu fais de la virgule fixe 16:16, et tu itères bêtement sur l'axe où la droite a la plus de delta.
 
deltaX=X1-X0
deltaY=Y1-Y0
 
si deltaX>deltaY
    gradient=deltaY/deltaX
    Y=Y0
    pour X de X0 à X1
        trace (X,Y)
        Y+=gradient
    fin pour
sinon
   gradient=deltaX/deltaY
   X=X0
   pour Y de Y0 à Y1
        trace(X,Y)
        X+=gradient
   fin pour
fin si
 
tu codes ça d'abord en C en virgule flottante (avec des float pour gradient et X & Y qui sont interpolés), tu vérifies que ça marche comme ça devrait (en faisant tourner les extrémitées de la ligne autour du centre de l'écran), et ensuite tu commençes le codage en asm, et si tu veux que je t'expliques comment faire de la virgule fixe 16:16, je te filerai  de l'aide.

Reply

Marsh Posté le 17-01-2006 à 11:38:07    

bjone a écrit :

sinon sans bresenham, tu fais de la virgule fixe 16:16, et tu itères bêtement sur l'axe où la droite a la plus de delta.
 
...
 
tu codes ça d'abord en C en virgule flottante (avec des float pour gradient et X & Y qui sont interpolés), tu vérifies que ça marche comme ça devrait (en faisant tourner les extrémitées de la ligne autour du centre de l'écran), et ensuite tu commençes le codage en asm, et si tu veux que je t'expliques comment faire de la virgule fixe 16:16, je te filerai  de l'aide.


 
Sérieusement, ce sera plus compliqué que de faire directement l'algo de bresenham tant celui-ci est simple, hein [:dawa]

Reply

Marsh Posté le 17-01-2006 à 11:48:24    

simple pas spécialement, l'interpolation linéaire est le plus intuitif c'est le premier truc que l'on apprends à l'école.
de plus c'est certainement le plus rapide des 2, le nombre d'instruction par pixel est plus réduit, et un seul branchement...
 
et pour paramétrer d'autres grandeur sur ta ligne (couleur) bresenham me semble moins indiqué (en fait j'ai jamais essayé :D).
 
ceci dit, le mieux est de faire les deux. (bresenham & interpolation linéaire en virgule fixe).
 
c'est assez marrant quand j'étais en bts, le prof ne pensait pas que c'était possible de traçer une ligne sans bresenham "mais si monsieur, vous prenez un cpu 32bits, vous faites de la virgule fixe" - "ça se saurait" :D
bref travailler sur des cpus 16bits ça laisse des traçes :D

Reply

Marsh Posté le 17-01-2006 à 11:50:44    

les lignes epaisse de plus (ou de moins )d'un pixel , c'est la merde a tracer correctement [:el g] a l'epoque je les extrudais et les passait au poly filler, pas super rapide mais le rendu tabaissait. D'ailleurs jcrois meme que j'avais degagé bresenham & consort au bénéfice de cette methode (gupta sproul ou jsaipu quoi :d)


Message édité par chrisbk le 17-01-2006 à 11:52:52
Reply

Marsh Posté le 17-01-2006 à 11:54:28    

bjone a écrit :

bref travailler sur des cpus 16bits ça laisse des traçes :D


 
.... Carrément [:ddr555]

Reply

Marsh Posté le 17-01-2006 à 13:25:01    

je vais essayer de faire le programme en c,et puis je ferai la conversion en asm,car j'ai essayé de plusieurs manières de le faire en asm,mais ça pas marché

Reply

Marsh Posté le 17-01-2006 à 13:51:41    

quelle est la fonction arrondir en asm,qui sert à remplacer un réél par l'entier le plus proche de lui,qqun peut me la donner en asm?

Reply

Marsh Posté le 17-01-2006 à 13:51:41   

Reply

Marsh Posté le 17-01-2006 à 13:53:20    

fistp

Reply

Marsh Posté le 17-01-2006 à 13:56:26    

enfin je sais pas quel genre d'arrondi ca fait, cela dit, je crois que ca tronque

Reply

Marsh Posté le 17-01-2006 à 13:58:14    

ingainga a écrit :

quelle est la fonction arrondir en asm,qui sert à remplacer un réél par l'entier le plus proche de lui,qqun peut me la donner en asm?


y'a pas de fonction en asm, que des mnémoniques :o


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 17-01-2006 à 13:58:53    

ta mere [:le kneu]

Reply

Marsh Posté le 17-01-2006 à 14:00:34    

heuuu si tu fais de l'asm tu utilises pas de la virgule flottante pour une boucle de traçage de ligne [:le kneu]

Reply

Marsh Posté le 17-01-2006 à 14:02:20    

Reply

Marsh Posté le 17-01-2006 à 14:06:53    

bien sur que j'utilise pas des flottants pour tracer,c'est pour cela que j'ai besoin de la procedure arrondir,car les extrémités sont des flottants,voilà

Reply

Marsh Posté le 17-01-2006 à 14:08:29    

bin :  
 
fld monFlottant
fistp monEntier

Reply

Marsh Posté le 17-01-2006 à 14:09:47    

bordel, mais code en virgule fixe [:pingouino]
http://forum.hardware.fr/hardwaref [...] tm#t537664


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 17-01-2006 à 14:12:20    


 
oui ma pas tout de suite, je veux qu'il code monde pseudo-code, qu'il en trouves les restrictions et qu'il comprenne pourquoi...
le tout en C en float, après on verra pour l'opti en virgue fixe...
 
et aussi il faut qu'il code la version bresenham si il veux pouvoir avoir vu de multiples compromis....

Reply

Marsh Posté le 17-01-2006 à 14:18:42    


t'as suivi des cours à l'IUP de Besançon ? [:petrus75]

Reply

Marsh Posté le 17-01-2006 à 14:19:12    

le comic sans MS, veritable marque de fabrique [:el g]

Reply

Marsh Posté le 17-01-2006 à 14:42:08    

En parlant de tout ces algos, est ce que quelq'un connait le nom d'une librairie permettant de rendre directement les primitives de base (ligne ,cercle, ellispse, ...) dans un buffer  
 
j'ai besoin de qqch davance qd mm car jai besoin de degrades, transparence,... etc  
 
pour linstant je fait ca en opengl mais c loin d'etre tres precis (le rendu change dune carte a lautre) sans parler de l'antialising qui foire a chaque fois.
 
lideal serait de trouver une version software d'opengl32.dll mais jai pa encore qq chose du genre :/
 

Reply

Marsh Posté le 17-01-2006 à 14:45:07    

gdi ? [:el g]

Reply

Marsh Posté le 17-01-2006 à 14:47:21    

le gdi c
 
-Lent (bon ici on s'en fou un peu sachant que pas pour du temps reel )
-Imprecis (Textout ne donne pas les meme resultats suivant les parametres utilisateurs)
-Compliqué pour faire pas grand chose(api microsoft powa)


Message édité par red faction le 17-01-2006 à 14:49:15
Reply

Marsh Posté le 17-01-2006 à 14:49:11    

gdi+ ? [:el g]

Reply

Marsh Posté le 17-01-2006 à 15:09:57    

red faction a écrit :


lideal serait de trouver une version software d'opengl32.dll mais jai pa encore qq chose du genre :/


 
tu prends un PC, t'achète une S3 virge sans opengl, et tu seras sur le driver opengl software de microsoft.

Reply

Marsh Posté le 17-01-2006 à 19:30:27    

aidez -moiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
le programme de traçage d'un segment d'une droite

Reply

Marsh Posté le 17-01-2006 à 19:30:57    

oui ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 17-01-2006 à 19:41:53    

siphon

Reply

Marsh Posté le 17-01-2006 à 20:13:25    

je veux un programme qui trace une droite en mode video,s'il vous plait

Reply

Marsh Posté le 17-01-2006 à 20:20:19    

ingainga a écrit :

je veux un programme qui trace une droite en mode video,s'il vous plait


 
c'est dommage, on ne te le fera pas ici  [:jagstang]  
 
cependant, si tu tentes de te mettre à la tâche en suivant les indications qu'on t'a données plus haut et que tu rencontres des problèmes, alors nous nous ferons tous un plaisir de t'aider à les surmonter

Reply

Marsh Posté le 17-01-2006 à 20:42:08    

en fait,j'ai essayé de le faire,mais j'ai eu des erreurs dans le programme,par exemple:illegal use of registr,ou bien :improper operand type,
alors.

Reply

Marsh Posté le 17-01-2006 à 20:48:48    

alors poste ton code qu'on regarde

Reply

Marsh Posté le 17-01-2006 à 20:57:39    

Code :
  1. pile segment stack
  2.     dw 100h dup (?)
  3. pile ends
  4.  
  5. data segment
  6.     x1 dw ?
  7.     x2 dw ?
  8.     y1 dw ?
  9.     y2 dw ?
  10.     sx dd ?
  11.     sy dd ?
  12.     msg1 db 'donner la valeur de x1:',10,13
  13.     msg2 db 'donner la valeur de x2:',10,13
  14.     msg3 db 'donner la valeur de y1:',10,13
  15.     msg4 db 'donner la valeur de y2:',10,13
  16.     x dw ?
  17.     y dw ?
  18.     m dw ?
  19.     c320 dw 320
  20.    
  21. data ends
  22.  
  23. code segment
  24.     assume cs:code,ds:data
  25.  
  26. allume  proc
  27.        mov ax,0a000h
  28.        mov es,ax
  29.        mov ax,di
  30.        mul c320
  31.        add ax,si
  32.        mov cx,1
  33.        mov bx,ax
  34.        mov byte ptr es:[bx],25
  35.        ret
  36. allume endp
  37.  
  38. arrondir1 proc
  39.          finit
  40.          fld y                      ;36
  41.          fistp
  42.          ret
  43. arrondir1 endp
  44.  
  45. arrondir2 proc
  46.          fld x
  47.          fistp x
  48.          ret
  49. arrondir2 endp
  50.  
  51. deb: mov ax,data
  52.     mov ds,ax
  53.  
  54.     lea dx,x1
  55.     lea dx,x2
  56.     lea dx,y1               ;52
  57.     lea dx,y2
  58.     int 21h
  59.  
  60.     finit
  61.     fld y2
  62.     fsub y1
  63.     fstp sy
  64.     fld x2    ;60          
  65.     fsub x1
  66.     fstp sx
  67.     fdiv sy,sx
  68.     fstp m
  69.  
  70.     fcmp m,1
  71.     jnz etq1
  72.     jmp etq2
  73.  
  74.      mov si,x1     ;70  
  75.      mov di,y1
  76. etq1: inc si
  77.      fadd di,m
  78.      call arrondir1
  79.      mov di,y
  80.      call allume
  81.      loop etq1
  82.      cmp si,x2
  83.      jle etq1
  84.  
  85. etq2: inc di
  86.      fadd si,1
  87.      fdiv si,m
  88.      fstp si
  89.      call arrondir2
  90.      mov si,x
  91.      call allume
  92.      loop etq2
  93.      fcomp y2    ;89
  94.      jle etq2
  95.  
  96.      cmp m,-1
  97.      jle etq2
  98.      jmp etq1
  99.  
  100.      mov ah,4ch
  101.      int 21h
  102. code ends
  103.     end deb


peut etre tu trouves ceci bête,mais je suis encore debutante en assembleur


Message édité par Harkonnen le 18-01-2006 à 20:36:24
Reply

Marsh Posté le 17-01-2006 à 21:14:01    

j'attend vos reponses

Reply

Marsh Posté le 17-01-2006 à 21:52:15    

Après faut réfléchir si tu veux de l'anti-alias ou non, ça change tout le code
 
:ange:
 
Nan, j'dit ça parceque j'ai un pote qui s'était amusé à faire ça pendant qu'on galérait à afficher des lignes verticales et horizontales quand j'étais étudiant :D

Reply

Marsh Posté le 17-01-2006 à 21:53:29    

galerer a afficher des lignes verticales et horizontales ? vous codiez bourré ?

Reply

Marsh Posté le 17-01-2006 à 21:54:24    

t'as un fistp qui a pas d'op de destination ?
 
pis c'est quoi cet asm d'avant guerre ? [:totoz]

Reply

Marsh Posté le 17-01-2006 à 21:57:25    

Désolé je ne te serai d'aucune en asm
je compati et ne m'en veut pas mais je me ouvient que du prof et de son addition
Respect
---  
Tu pourrais quand même voire qu'elles sont les parties code qui t'envoient ad padres ça te permettrai d'avancer  
--
C'est currieux la façon dont est organisé ton code : tu dis code segment ... puis deb...  
et tu fermes en code ends puis en deb.
 
Bon courrage

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed