J'essaie de créer des objets transparents avec Dreammotion, mais on dirait que la transparence ne marche que dans l'ordre de création des entités: Celles qui sont créées en dernières sont transparentes pour les précédentes, mais pas l'inverse.

Ex: 3 entités 1, 2, et 3 (créées dans cet ordre)
- on peut voir 2 et 1 à travers 3
- on peut voir 1 à travers 2
- mais 1 est opaque à toutes, et 2 masque 3.
(Cf code ci-dessous)
Comment puis-je faire pour chaque objet soit transparent pour tous les autres ?
Code : Tout sélectionner
; Dreammotion alphablending test
; Author: Kelebrindae
; Date: march,14, 2006
; PB version: v4.00
; OS: Windows XP
; Demo: Yes
;- Initialisation
IncludePath "Include\" : IncludeFile "dreamotion3d.pbi"
; Globales
Global numcube.l = 3
Global *font.CFont
Global *camera.CEntity
Global Dim *mesh.CEntity(numcube)
Resultat = MessageRequester("Alphablending test","Full Screen ?",#PB_MessageRequester_YesNo)
If Resultat = 6
FullScreen=1
Else
FullScreen=0
EndIf
If InitSprite() = 0 Or InitKeyboard() = 0
MessageRequester( "Error" , "Can't find DirectX 7.0 or above" , 0 )
End
EndIf
; init Dreammotion 3D screen
DM_Graphics3D(800, 600, 32, FullScreen, 1)
; load font
*font = DM_LoadFont( "Tahoma",9 , 0)
DM_TextColor(*font, 255,255,0,255)
;- ---- Main program ----
;-Entity
; Create 3 cubes
*mesh(1) = DM_CreateCube()
DM_ScaleMesh(*mesh(1), 5,5,5)
DM_BrushDiffuse( DM_GetBrush(*mesh(1)), 255,0,0,255)
DM_BrushAmbient( DM_GetBrush(*mesh(1)), 255,0,0,255)
DM_PositionEntity(*mesh(1),0,0,-15)
*mesh(2) = DM_CreateCube()
DM_ScaleMesh(*mesh(2), 5,5,5)
DM_BrushDiffuse( DM_GetBrush(*mesh(2)), 0,255,0,255)
DM_BrushAmbient( DM_GetBrush(*mesh(2)), 0,255,0,255)
DM_PositionEntity(*mesh(2),2,2,0)
*mesh(3) = DM_CreateCube()
DM_ScaleMesh(*mesh(3), 5,5,5)
DM_BrushDiffuse( DM_GetBrush(*mesh(3)), 0,0,255,255)
DM_BrushAmbient( DM_GetBrush(*mesh(3)), 0,0,255,255)
DM_PositionEntity(*mesh(3),-2,-2,15)
; and make 'em transparent
DM_BrushAlpha( DM_GetBrush(*mesh(1)), 255, 2,4)
DM_BrushAlpha( DM_GetBrush(*mesh(2)), 255, 2,4)
DM_BrushAlpha( DM_GetBrush(*mesh(3)), 255, 2,4)
;-light
DM_AmbientLight(200, 200, 200)
;-Camera
*camera = DM_CreateCamera()
DM_CameraClsColor(*camera, 0, 0, 0)
;- Main loop
azimuth.f=0
Repeat
If fullscreen = 0
While WindowEvent() : Wend
EndIf
DM_turnEntity(*mesh(1),-1,0.7,1.2)
DM_turnEntity(*mesh(2),0.6,-1.1,-1)
DM_turnEntity(*mesh(3),-0.5,-0.7,1.3)
azimuth+1
If azimuth>=360
azimuth-360
EndIf
DM_PositionEntity(*camera,40*Cos(azimuth * 0.0174533),0,40*Sin(azimuth * 0.0174533))
DM_PointEntity(*camera,*mesh(2),0.5)
DM_BeginScene()
DM_RenderWorld(*camera)
; uncomment this to show FPS
DM_DrawText(*font, 0,0,Str(DM_FPS ()) + " FPS")
DM_EndScene()
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
DM_ClearGraphics()
J'ai modifié le code ci-dessus pour le rendre beaucoup plus court (je viens seulement de découvrir la commande "DM_CreateCube()"
