Page 1 sur 1

Texture alpha avec la 4.70

Publié : jeu. 02/août/2012 22:53
par comtois
pouvez vous tester ce code et me dire s'il fonctionne correctement avec la version 4.70 ? Il faut l'enregistrer dans votre répertoire PureBasic /Examples/3D

Vous devriez voir 3 cubes avec un trou sur les faces , vive les textures Alpha qui permettent ce genre de fantaisie :)

[EDIT]
J'ai testé avec une carte NVIDIA sous Windows, et je me demande si ça fonctionne aussi avec une carte ATI ou sous Linux ou OS X ?

Code : Tout sélectionner

;
; ------------------------------------------------------------
;
;   PureBasic - CreateTexture
;
;    (c) 2012 - Fantaisie Software
;
; ------------------------------------------------------------
;

#CameraSpeed = 1

IncludeFile "Screen3DRequester.pb"

Define.f KeyX, KeyY, MouseX, MouseY

If InitEngine3D()
  
  Add3DArchive("Data/Textures", #PB_3DArchive_FileSystem)
  Add3DArchive("Data/Models", #PB_3DArchive_FileSystem)
  Add3DArchive("Data/Packs/Desert.zip", #PB_3DArchive_Zip)
  Parse3DScripts()
  
  InitSprite()
  InitKeyboard()
  InitMouse()
  
  If Screen3DRequester()
    
    KeyboardMode(#PB_Keyboard_International)  
    
    AmbientColor(RGB(255,255,255))
    
    ; Mesh
    ;
    CreateCube(0, 30)

    ; Texture
    ;
    For i = 0 To 2
      Read.i R : Read.i G : Read.i B: Read.i A
      Read.f x : Read.f y : Read.f z
      CreateTexture(i, 256, 256)
      StartDrawing(TextureOutput(i))
      DrawingMode(#PB_2DDrawing_AllChannels | #PB_2DDrawing_AlphaBlend)
      Box(0, 0, 256, 256, RGBA(0, 0, 0, 255))
      Box(4, 4, 248, 248, RGBA(R, G, B, A)) 
      Circle(127, 127, 50, RGBA(0, 0, 0, 0))
      StopDrawing()
      CreateMaterial(i, TextureID(i))
      MaterialBlendingMode(i, #PB_Material_AlphaBlend)
      CreateEntity(i, MeshID(0), MaterialID(i), x, y, z)
    Next
    
    CreateCamera(0, 0, 0, 100, 100)
    CameraLocate(0, 0, -100, 50)
    CameraLookAt(0, 0, 0, 1)
    
    ; SkyBox
    ;
    SkyBox("desert07.jpg")
    
    Repeat
      Screen3DEvents()
      
      If ExamineMouse()
        MouseX = -MouseDeltaX() * #CameraSpeed * 0.05
        MouseY = -MouseDeltaY() * #CameraSpeed * 0.05
      EndIf
      
      If ExamineKeyboard()
        
        If KeyboardPushed(#PB_Key_Left)
          KeyX = -#CameraSpeed 
        ElseIf KeyboardPushed(#PB_Key_Right)
          KeyX = #CameraSpeed 
        Else
          KeyX = 0
        EndIf
        
        If KeyboardPushed(#PB_Key_Up)
          KeyY = -#CameraSpeed 
        ElseIf KeyboardPushed(#PB_Key_Down)
          KeyY = #CameraSpeed 
        Else
          KeyY = 0
        EndIf
        
      EndIf
      
      For i = 0 To 2
        RotateEntity(i, 1, 1, 2-i, #PB_Relative)
      Next
      
      RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
      MoveCamera  (0, KeyX, 0, KeyY)
      
      RenderWorld()
      
      Screen3DStats()
      FlipBuffers()
    Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
  EndIf
  
Else
  MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf

End

DataSection
  Data.i 255, 0, 0, 127
  Data.f -10, 0, 5
  Data.i 0, 0, 255, 127
  Data.f 10, 0, 5 
  Data.i 0, 255, 0, 127
  Data.f 0, 0, -5
EndDataSection  

Re: Texture alpha avec la 4.70

Publié : ven. 03/août/2012 9:07
par kelebrindae
:D ça marche nickel sous XP 32 bits avec une ATI Radeon HD 5970! :D

Re: Texture alpha avec la 4.70

Publié : ven. 03/août/2012 9:10
par venom
Pareille chez moi (voir signature) :wink:






@++

Re: Texture alpha avec la 4.70

Publié : ven. 03/août/2012 9:53
par comtois
C'est une bonne chose, ça fonctionne avec NVIDIA et ATI sous différentes version de Windows, reste à savoir si c'est ok sous Linux et Mac OS.

Re: Texture alpha avec la 4.70

Publié : jeu. 09/août/2012 8:14
par blendman
chez moi, je crois que ça marche aussi (win xp, nvidia), mais on pourrait avoir quelques détails pour savoir ce que c'est sensé faire?
Car les cubes sont "faussement" transparents, car on ne voit pas l'intérieur ou les 3 autres extérieures (coté caché).
Mais c'est peut être normal :).

Cela dit, même comme ça c'est intéressant.
Il faudrait essayer avec des png et canal alpha pour voir si ça fonctionne ;).

Re: Texture alpha avec la 4.70

Publié : jeu. 09/août/2012 8:50
par comtois
Là je suis au bureau, j'essaierai de faire une copie d'écran ce soir pour te montrer le résultat. Normalement tu devrais voir 3 cubes transparents avec un trou sur chaque face car je trace un cercle complètement transparent avec alpha = 0.

Si tu vois un cercle noir c'est qu'il y a un problème quelque part ...

Est-ce que tu as comparé le résultat entre la 4.70 et la 4.60 par exemple ?

Re: Texture alpha avec la 4.70

Publié : jeu. 09/août/2012 10:01
par comtois
Finalement je viens de prendre le temps de faire une image, voila ce que tu devrais obtenir
Image

Re: Texture alpha avec la 4.70

Publié : jeu. 09/août/2012 11:32
par venom
Moi c'est bien ce que j’obtiens avec la 4.70.
En revanche en 4.60 les trou sont remplacer par des rond noir :wink:







@++

Re: Texture alpha avec la 4.70

Publié : lun. 13/août/2012 13:55
par blendman
c'est aussi ce que j'obtiens :)

En gros, ça corrige un bug lié à l'alpha c'est ça (bug présent dans la 4.6) ?