RECHERCHER :
COMMUNAUTE MP
Identifiez vous ...
Devenir Membre
J'ai oublié mon MDP
DOMAINE MP
Bavardages
Langages Généraux
Langages Web
Langages DotNet
Autres langages
Dev. Jeux Video
Sécurité
Sys. Exploitation
Graphismes
Logiciels
Réseaux
Bases de données
Méthodologies
Emplois High-tech
Aide juridique
Articles juridiques
FORUM
Index des forums
Ajouter un sujet
Rechercher sujet
Contact Responsable
Devenir modérateur
CHAT MP IRC
Votre pseudo ...
Srv: irc.moteurprog.com
Chan: #MoteurProg
PARTICIPER
Plus de 3500 emplois.
Rechercher un job
Déposez votre CV
Emplois High-tech

Visiteur MP

 Viewport

Forum : DIRECTX
Sous Catégorie : Aucune
Type du sujet : Sujet Normale
FAQ : FAQ DIRECTX

SUIVI DES SUJETS PAR MAIL

SUIVI PAR MAIL INACTIF

RESOLUTION DU SUJET SUJET RESOLU
BLOQUAGE DU SUJET SUJET ACTIF
APPARTENANCE A LA FAQ N'APPARTIENT PAS A LA FAQ


PAGE : [1]

POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

FORUM DIRECTX

PREMIERE PAGE

PAGE PRECEDENTE

Page précedente

Page suivante

PAGE SUIVANTE

DERNIERE PAGE
dixcie
Nouveau membre
Inscrit : 09/04/2008
Messages : 4
Message
#151693
Posté le 09/04/08 à 16:59
Bonjour,

je fais un jeu en DirectX9 avec vb 2008, qui fonctionne très bien. Seulement si j'ajoute un viewport et que j'y mets des choses je pense qu'il désactive le depth buffer... (Les objets sont dessinés dans l'ordre que je les dessine et pas dans l'ordre de profondeur.) Je ne sais pas pourquoi: ça marche bien si je n'utilise pas de viewport.
Voici quelques parties du code:

Dans l'initialisation (il ne devrait pas y avoir de problème):
[CODE] Dim Present As PresentParameters = New PresentParameters
DispMode = Microsoft.DirectX.Direct3D.Manager.Adapters.Default.CurrentDisplayMode

Present.Windowed = bWindowed
Present.SwapEffect = SwapEffect.Flip 'SwapEffect.Discard 'discuss later
Present.BackBufferCount = 1
Present.BackBufferFormat = DispMode.Format
Present.BackBufferHeight = DispMode.Height
Present.BackBufferWidth = DispMode.Width

Present.PresentationInterval = PresentInterval.Immediate
Present.AutoDepthStencilFormat = DepthFormat.D16
Present.EnableAutoDepthStencil = True

'Device
Device = New Direct3D.Device(0, Microsoft.DirectX.Direct3D.DeviceType.Hardware, Me, CreateFlags.HardwareVertexProcessing, Present)
Device.IsUsingEventHandlers = False 'éviter erreur au 'End'

'je n'utilise que le viewport(1) pr l'instant et il fait tout l'écran
Viewport(1) = New Viewport
Viewport(2) = New Viewport

Viewport(1).X = 0
Viewport(1).Y = 0
Viewport(1).Width = DispMode.Width
Viewport(1).Height = DispMode.Height ' / 2
Viewport(2).X = 0
Viewport(2).Y = DispMode.Height / 2
Viewport(2).Width = DispMode.Width
Viewport(2).Height = DispMode.Height

[/CODE]

Dans le loop:
[CODE] Device.Viewport = Viewport(1)

'----------------------- BEGIN -----------------------
Device.Clear(ClearFlags.Target Or ClearFlags.ZBuffer, Color.Gray, 1.0, 0)

'On dessine

Device.EndScene() 'all drawings before this line
Device.Present()
[/CODE]

Comment ce fait-il donc que si j'enlève la ligne device.viewport = viewport(1), ça marche, et que comme ça il dessine les objets dans l'ordre que je les dessine et pas en fonction de la profondeur à laquelle ils se trouvent?
Merci pour votre aide!

dixcie

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Publicité
Inscrit : X
Messages : X
Message
#Aucun

HAUT DE PAGE

  

vortex666
Modérateur :
- C & C++
- OpenGL
- Delphi
Chef de projet(s) :
- Vortez3DEngine

Avatar de vortex666
Inscrit : 20/09/2004
Messages : 489
Message
#151695
Posté le 09/04/08 à 18:12
Comme je fait plutot de l'OpenGL, je ne suis pas sur d'ou vien ton probleme, mais il semble que t'on depth buffer est simplement a off lorsque tu dessine, alors remet le a on encore une fois juste avant de dessiner, je crois que ca arrangera le probleme.
Sinon, t'inquiete, on trouvera surement...

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

dixcie
Nouveau membre
Inscrit : 09/04/2008
Messages : 4
Message
#151701
Posté le 09/04/08 à 18:52
Merci pour ta réponse rapide!

j'ai rajouté ces deux lignes après chaque fois que je change de viewport et avant de dessiner:

Device.SetRenderState(RenderStates.ZBufferWriteEnable, True) Device.SetRenderState(RenderStates.ZEnable, True)

Mais ça ne change rien...
De plus, je remarque que quand je mets plusieurs viewports, seul le premier contient les renderstates tels que je les ai spécifiés (par exemple le brouillard), même si je les ajoute à chaque fois après avoir changé de viewport et avant avoir dessiné. bizarre...

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

dixcie
Nouveau membre
Inscrit : 09/04/2008
Messages : 4
Message
#151716
Posté le 09/04/08 à 23:27
Désolé c'était bête: je n'ai pas mis les minZ et maxZ des Viewports pcq je ne savais pas à quoi ça servait. Il suffisait de les mettre sur 0 et 1 et ça marche.

Par contre j'ai un autre problème avec les viewports: si j'en utilise plusieurs le premier est parfait mais les suivants ne montrent pas le brouillard. (Les autres renderstates comme alphablendenable et tout fonctionnent bien.)

Voici le code que je répète après chaque mise en place d'un autre viewport:
[CODE]
With Device.RenderState
.FogStart = 2000
.FogEnd = 7000
.FogColor = Color.Gray
.FogTableMode = FogMode.Linear
.FogEnable = True
End With
[/CODE]

Savez-vous comment y remédier?

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

dixcie
Nouveau membre
Inscrit : 09/04/2008
Messages : 4
Message
#151747
Posté le 10/04/08 à 16:41
Le brouillard a soudainement réapparu.. Aucune idée pourquoi, mais tant que ca marche je suis content :p
Merci pour votre aide!

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 
POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

PREMIERE PAGE

PAGE PRECEDENTE Page précédente

Page suivante

PAGE SUIVANTE DERNIERE PAGE

FORUM DIRECTX



    PAGE : [1]



.: Site Web développé par Julien Pichot et l'équipe MPWG avec www.evolvia-web.com :.