[PB5.22] CreateText3D() & AttachEntityObject : IMA

Généralités sur la programmation 3D
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

[PB5.22] CreateText3D() & AttachEntityObject : IMA

Message par falsam »

Un souci sur un de mes codes : Quand je souhaite afficher un texte sur plusieurs entité, j'ai une erreur de mémoire.

Je vous donne un exemple de code réduit au minimum.

Code : Tout sélectionner

Enumeration
  #Mainform
EndEnumeration

Structure Sphere
  identity.i
  idtext3d.i
EndStructure

Global NewMap Entity.Sphere(), Event

Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered
Global WWIdth, WHeight

Global Mesh

InitEngine3D()
InitKeyboard()
InitSprite()

Add3DArchive(#PB_Compiler_Home + "Examples\3D\Data\fonts", #PB_3DArchive_FileSystem)
Parse3DScripts()

OpenWindow(#Mainform,0,0, 0, 0, "", #PB_Window_SystemMenu | #PB_Window_Maximize)
WWidth = WindowWidth(#Mainform, #PB_Window_InnerCoordinate)
WHeight = WindowHeight(#Mainform, #PB_Window_InnerCoordinate)
OpenWindowedScreen(WindowID(#Mainform),0,0,WWIdth,WHeight,0, 0, 0)

CreateLight(#PB_Any,RGB(151, 251, 151), -1.8, 10, 5)
Camera = CreateCamera(#PB_Any,0,0,100,100)
CameraBackColor(Camera, RGB(145, 182, 201))

MoveCamera(Camera, 2, 5, 15, #PB_Absolute)  
CameraLookAt(Camera, 0,0,0)   

Mesh=CreateSphere(#PB_Any, 0.1)

;L'erreur se produit dans cette boucle
For n = 0 To 5
  AddMapElement(Entity(), Str(n))
  Entity()\identity = CreateEntity(#PB_Any, MeshID(Mesh), #PB_Material_None, n, 0, 0)
  Entity()\idtext3d = CreateText3D(#PB_Any, Str(n), "BlueHighway-16", 1.0, RGBA(255, 0, 0, 255))
  AttachEntityObject(Entity()\identity, "", Text3DID(Entity()\idtext3d))
Next

Repeat
  Repeat
    Event = WindowEvent()
    Select Event
      Case #PB_Event_CloseWindow
        End
        
    EndSelect
  Until Event = 0
  
  If ExamineKeyboard()
    If KeyboardPushed (#PB_Key_Escape)
      Break
    EndIf
  EndIf
  
  ClearScreen(RGB(0, 0, 0))
  RenderWorld(80)
  FlipBuffers()  
  
ForEver
:!: L'utilisation de #PB_Any pour la création d'un text3D génére ce bug.

:idea: Si j'utilise la variable incrémentielle de la boucle comme identiant du texte3D : ça fonctionne mais ce n'est pas académique.
Je remplace

Code : Tout sélectionner

For n = 0 To 5
  AddMapElement(Entity(), Str(n))
  Entity()\identity = CreateEntity(#PB_Any, MeshID(Mesh), #PB_Material_None, n, 0, 0)
  Entity()\idtext3d = CreateText3D(#PB_Any, Str(n), "BlueHighway-16", 1.0, RGBA(255, 0, 0, 255))
  AttachEntityObject(Entity()\identity, "", Text3DID(Entity()\idtext3d))
Next
par

Code : Tout sélectionner

For n = 0 To 5
  AddMapElement(Entity(), Str(n))
  Entity()\identity = CreateEntity(#PB_Any, MeshID(Mesh), #PB_Material_None, n, 0, 0)
  CreateText3D(n, Str(n), "BlueHighway-16", 1.0, RGBA(255, 0, 0, 255))
  AttachEntityObject(Entity()\identity, "", Text3DID(n))
Next
A mon avis ça sent le bug.

Un autre bug mineur : Contrairement à ce que dit l'aide, on est obligé d'utiliser la codification RGBA().
Dernière modification par falsam le ven. 11/avr./2014 9:31, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Mesa
Messages : 1097
Inscription : mer. 14/sept./2011 16:59

Re: [PB5.22] CreateText3D() & AttachEntityObject : IMA

Message par Mesa »

Chez moi aussi, le #PB_Any fait planter.
Un bug probablement.

M.
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: [PB5.22] CreateText3D() & AttachEntityObject : IMA

Message par comtois »

En effet, c'est un bug.

C'est corrigé pour la prochaine version.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [PB5.22] CreateText3D() & AttachEntityObject : IMA

Message par falsam »

comtois a écrit :C'est corrigé pour la prochaine version.
Merci pour cette réactivité Comtois et merci aussi d'avoir apporter une correction à CameraFollow() qui provoquait un IMA quand on essayait de suivre un node. :)
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre