Sprite3D - Filtrage bilinéaire

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Sprite3D - Filtrage bilinéaire

Message par Le Soldat Inconnu »

je trouve le filtrage Bilinéaire bizarre.

Bizarre dans le sens ou quand je ne touche pas au sripte3d (aucun effet de rotation ou autre) j'ai une qualité d'image exécrable.

voir ce code qui fait une copie d'écran pour l'afficher en srite3d dans un screen
avec Sprite3DQuality(0) , c'est bon
mais avec Sprite3DQuality(1), c'est moche :roll:

Code : Tout sélectionner

Structure InfoSprite
  x.l ; Position X
  y.l ; Position Y
  s.l ; Numéro du sprite
  a.f ; Angle de rotation
EndStructure

; On récupère la taille de l'écran
If ExamineDesktops()
  Ecran_Largeur = DesktopWidth(0)
  Ecran_Hauteur = DesktopHeight(0)
  ProfondeurCouleur = DesktopDepth(0)
Else
  End
EndIf

; On fait une copie d'écran
DC = GetDC_(0)
CreateImage(0, Ecran_Largeur, Ecran_Hauteur)
Dessin = StartDrawing(ImageOutput())
  BitBlt_(Dessin, 0, 0, Ecran_Largeur, Ecran_Hauteur, DC, 0, 0, #SRCPAINT)
StopDrawing()
ReleaseDC_(0, DC)

; On ouvre l'openscreen
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 Or InitSprite3D() = 0
  MessageRequester("Erreur", "Impossible d'initialiser la souris ,le clavier ou l'écran. Vérifiez la présence de DirectX 7 ou supérieur.", 0)
  End
EndIf

; ****************************************
; Oula, avec ce param à 1, c'est moche moche moche
Sprite3DQuality(1)
; normalement, le filtrage bilinéaire n'intervient que si la taille de l'image à changer et est de mailleur qualité que ça
; ****************************************


If OpenScreen(Ecran_Largeur, Ecran_Hauteur, ProfondeurCouleur, "Rotation") = 0
  MessageRequester("Erreur", "Impossible d'ouvrir l'écran.", 0)
  End
EndIf

; On découpe la copie d'acran en carré
#Carre = 64
CarreX = Round(Ecran_Largeur / #Carre, 1) - 1 ; Nombre de carré
CarreY = Round(Ecran_Hauteur / #Carre, 1) - 1

Dim Ecran.InfoSprite(CarreX, CarreY) ; On redim la liste des sprites

For n = 0 To CarreX
  For nn = 0 To CarreY
    Temp = CreateSprite(#PB_Any, #Carre, #Carre, #PB_Sprite_Texture) ; Création du sprite
    ; Temp = LoadSprite(#PB_Any, "test.bmp", #PB_Sprite_Texture)
    Ecran(n, nn)\x = #Carre * n ; Positoion du carré
    Ecran(n, nn)\y = #Carre * nn
    StartDrawing(SpriteOutput(Temp)) ; On dessine le carré
      DrawImage(UseImage(0), -Ecran(n, nn)\x, -Ecran(n, nn)\y)
    StopDrawing()
    Ecran(n, nn)\s = CreateSprite3D(#PB_Any, Temp)
  Next
Next


Repeat
  ClearScreen(0, 0, 0)
  
  Start3D()
    For n = 0 To CarreX
      For nn = 0 To CarreY
        DisplaySprite3D(Ecran(n, nn)\s, Ecran(n, nn)\x, Ecran(n, nn)\y, 255)
      Next
    Next
  Stop3D()
  
  ; On lit les évènements clavier
  ExamineKeyboard()
  
  FlipBuffers()
Until KeyboardPushed(#PB_Key_All)
Donc, est-ce que ce serait possible d'amélioré la qualité du filtrage ? :D
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]