Seite 1 von 2

StaticGeometry Error

Verfasst: 02.04.2014 15:33
von Purebasium
immer wieder wenn ich mit StaticGeometry arbeite bekommen ich folgenden Fehler:

Code: Alles auswählen


       Assertion failed!

       Program: ...
       File OgreStaticGeometry.cpp 
       Line 1572

       Expression: vertexCount <= mMaxVertecIndex && "Index range 
       ecceeded when using stencil shadows, consider ""reducing your region 
       size or reducing poly count"

       For information on how your program can cause an assertion 
       failure, see the Visual C++ documentation on asserts

       (Press Retry to debug the application -JIT must be enabled)


Kann mir jemand helfen?

Re: StaticGeometry Error

Verfasst: 02.04.2014 17:13
von Chimorin
Nein, kann wahrscheinlich keiner. Wie wäre es mit einem kleinen Testcode?

Re: StaticGeometry Error

Verfasst: 02.04.2014 17:32
von bobobo
Doch ,ICH !!!
Ich schlage vor, dass Du die Ausmaße der Region einschränkst oder die Komplexität der Polygone

(Aber nur weil ich etwas englisch kann)

Re: StaticGeometry Error

Verfasst: 02.04.2014 18:26
von Purebasium
das habe ich versucht

Davor:

Code: Alles auswählen


 For Arrayz = 1 To 120 
  For ArrayX = 1 To 120
      MapDaten(Arrayx, Arrayz) = 0

  Next 
 Next 

  CreateStaticGeometry(0,6000,1000,6000, #True)

For ArrayZ = 1 To 120
z+1
    For ArrayX = 1 To 120
  x+1
     If  MapDaten(ArrayX, ArrayZ) =0
       If Random(49) =49
         MapDaten(ArrayX, ArrayZ) =5

            id= CreateEntity(#PB_Any, MeshID(5),MaterialID(BaumMaterial))
    ScaleEntity(id,20,20,20)
    
  AddStaticGeometryEntity(0, EntityID(id),x*50-6000, hoehe,z*50-6000)

       EndIf
     EndIf
    Next 
  Next 

  
  For ArrayZ = 1 To 120
    For ArrayX = 1 To 120
     If  MapDaten(ArrayX, ArrayZ) =5
  
      Baumerzeugen(ArrayX, ArrayZ)
      
     EndIf
    Next 
  Next 
  BuildStaticGeometry(0)
  


Das entspricht ca. 290 Elementen



Erst damit geht's:

Code: Alles auswählen


 For Arrayz = 1 To 10
  For ArrayX = 1 To 10
      MapDaten(Arrayx, Arrayz) = 0

  Next 
 Next 

  CreateStaticGeometry(0,500,1000,500, #True)

For ArrayZ = 1 To 10
z+1
    For ArrayX = 1 To 10
  x+1
     If  MapDaten(ArrayX, ArrayZ) =0
       If Random(49) =49
         MapDaten(ArrayX, ArrayZ) =5

            id= CreateEntity(#PB_Any, MeshID(5),MaterialID(BaumMaterial))
    ScaleEntity(id,20,20,20)
    
  AddStaticGeometryEntity(0, EntityID(id),x*50-6000, hoehe,z*50-6000)

       EndIf
     EndIf
    Next 
  Next 

  
  For ArrayZ = 1 To 10
    For ArrayX = 1 To 10
     If  MapDaten(ArrayX, ArrayZ) =5
  
      Baumerzeugen(ArrayX, ArrayZ)
      
     EndIf
    Next 
  Next 
  BuildStaticGeometry(0)
  


Das entspricht ca. 2 Elementen


In der F1-Hilfe steht allerdings, dass es auch mit sehr vielen sehr aufwändigen Formen geht.
und so aufwändig sind meine entitys auch nicht.

Hat jemand eine Idee was ich jetzt machen könnte?

Re: StaticGeometry Error

Verfasst: 02.04.2014 19:13
von bobobo
Testen.

Ih hab mal den ExampleCode aus PB etwas angepasst und den robot asl Entity genommen, Der ist immerhin komplexer als ein Würfel :)
Das geht bei mir fehlerlos (auch wenn's anfängt zu ruckeln... aber meine GRAKA ist auch nicht die beste)


Code: Alles auswählen

;  (in den example 3d-ordner packen und dort ausführen, oder den Code entspechend anpassen.)
; ------------------------------------------------------------
;
;   PureBasic - Static Geometry
;
;    (c) 2012 - Fantaisie Software
;  getunt
; ------------------------------------------------------------
;

IncludeFile "Screen3DRequester.pb"

Define.f KeyX, KeyY, MouseX, MouseY
Define nx.f, nz.f, Boost.f = 10, Yaw.f, Pitch.f

If InitEngine3D()
  
  Add3DArchive("Data/Textures", #PB_3DArchive_FileSystem)
  Add3DArchive("Data/Scripts",#PB_3DArchive_FileSystem)
    Add3DArchive("Data/Models", #PB_3DArchive_FileSystem)
  Parse3DScripts()
  
  InitSprite()
  InitKeyboard()
  InitMouse()
  
  If Screen3DRequester()
    
    WorldShadows(#PB_Shadow_Additive)
    
    AmbientColor(0)
        
    ; node for Light and Billboard (Sun)
    CreateNode(0, 0, 3000, 0)
    
    ;Create light
    CreateLight(0, RGB(90, 105, 132), 0, 3000, 0)
    AttachNodeObject(0, LightID(0))
    
    ; Create flare
    GetScriptMaterial(0, "Scene/burst")
    CreateBillboardGroup(0, MaterialID(0), 2048, 2048)
    AddBillboard(0, 0, 0, 3000, 0)
    AttachNodeObject(0, BillboardGroupID(0))
    
    
    ; Static geometry
    ;
    
    ; Create Entity
    ;CreateCube(0, 1)
    ;CreateEntity(0, MeshID(0), #PB_Material_None)
    
    CreateTexture(0,64,64)
    StartDrawing(TextureOutput(0))
      Box(0,0,64,64,RGB(255,222,192))
    StopDrawing()
    
    ;CreateSphere(0, 1,15,4)
    ;CreateMaterial(0,TextureID(0))
    ;CreateEntity(0, MeshID(0), MaterialID(0))
    
    
    LoadMesh(0, "robot.mesh")
    TransformMesh(0, 0,0,0,0.05,0.05,0.05, 0,0,0)

    CreateMaterial(0, LoadTexture(0, "r2skin.jpg"))
    CreateEntity(0, MeshID(0), MaterialID(0))
    ScaleEntity(0,0.1,0.1,0.1,#PB_Absolute)
    ; Create Static geometry
    CreateStaticGeometry(0, 1000, 1000, 1000, #True)

    For z = -10 To 10
      For x = -10 To 10
        AddStaticGeometryEntity(0, EntityID(0), x * 1000, 0, z * 1000, 1000,  10, 1000, 0, 0, 0)        
        Height.f = 20+ Random(80)
        AddStaticGeometryEntity(0, EntityID(0), x * 1000, Height/2, z * 1000,  200, Height, 200, 0, Random(360), 0)
      Next
    Next
    
    ; Build the static geometry
    BuildStaticGeometry(0)
   
    FreeEntity(0)

    ; Camera
    ;
    CreateCamera(0, 0, 0, 100, 100)
    MoveCamera(0, 2000, 2000, 2000, #PB_Absolute)
    CameraLookAt(0, 0, 0, 0)
    CameraRange (0, 2, 5000)
    CameraFOV   (0, 90)
    CameraBackColor(0, RGB(90, 105, 132))
    
    Repeat
      Screen3DEvents()
      
      If ExamineMouse()
        Yaw   = -MouseDeltaX() * 0.05
        Pitch = -MouseDeltaY() * 0.05
      EndIf
      
      If ExamineKeyboard()
              
        If KeyboardPushed(#PB_Key_Up)    
          MoveCamera(0,  0, 0, -2 * Boost)
        ElseIf KeyboardPushed(#PB_Key_Down)
          MoveCamera(0,  0, 0,  2 * Boost)
        EndIf 
  
        If KeyboardPushed(#PB_Key_Left)  
          MoveCamera(0, -2 * Boost, 0, 0) 
        ElseIf KeyboardPushed(#PB_Key_Right)
          MoveCamera(0,  2 * Boost, 0, 0)
        EndIf 
  
      EndIf
           
      ; Sun
      nx = 10000 * Cos(ElapsedMilliseconds() / 2500)
      nz = 10000 * Sin(ElapsedMilliseconds() / 2500)   
      MoveNode(0, nx, 3000, nz, #PB_Absolute)
      
      RotateCamera(0, Pitch, Yaw, 0, #PB_Relative)
      
      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
aber auch das OriginalExample mit den langgezogenen Würfeln und etwas ( 8) ) vergrößert

Code: Alles auswählen

For z = -100 To 100
      For x = -100 To 100
        AddStaticGeometryEntity(0, EntityID(0), x * 1000, 0, z * 1000, 1000,  10, 1000, 0, 0, 0)        
        Height.f = 200+ Random(800)
        AddStaticGeometryEntity(0, EntityID(0), x * 1000, Height/2, z * 1000,  200, Height, 200, 0, Random(360), 0)
      Next
    Next
    
an der entsprechenden Stelle geht noch (hier ruckelts dann aber ganz arg)

Re: StaticGeometry Error

Verfasst: 02.04.2014 19:22
von Purebasium
Dann ist mein Entity zu Aufwendig, oder?


https://www.dropbox.com/s/9w33fhwuyxm0ksd/Baum2.mesh

Re: StaticGeometry Error

Verfasst: 03.04.2014 13:02
von bobobo
weiß nicht, mag sein.
Ich kann den baum in der example-pb-datei nehmen .. ohne Fehlermeldung
.. ist dann aber mit -10 bis 10 in x und y schon arg ruckelig.

könnte an Deiner GraKa liegen, oder an den Treibern oder an beidem

Reduzieren ist auf jeden Fall immer der beste Weg

StaticGeometry taugt hier für Deinen Zweck eh wohl nicht so supergut, weil z.B. Bäume in einiger Entfernung eigentlich keine mehr sein brauchen. Zumindest keine in 3D.
Wenn Du nur die in der Nähe (und womöglih nur die in Blickrichtung) in 3D darstellst und die weiter entfernten meinetwegen als Billboard oder so, dürfte es 'nen ganzen Zacken flötter werden.
----------

hab gerade mit -20 bis 20 in x und y probiert und PB kneift auch hier dann den Arsch zu.

Re: StaticGeometry Error

Verfasst: 03.04.2014 15:53
von Purebasium
Kann man es dann irgendwie einrichten, dass ein Billboard einen Schatten auf einem Terrain wirft?
(da Bäume nun mal auch schatten haben 8) )

Re: StaticGeometry Error

Verfasst: 03.04.2014 18:58
von bobobo
Frage: braucht ein Baum in einiger Entfernung wirklich einen Schatten oder reicht da ein "Etwas dunkles am Boden drumrum" nicht aus?

Wenn nahe 3D-Bäume Schatten werfen ist das imho genug.

Re: StaticGeometry Error

Verfasst: 03.04.2014 19:09
von bobobo
Achsoja .. dein baum sieht etwas .. öömm .. umbaummäßig aus .. :)

Wennste Blender kennst, da gibt ein plugin namens sapling .. mit dem kann man Bäume basteln, die realistischer sind. Tutorials dazu finzte im Netz.