Page 1 sur 1

Renderworld ?

Publié : dim. 21/nov./2010 10:44
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

Re: Renderworld ?

Publié : dim. 21/nov./2010 10:53
par Backup
essaye de changer le sub-system dans les paramétrages du compilateur ;)

Re: Renderworld ?

Publié : dim. 21/nov./2010 11:25
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)

Re: Renderworld ?

Publié : dim. 21/nov./2010 21:18
par djes
Tu peux mettre un code complet stp?

Re: Renderworld ?

Publié : dim. 21/nov./2010 22:31
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

Re: Renderworld ?

Publié : lun. 22/nov./2010 0:17
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 !! ;)

Re: Renderworld ?

Publié : lun. 22/nov./2010 9:23
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.

Re: Renderworld ?

Publié : lun. 22/nov./2010 10:17
par Backup
je ne serai pas d'une grande aide , mon NC10 n'as pas de carte 3D :?

Re: Renderworld ?

Publié : lun. 22/nov./2010 10:25
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 ?

Re: Renderworld ?

Publié : lun. 22/nov./2010 10:34
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 ? :(