Page 1 sur 1

Sprite3D - Filtrage bilinéaire

Publié : mer. 10/nov./2004 23:11
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