Renderworld ?

Généralités sur la programmation 3D
Avatar de l’utilisateur
DjPoke
Messages : 121
Inscription : mar. 02/nov./2010 13:53
Localisation : Corte, Corse, France
Contact :

Renderworld ?

Message par DjPoke »

Bonjour,

J'ai testé un peu les commandes ogre pour voir ce qu'il a dans le ventre.
J'ai initialisé quelques trucs :

Code : Tout sélectionner

If Not(InitEngine3D())
  End
EndIf
  
InitSprite()
InitKeyboard()
InitMouse()
InitSound()
InitSprite3D()

UsePNGImageDecoder()

OpenScreen(1024,768,32,"Yom",#PB_Screen_WaitSynchronization)

Enumeration
  #camera
EndEnumeration

CreateCamera(#camera,10,5,80,50)
CameraProjectionMode(#camera,#PB_Camera_Perspective)
CameraRange(#camera,5,1500)
CameraBackColor(#camera,RGB(255,255,152))
CameraFOV(#camera,45)
Tout fonctionne à part le Renderworld plus loin, qui plante, se redimensionne à tout l'écran, et me sort un erreur dans le fichier texte ogre :
OGRE EXCEPTION(3:RenderingAPIException): Error beginning frame :Invalid call in D3D9RenderSystem::_beginFrame at OgreD3D9RenderSystem.cpp (line 2686)
J'ai essayé pas mal de choses, mais rien n'y fait

Un idée, s.v.p ? :?

(ps : Je suis sous windows 7, 32bits,avec le tout dernier driver de ma carte graphique ASUS EAH 4350, et directx est à jour)

Merci d'avance
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Renderworld ?

Message par Backup »

essaye de changer le sub-system dans les paramétrages du compilateur ;)
Avatar de l’utilisateur
DjPoke
Messages : 121
Inscription : mar. 02/nov./2010 13:53
Localisation : Corte, Corse, France
Contact :

Re: Renderworld ?

Message par DjPoke »

Merci Dobro.

Apparemment je dois faire une mauvaise manip car si je rajoute un subsystem, quand je lance la compilation, le programme s'arrête en 2 seconde sans rien montrer.
(j'ai essayé de rajouter OpenGL, Directx7, même effet)
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Renderworld ?

Message par djes »

Tu peux mettre un code complet stp?
Avatar de l’utilisateur
DjPoke
Messages : 121
Inscription : mar. 02/nov./2010 13:53
Localisation : Corte, Corse, France
Contact :

Re: Renderworld ?

Message par DjPoke »

Voici :

Code : Tout sélectionner

If Not(InitEngine3D())
  End
EndIf
  
InitSprite()
InitSprite3D()
InitKeyboard()
InitMouse()
InitSound()


UsePNGImageDecoder()

OpenScreen(1024,768,32,"Yom",#PB_Screen_WaitSynchronization)



Global vcon=0
Global creplan=0
Global mycam=0

Enumeration
  #camera
EndEnumeration

CreateCamera(#camera,10,5,80,50)
CameraProjectionMode(#camera,#PB_Camera_Perspective)
CameraRange(#camera,5,1500)
CameraBackColor(#camera,RGB(255,255,152))
CameraFOV(#camera,45)

Dim glups(6,2)
glups(1,1)=LoadSprite(#PB_Any,"spr\glups01.png",#PB_Sprite_AlphaBlending | #PB_Sprite_Texture)
glups(2,1)=LoadSprite(#PB_Any,"spr\glups02.png",#PB_Sprite_AlphaBlending | #PB_Sprite_Texture)
glups(3,1)=LoadSprite(#PB_Any,"spr\glups03.png",#PB_Sprite_AlphaBlending | #PB_Sprite_Texture)
glups(4,1)=LoadSprite(#PB_Any,"spr\glups04.png",#PB_Sprite_AlphaBlending | #PB_Sprite_Texture)
glups(5,1)=LoadSprite(#PB_Any,"spr\glups05.png",#PB_Sprite_AlphaBlending | #PB_Sprite_Texture)
glups(6,1)=LoadSprite(#PB_Any,"spr\glups06.png",#PB_Sprite_AlphaBlending | #PB_Sprite_Texture)
For i=1 To 6
  If glups(i,1)=0
    End
  EndIf
Next
glups(1,2)=CreateSprite3D(#PB_Any,glups(1,1))
glups(2,2)=CreateSprite3D(#PB_Any,glups(2,1))
glups(3,2)=CreateSprite3D(#PB_Any,glups(3,1))
glups(4,2)=CreateSprite3D(#PB_Any,glups(4,1))
glups(5,2)=CreateSprite3D(#PB_Any,glups(5,1))
glups(6,2)=CreateSprite3D(#PB_Any,glups(6,1))

nglups=1

Dim scn(3,2)
scn(1,1)=LoadSprite(#PB_Any,"scn\ecran_controle.png",#PB_Sprite_AlphaBlending | #PB_Sprite_Texture)
scn(2,1)=LoadSprite(#PB_Any,"scn\ecran_visuel.png",#PB_Sprite_AlphaBlending | #PB_Sprite_Texture)
scn(3,1)=LoadSprite(#PB_Any,"scn\carte.png",#PB_Sprite_AlphaBlending | #PB_Sprite_Texture)
For i=1 To 3
  If scn(i,1)=0
    End
  EndIf
Next
scn(1,2)=CreateSprite3D(#PB_Any,scn(1,1))
scn(2,2)=CreateSprite3D(#PB_Any,scn(2,1))
scn(3,2)=CreateSprite3D(#PB_Any,scn(3,1))

fond=LoadSprite(#PB_Any,"scn\vaisseau.png",0)

Dim spor(4,2,3)
spor(1,1,1)=LoadSprite(#PB_Any,"spr\spor0_1.png",#PB_Sprite_AlphaBlending | #PB_Sprite_Texture)
spor(2,1,1)=LoadSprite(#PB_Any,"spr\spor0_2.png",#PB_Sprite_AlphaBlending | #PB_Sprite_Texture)
spor(3,1,1)=LoadSprite(#PB_Any,"spr\spor0_3.png",#PB_Sprite_AlphaBlending | #PB_Sprite_Texture)
spor(4,1,1)=LoadSprite(#PB_Any,"spr\spor0_4.png",#PB_Sprite_AlphaBlending | #PB_Sprite_Texture)
For i=1 To 4
  If spor(i,1,1)=0
    End
  EndIf
Next
spor(1,2,1)=CreateSprite3D(#PB_Any,spor(1,1,1))
spor(2,2,1)=CreateSprite3D(#PB_Any,spor(2,1,1))
spor(3,2,1)=CreateSprite3D(#PB_Any,spor(3,1,1))
spor(4,2,1)=CreateSprite3D(#PB_Any,spor(4,1,1))
spor(1,2,2)=CreateSprite3D(#PB_Any,spor(1,1,1))
spor(2,2,2)=CreateSprite3D(#PB_Any,spor(2,1,1))
spor(3,2,2)=CreateSprite3D(#PB_Any,spor(3,1,1))
spor(4,2,2)=CreateSprite3D(#PB_Any,spor(4,1,1))
spor(1,2,3)=CreateSprite3D(#PB_Any,spor(1,1,1))
spor(2,2,3)=CreateSprite3D(#PB_Any,spor(2,1,1))
spor(3,2,3)=CreateSprite3D(#PB_Any,spor(3,1,1))
spor(4,2,3)=CreateSprite3D(#PB_Any,spor(4,1,1))
For i=1 To 4
  ZoomSprite3D(spor(i,2,2),191,111)
  ZoomSprite3D(spor(i,2,3),123,74)
Next
Dim lume(8)
For i=1 To 4
  lume(i)=i
Next
For i=5 To 7
  lume(i)=8-i
Next

Dim sporon(4)
Dim sporx(4)
Dim spory(4)
sporx(0)=425
spory(0)=512
sporx(1)=714
spory(1)=624
sporx(2)=119
spory(2)=624
sporx(3)=306
spory(3)=474
sporx(4)=592
spory(4)=474

Dim actspor(4,4)
actspor(0,0)=1
actspor(0,1)=432
actspor(0,2)=520
actspor(0,3)=432+159
actspor(0,4)=520+84
actspor(1,0)=2
actspor(1,1)=730
actspor(1,2)=631
actspor(1,3)=730+160
actspor(1,4)=631+90
actspor(2,0)=2
actspor(2,1)=138
actspor(2,2)=631
actspor(2,3)=138+160
actspor(2,4)=631+90
actspor(3,0)=3
actspor(3,1)=316
actspor(3,2)=480
actspor(3,3)=316+102
actspor(3,4)=480+59
actspor(4,0)=3
actspor(4,1)=602
actspor(4,2)=480
actspor(4,3)=602+102
actspor(4,4)=480+59

activescn=1
incre=0

Dim k(20)

MouseLocate(512,384)

LoadModule(0,"mod\ambience1.s3m")
ModuleVolume(0,30)
PlayModule(0)

Dim snd(3)
snd(1)=LoadSound(#PB_Any,"snd\spor_contact.wav")
snd(2)=LoadSound(#PB_Any,"snd\viewer_sound.wav")
snd(3)=LoadSound(#PB_Any,"snd\map_sound.wav")

Dim fadesnd(3)

;Add3DArchive("tex\",#PB_3DArchive_FileSystem)
;Add3DArchive("mesh\",#PB_3DArchive_FileSystem)
;Parse3DScripts()

Dim tex(8)
Dim mat(8)
For i=1 To 8
  ;tex(i)=LoadTexture(#PB_Any,Str(i)+".jpg")
  ;mat(i)=CreateMaterial(#PB_Any,TextureID(tex(i)))
  ;MaterialShadingMode(mat(i),#PB_Material_Gouraud)
  ;MaterialFilteringMode(mat(i),#PB_Material_Trilinear)
Next

Dim mesh(3)
For i=1 To 3
  ;mesh(i)=LoadMesh(#PB_Any,Str(i)+".x")
Next

Dim conics(800,400,3) ; 1=objet conics à visiter, 2=texture, 3=Identité habitant
For y=1 To 400
  For x=1 To 800
    If Random(20)=0
      conics(x,y,1)=Random(2)+1
      conics(x,y,2)=Random(7)+1
      ; ajouter ici l'ajout d'habitants
    EndIf
  Next
Next

; A REMPLACER ================
xcon=Random(799)+1
ycon=Random(399)+1
conics(xcon,ycon,1)=Random(2)+1
conics(xcon,ycon,2)=Random(7)+1
;=============================

Repeat
  
  For i=1 To 2
    If fadesnd(i)>0
      fadesnd(i)=fadesnd(i)-25
      SoundVolume(snd(i),fadesnd(i))
    EndIf
  Next
 
  DisplaySprite(fond,0,0)
  
  ExamineKeyboard()
  ExamineMouse()
  
  mx=MouseX()
  my=MouseY()
  mleft=MouseButton(#PB_MouseButton_Left)
  mright=MouseButton(#PB_MouseButton_Right)
  
  xact=MouseX()-100
  yact=MouseY()+40
  
  flag=0
  For i=0 To 4
    If sporon(i)>0
      flag=1
    EndIf
  Next
  
  If flag=0 And mleft=1
    For i=0 To 4
      If flag=0 And xact>=actspor(i,1) And xact<=actspor(i,3) And yact>=actspor(i,2) And yact<=actspor(i,4)
        flag=1
        sporon(i)=1
        SoundVolume(snd(1),255)
        PlaySound(snd(1))
        If activescn=2 And i=0
          fadesnd(2)=250
        EndIf
        If activescn=3 And i=0
          fadesnd(3)=250
        EndIf
      EndIf
    Next
  EndIf
     
  
  For i=2 To 20
    k(i)=(k(i)+1)%i
  Next
  
  Start3D()
  Sprite3DQuality(#PB_Sprite3D_BilinearFiltering)
  DisplaySprite3D(scn(1,2),-124,91)
  If activescn=2
    If incre<200
      incre=incre+10
    Else
      If creplan=0
        creplan=1
      EndIf
    EndIf
    DisplaySprite3D(scn(2,2),0,0,incre)
  EndIf
  If activescn=3
    If incre<400
      incre=incre+20
    EndIf
    ZoomSprite3D(scn(3,2),800,incre)
    DisplaySprite3D(scn(3,2),((1024-820)/2),0)
  EndIf
  For i=0 To 4
    If sporon(i)>0
      DisplaySprite3D(spor(lume(sporon(i)),2,actspor(i,0)),sporx(i),spory(i))
      If k(2)=0
        sporon(i)=sporon(i)+1
        If lume(sporon(i))=0
          sporon(i)=0
          If i=0
            activescn=activescn+1
            incre=0
            If activescn=2
              SoundVolume(snd(2),255)
              PlaySound(snd(2),#PB_Sound_Loop)
            EndIf
            If activescn=3
              If creplan=2
                If IsEntity(vcon)
                  FreeEntity(vcon)
                EndIf
                vcon=0
                creplan=0
              EndIf
              StopSound(snd(2))
              fadesnd(2)=0
              SoundVolume(snd(3),255)
              PlaySound(snd(3),#PB_Sound_Loop)
            EndIf
            If activescn=4
              StopSound(snd(3))
              fadesnd(3)=0
              activescn=1
            EndIf
          EndIf
        EndIf
      EndIf
    EndIf
  Next
  DisplaySprite3D(glups(nglups,2),mx-(SpriteWidth(glups(nglups,1))/2),my,220) 
  Stop3D()
  
  
  If k(5)=0
    nglups=nglups+1
    If nglups=7
      nglups=1
    EndIf
  EndIf
  
  If activescn=2
    If creplan=1
      vcon=0
      If conics(xcon,ycon,1)>0
        ;vcon=CreateEntity(#PB_Any,MeshID(mesh(1)),#PB_Material_None,0,0,0)
        ;EntityLocate(vcon,0,0,0)
      EndIf
      creplan=2
    EndIf
    If creplan=2
      ;RotateEntity(vcon,0.15,0.27,0.34,#PB_Relative)
      CameraLocate(#camera,0,0,200)
      CameraLookAt(#camera,0,0,0)
      RenderWorld()
    EndIf
  EndIf
  
  
  FlipBuffers()  

  Delay(30)
  
Until KeyboardPushed(#PB_Key_Escape)

End
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Renderworld ?

Message par Backup »

je viens de tester ton code chez moi en changeant les chemins pour les sprites
puisque je n'ai pas les meme images que toi

chez moi ça marche !

tu dois t'etre trompé dans les chemins vers tes medias !!
utilise un chemin complet genre "c:\spr\glups01.png" au lieu de juste "spr\glups01.png"
je parie que ton probleme viens de ça !! ;)
Avatar de l’utilisateur
DjPoke
Messages : 121
Inscription : mar. 02/nov./2010 13:53
Localisation : Corte, Corse, France
Contact :

Re: Renderworld ?

Message par DjPoke »

Au départ ça marche, mais quand tu clique au milieu de l'écran (un peu en dessous), ça déclenche l'affichage du rendu de la caméra 3D (la commande Renderworld() s'active).
Et c'est à ce moment là que ça bug, l'écran devient tout jaune, la couleur de fond de la caméra.

Voici un lien vers l'archive contenant le programme complet :
http://www.basic-sombre.com/libre/Yom.rar
(Il faut appuyer sur le bouton spherique du milieu)

Si tu pouvais tester en cliquant sur le bouton sphérique du milieu en bas et me dire ce qu'il en est, ça serait cool.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Renderworld ?

Message par Backup »

je ne serai pas d'une grande aide , mon NC10 n'as pas de carte 3D :?
Avatar de l’utilisateur
SPH
Messages : 4944
Inscription : mer. 09/nov./2005 9:53

Re: Renderworld ?

Message par SPH »

Dobro a écrit :je ne serai pas d'une grande aide , mon NC10 n'as pas de carte 3D :?
Tu n'as plus d'ordi de bureau ?

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
DjPoke
Messages : 121
Inscription : mar. 02/nov./2010 13:53
Localisation : Corte, Corse, France
Contact :

Re: Renderworld ?

Message par DjPoke »

Je viens de désactiver toutes les commandes d'affichage de sprites en les mettant en commentaires (2d comme 3d) et du coup la caméra fonctionne.
Je vais chercher par là...

EDIT:
Le problème vient du fait que l'on ne doit employer la commande RenderWorld() qu'avant toute opération graphique de type sprites ou sprites3D.

Du coup, j'ai trouvé la solution, mais il me faudrait un pointeur sur la backbuffer.
J'ai trouvé ce source ici dans les forums :

Code : Tout sélectionner

Procedure.l GrabSpriteEx(sprite, buffer, x, y, width, height, mode=0)
    ; netmaestro 2007
    ; Grab a Sprite from the backbuffer or visible screen
    ; buffer values: 0=backbuffer, 1=visible screen
    If buffer
        srcDC = GetDC_(ScreenID())
    Else
        srcDC = StartDrawing(ScreenOutput())
        EndIf
        trgDC = CreateCompatibleDC_(srcDC)
        BMPHandle = CreateCompatibleBitmap_(srcDC, Width, Height)
        SelectObject_( trgDC, BMPHandle)
        BitBlt_( trgDC, 0, 0, Width, Height, srcDC, x, y, #SRCCOPY)
        DeleteDC_( trgDC)
        If buffer
            ReleaseDC_(ScreenID(), srcDC)
        Else
        StopDrawing()
    EndIf
    result = CreateSprite(sprite, width, height, mode)
    If sprite = #PB_Any
        output = result
    Else
        output = sprite
    EndIf
    StartDrawing(SpriteOutput(output))
        DrawImage(BMPHandle, 0, 0)
    StopDrawing()
    DeleteObject_(BMPHandle)
    ProcedureReturn output
EndProcedure 
Le problème c'est que la commande srcDC = StartDrawing(ScreenOutput()) me retourne un pointeur NULL.
Est ce que quelqu'un pourrait m'aider ? :(
Répondre