Page 2 sur 8

Publié : mer. 08/sept./2004 4:23
par ZapMan
Mais comme on a pu le constater à travers plusieurs exemples, il faut que le codeur ASM soit trés bon pour réussir à pondre un code plus performant que celui issu du compilateur PureBasic.

@Soldat : merci pour ton travail, tu es décidément trés productif !

Publié : lun. 01/nov./2004 17:33
par Le Soldat Inconnu
Nouvelle version ;)

J'ai ajouté 2 fonctions pour
- Mélanger 2 couleurs, utile pour faire un dégradé
- Ajouter 2 couleurs (pour par exemple affiché une image sur une autre avec un effet de fondu)

Publié : ven. 05/nov./2004 0:31
par Liet_Kynes
Vraiment sympa
tu pourrais p'tre pondre un truc vraiment bon pour la gestion des lumières, continue ^^

j'avais pas mal bossé sur la gestion des trajectoires et orientations des entités&caméra, pour un projet de jeu 3d que j'ai jamais fini; et ton code me donne l'idée de mettre mes travaux dans une dll (en fait c'est même en lisant ton code que je viens de comprendre comment faire une dll lol) en fait Le Soldat m'as inspiré =)
J'ai deux commandes en tête:
FollowEntity(): Camera qui suit une entité, a la manière d'un jeu a la 3e personne, on peut gerer la souplesse de la camera dans son déplacement, son angle par rapport a l'entité, la hauteur et son temps de réaction. le seul prob est qu'il ya pas de collision avec le décor ou les mesh, donc ca marche bien qu'a l'exterieur pour l'instant...
EntityFocus(): Commande pour gerer l'orientation de l'objet vers un point, en fonction des axes.

J'en reparlerais au moment venu, et bravo Le soldat =)

Publié : sam. 01/janv./2005 14:18
par Le Soldat Inconnu
Bon, j'ai mis en place la rotation et la symétrie d'image

La librairie s'appelle Effect (penser à supprimer l'ancienne qui s'apelle ColorEffect) et elle est dispo sur mon site.

voici la rapidité du bazar avec une image de 1000 * 1000 pixels sur un 900mhz :
- 230 ms pour la symétrie
- 266 ms pour la rotation

je pense que c'est très honnête comme vitesse :D

Publié : sam. 15/janv./2005 9:30
par Polo
Salut !
Je serais intéressé d'avoir la source de la commande GetImageBits, j'en ai besoin pour la librairie que je suis en train de faire, et ça m'embête de devoir inclure une autre librairie dans la mienne (ça devient le foutoir pour installer la librairie après ;))
Merci !
Gaetan

Publié : sam. 15/janv./2005 23:32
par Le Soldat Inconnu

Publié : dim. 16/janv./2005 14:15
par Polo
Ben, je me trompe peut être, mais sur ta page il n'y a que SetImagebits et pas getimagebits, non ?

Publié : dim. 16/janv./2005 16:00
par Le Soldat Inconnu
ah oui tiens :lol:

Code : Tout sélectionner

ProcedureDLL.l GetImageBits(ImageID, HList) ; Transfert d'une image vers un tableau
  Protected bmi.BITMAPINFO, Hdc.l, Resultat, Mem, n, nn, bm.BITMAP
  
  Resultat = 0
  
  GetObject_(ImageID, SizeOf(BITMAP), @bm.BITMAP)
  
  bmi\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER)
  bmi\bmiHeader\biWidth = bm\bmWidth
  bmi\bmiHeader\biHeight = bm\bmHeight
  bmi\bmiHeader\biPlanes = 1
  bmi\bmiHeader\biBitCount = 32
  bmi\bmiHeader\biCompression = #BI_RGB
  
  Mem = AllocateMemory(bm\bmWidth * bm\bmHeight * 4)
  If Mem
    
    Hdc = CreateCompatibleDC_(GetDC_(ImageID)) 
      If Hdc
        GetDIBits_(Hdc, ImageID, 0, bm\bmHeight, Mem, @bmi, #DIB_RGB_COLORS) ; on envoie la liste dans l'image
        ReleaseDC_(0, Hdc)
      Resultat = ImageID
    EndIf
    
    ; On convertit la liste dans le bon format
    For n = 0 To bm\bmHeight - 1
      For nn = 0 To bm\bmWidth - 1
        CopyMemory(Mem + nn * 4 + (bm\bmHeight - 1 - n) * bm\bmWidth * 4 + 2, HList + n * 4 + nn * bm\bmHeight * 4, 1)
        CopyMemory(Mem + nn * 4 + (bm\bmHeight - 1 - n) * bm\bmWidth * 4 + 1, HList + n * 4 + nn * bm\bmHeight * 4 + 1, 1)
        CopyMemory(Mem + nn * 4 + (bm\bmHeight - 1 - n) * bm\bmWidth * 4, HList + n * 4 + nn * bm\bmHeight * 4 + 2, 1)
      Next
    Next
    
    FreeMemory(Mem)
  EndIf

Publié : dim. 16/janv./2005 16:07
par Polo
merci beaucoup ! 8)

Publié : mer. 19/janv./2005 18:03
par bernard13
et la couleur sur les gadgets dans quel version ?
la version 213000

Publié : mer. 19/janv./2005 21:12
par Le Soldat Inconnu
c'est pas le but de cette librairie

ici, je parle traitement di'mages :wink:

D'où sortent les procédures CreateCompatibleDC GetDIBits ...

Publié : lun. 07/févr./2005 23:29
par barnierchristophe
Très interressant tout çà. Pour ma gouverne, et puisque je commence à m'y plonger, d'où sortent les fonctions du type, GetObject_ ,CreateCompatibleDC_ ,GetDIBits_ , ReleaseDC_ ( je ne les trouve pas dans l'aide incluse de PureBasic)
Où puis-je trouver un descriptif succint.. Merci :roll:

Publié : lun. 07/févr./2005 23:35
par nico
Ce ne sont pas des fonctions de Pure mais des fonctions API de window (fonctions contenues dans les Dll de window), la plupart sont prédéclarées dans PureBasic de sorte que l'on a pas à charger la librairie.

Publié : sam. 12/févr./2005 17:02
par Le Soldat Inconnu
Bon, une nouvelle fonction dans la lib qui permet de faire des rotation d'image avec n'importe quel angle

27°
98°
etc ...

Le tout avec de l'antialiazing (du lissage si vous préférez)

Aperçu des fonctions de rotation et de symétrie
Image

Publié : sam. 12/févr./2005 17:14
par Le Soldat Inconnu
Flype a écrit :ceci dit peut etre rentrerais tu en "concurrence" avec d'autres userlib existentes faite en ASM
il me semble bien qu'il en existe... je v voir...

vu sur purearea.net :
lib "effects" http://www.purearea.net/pb/download/use ... ffects.zip
lib "rotation" http://www.purearea.net/pb/download/use ... ations.zip
lib "X2D" http://www.purearea.net/pb/download/userlibs/X2D.zip

essaye et juge par toi meme
ta lib resterais cohérente en y rajoutant du traitement d'images
Tiens j'ai essayé les libs données par Flype précédemment

Pour une rotation de 90° d'une image de 1000*1000pixels sur un 900 mhz

ma lib : 240 ms
Lib Rotations : 500 ms (y'a pas de symétrie d'image la dedans) et elle est lente car elle travaille avec tous les angles (comme je viens de le faire mais sans lissage)

Pour la lib effects donnée par Flyppe, c'est idem que moi car elle utilise les mêmes fonctions :wink:

la X2D pas essayé


Du coup, je demande si il ne serai pas interressant d'optimiser avec de l'assembleur ma lib.
Est-ce que des pros de l'assembleur seraient partant ?

Si oui, je balance le code et on optimise tout ça :D