Impossible d'afficher n texte3D sur plusieurs entités

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 :

Impossible d'afficher n texte3D sur plusieurs entités

Message par falsam »

Bonjour.
Je n'arrive pas à mettre un Texte3D sur différentes entités.

Ce code fonctionne

Code : Tout sélectionner

Enumeration Window
  #MainForm  
EndEnumeration

Enumeration Entity
  #Cube1
  #Cube2
  #Cube3
  #Cube4
EndEnumeration

Enumeration Text3D
  #T3D1
  #T3D2
  #T3D3
  #T3D4
EndEnumeration

Enumeration Camera
  #Camera
EndEnumeration

InitEngine3D()
InitKeyboard()
InitSprite()
InitMouse()

Add3DArchive(#PB_Compiler_Home+"Examples/3D/Data/fonts", #PB_3DArchive_FileSystem)  
Parse3DScripts()
OpenWindow(#MainForm, 0, 0, 1024, 768, "Texte 3D")
OpenWindowedScreen(WindowID(#MainForm),0,0,1024,768)

CreateEntity(#Cube1, MeshID(CreateCube(#PB_Any, 1)), #PB_Material_None, -3, 0, 0)
CreateText3D(#T3D1, Str(#Cube1), "BlueHighway-16", 0.3, RGBA(255, 0, 0, 255))
Text3DAlignment(#T3D1, #PB_Text3D_HorizontallyCentered)
AttachEntityObject(#Cube1, "", Text3DID(#T3D1))
MoveText3D(#T3D1, 0.5, 0.5, 0)

CreateEntity(#Cube2, MeshID(CreateCube(#PB_Any, 1)), #PB_Material_None, -1, 0, 0)
CreateText3D(#T3D2, Str(#Cube2), "BlueHighway-16", 0.3, RGBA(255, 0, 0, 255))
Text3DAlignment(#T3D2, #PB_Text3D_HorizontallyCentered)
AttachEntityObject(#Cube2, "", Text3DID(#T3D2))
MoveText3D(#T3D2, 0.5, 0.5, 0)

CreateEntity(#Cube3, MeshID(CreateCube(#PB_Any, 1)), #PB_Material_None,  1, 0, 0)
CreateText3D(#T3D3, Str(#Cube3), "BlueHighway-16", 0.3, RGBA(255, 0, 0, 255))
Text3DAlignment(#T3D3, #PB_Text3D_HorizontallyCentered)
AttachEntityObject(#Cube3, "", Text3DID(#T3D3))
MoveText3D(#T3D3, 0.5, 0.5, 0)

CreateEntity(#Cube4, MeshID(CreateCube(#PB_Any, 1)), #PB_Material_None,  3, 0, 0)
CreateText3D(#T3D4, Str(#Cube4), "BlueHighway-16", 0.3, RGBA(255, 0, 0, 255))
Text3DAlignment(#T3D4, #PB_Text3D_HorizontallyCentered)
AttachEntityObject(#Cube4, "", Text3DID(#T3D4))
MoveText3D(#T3D4, 0.5, 0.5, 0)

CreateCamera(#Camera, 0, 0, 100, 100)

While #True
    
  Event = WindowEvent()    
  ExamineKeyboard()    
  
  If Event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)
    Break
  EndIf      
  
  MoveCamera(#Camera, 0, 0, 10, #PB_Absolute)
  CameraLookAt(#camera,0,0,0)
  
  ClearScreen(RGB(0, 0, 0))
  RenderWorld()
  FlipBuffers()  
Wend
Mais si je veux gérer un nombre d'entités indéterminés, je suis obligé de passer par une liste chainée.

Et là .... c'est le drame !!!! Le code suivant génére une erreur de compilation.

Code : Tout sélectionner

Enumeration
  #MainForm
EndEnumeration

Enumeration Camera
  #Camera
EndEnumeration

Structure User
  Entity.i
  Text3D.i
EndStructure
NewList Players.User()


InitEngine3D()
InitKeyboard()
InitSprite()
InitMouse()

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

OpenWindow(#MainForm, 0, 0, 1024, 768, "Texte 3D")
OpenWindowedScreen(WindowID(#MainForm),0 ,0 , 1024, 768)

For X=-3 To 3 Step 2
  AddElement(Players())
  
  Players()\Entity = CreateEntity(#PB_Any, MeshID(CreateCube(#PB_Any, 1)), #PB_Material_None, -X, 0, 0)
  Players()\Text3D = CreateText3D(#PB_Any, Str(Players()\Entity), "BlueHighway-16", 0.3, RGBA(255, 0, 0, 255))
  Text3DAlignment(Players()\Text3D, #PB_Text3D_HorizontallyCentered)
  AttachEntityObject(Players()\Entity, "", Text3DID(Players()\Text3D))
  MoveText3D(Players()\Text3D, 0.5, 0.5, 0)
Next

CreateCamera(#Camera, 0, 0, 100, 100)

While #True
    
  Event = WindowEvent()    
  ExamineKeyboard()    
  
  If Event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)
    Break
  EndIf      
  
  MoveCamera(#Camera, 0, 0, 10, #PB_Absolute)
  CameraLookAt(#camera,0,0,0)
  
  ClearScreen(RGB(0, 0, 0))
  RenderWorld()
  FlipBuffers()  
Wend
Merci de vôtre aide :)
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%
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Impossible d'afficher n texte3D sur plusieurs entités

Message par graph100 »

Bonsoir Falsam, j'ai jeté un oeil à ton problème, il me semble que c'est bien un bug, et qui touche à la création de plusieurs Text3D avec #pb_any.

avec ton 1er code on peut constater que si on utilise #Pb_any une seule fois, tout va bien. Mais si on crée un autre text3D avec #pb_any, ca plante.

Code : Tout sélectionner

Enumeration Window
	#MainForm  
EndEnumeration

Enumeration Entity
	#Cube1
	#Cube2
	#Cube3
	#Cube4
EndEnumeration

Enumeration Text3D
	#T3D1
	#T3D2
	#T3D3
	#T3D4
EndEnumeration

Enumeration Camera
	#Camera
EndEnumeration

InitEngine3D()
InitKeyboard()
InitSprite()
InitMouse()

Add3DArchive(#PB_Compiler_Home+"Examples/3D/Data/fonts", #PB_3DArchive_FileSystem)  
Parse3DScripts()
OpenWindow(#MainForm, 0, 0, 1024, 768, "Texte 3D")
OpenWindowedScreen(WindowID(#MainForm),0,0,1024,768)

CreateEntity(#Cube1, MeshID(CreateCube(#PB_Any, 1)), #PB_Material_None, -3, 0, 0)
CreateText3D(#T3D1, Str(#Cube1), "BlueHighway-16", 0.3, RGBA(255, 0, 0, 255))
Text3DAlignment(#T3D1, #PB_Text3D_HorizontallyCentered)
AttachEntityObject(#Cube1, "", Text3DID(#T3D1))
MoveText3D(#T3D1, 0.5, 0.5, 0)

CreateEntity(#Cube2, MeshID(CreateCube(#PB_Any, 1)), #PB_Material_None, -1, 0, 0)
CreateText3D(#T3D2, Str(#Cube2), "BlueHighway-16", 0.3, RGBA(255, 0, 0, 255))
Text3DAlignment(#T3D2, #PB_Text3D_HorizontallyCentered)
AttachEntityObject(#Cube2, "", Text3DID(#T3D2))
MoveText3D(#T3D2, 0.5, 0.5, 0)

; D'origine

; CreateEntity(#Cube3, MeshID(CreateCube(#PB_Any, 1)), #PB_Material_None,  1, 0, 0)
; CreateText3D(#T3D3, Str(#Cube3), "BlueHighway-16", 0.3, RGBA(255, 0, 0, 255))
; Text3DAlignment(#T3D3, #PB_Text3D_HorizontallyCentered)
; AttachEntityObject(#Cube3, "", Text3DID(#T3D3))
; MoveText3D(#T3D3, 0.5, 0.5, 0)


; avec l'entity en #pb_any

; cube3 = CreateEntity(#PB_Any, MeshID(CreateCube(#PB_Any, 1)), #PB_Material_None,  1, 0, 0)
; CreateText3D(#T3D3, Str(cube3), "BlueHighway-16", 0.3, RGBA(255, 0, 0, 255))
; Text3DAlignment(#T3D3, #PB_Text3D_HorizontallyCentered)
; AttachEntityObject(cube3, "", Text3DID(#T3D3))
; MoveText3D(#T3D3, 0.5, 0.5, 0)

; avec le Texte 3d en pb_any

CreateEntity(#Cube3, MeshID(CreateCube(#PB_Any, 1)), #PB_Material_None,  1, 0, 0)
t3_id = CreateText3D(#PB_Any, Str(#Cube3), "BlueHighway-16", 0.3, RGBA(255, 0, 0, 255))
Text3DAlignment(t3_id, #PB_Text3D_HorizontallyCentered)
AttachEntityObject(#Cube3, "", Text3DID(t3_id))
MoveText3D(t3_id, 0.5, 0.5, 0)


; cube4 = CreateEntity(#PB_Any, MeshID(CreateCube(#PB_Any, 1)), #PB_Material_None,  3, 0, 0)
; id = CreateText3D(#PB_Any, Str(cube4), "BlueHighway-16", 0.3, RGBA(255, 0, 0, 255))
; Text3DAlignment(id, #PB_Text3D_HorizontallyCentered)
; AttachEntityObject(cube4, "", Text3DID(id))
; MoveText3D(id, 0.5, 0.5, 0)

CreateEntity(#Cube4, MeshID(CreateCube(#PB_Any, 1)), #PB_Material_None,  3, 0, 0)
id = CreateText3D(#PB_Any, Str(#Cube4), "BlueHighway-16", 0.3, RGBA(255, 0, 0, 255))
Text3DAlignment(id, #PB_Text3D_HorizontallyCentered)
AttachEntityObject(#Cube4, "", Text3DID(id))
MoveText3D(id, 0.5, 0.5, 0)

; CreateEntity(#Cube4, MeshID(CreateCube(#PB_Any, 1)), #PB_Material_None,  3, 0, 0)
; CreateText3D(#T3D4, Str(#Cube4), "BlueHighway-16", 0.3, RGBA(255, 0, 0, 255))
; Text3DAlignment(#T3D4, #PB_Text3D_HorizontallyCentered)
; AttachEntityObject(#Cube4, "", Text3DID(#T3D4))
; MoveText3D(#T3D4, 0.5, 0.5, 0)

CreateCamera(#Camera, 0, 0, 100, 100)

While #True
		
	Event = WindowEvent()    
	ExamineKeyboard()    
	
	If Event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)
		Break
	EndIf      
	
	MoveCamera(#Camera, 0, 0, 10, #PB_Absolute)
	CameraLookAt(#camera,0,0,0)
	
	ClearScreen(RGB(0, 0, 0))
	RenderWorld()
	FlipBuffers()  
Wend
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Impossible d'afficher n texte3D sur plusieurs entités

Message par falsam »

Bonjour graph100. J'aurais préféré que tu ne me confirmes pas ce que je pense aussi être un bug. J'ai posté ce code sur le forum anglais et j'ai eu aussi une réponse qui confirme ce comportement étrange :

C'est comme si chaque AttachEntityObject() ne pouvait accepter une entité ayant un numéro de gadget trop élevé.

Merci de t'être pencher sur ce problème :)

J'ajoute que l'objet CreateText3D() n'accepte pas de couleur RGB contrairement à ce que dit la documentation (Pour obtenir une couleur valide, utilisez RGB().) Actuellement il faut utiliser une couleur RGBA.
Dernière modification par falsam le mer. 23/oct./2013 7:20, 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%
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Impossible d'afficher n texte3D sur plusieurs entités

Message par falsam »

Une solution proposer par IdeasVacuum sur le forum anglais consiste à forcer l'identifiant de l'entité plutôt que d'utiliser #PB_Any.

Ce qui confirme que AttachEntityObject() n'accepte pas une entité ayant un numéro de gadget trop élevé.

Code : Tout sélectionner

InitEngine3D()
InitKeyboard()
InitSprite()
InitMouse()

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

OpenWindow(#MainForm, 0, 0, 1024, 768, "Texte 3D")
OpenWindowedScreen(WindowID(#MainForm),0 ,0 , 1024, 768)

iID.i = 1

For X=-3 To 3 Step 2
  AddElement(Players())
  Players()\Entity = CreateEntity(iID, MeshID(CreateCube(#PB_Any, 1)), #PB_Material_None, -X, 0, 0)
  Players()\Entity = iID
  
  CreateText3D(iID, Str(Players()\Entity), "BlueHighway-16", 0.3, RGBA(255, 0, 0, 255))
  Players()\Text3D = iID
  
  Text3DAlignment(Players()\Text3D, #PB_Text3D_HorizontallyCentered)
  AttachEntityObject(Players()\Entity, "", Text3DID(Players()\Text3D))
  MoveText3D(Players()\Text3D, 0.5, 0.5, 0)
  
  iID = iID + 1
Next

CreateCamera(#Camera, 0, 0, 100, 100)

While #True
    
  Event = WindowEvent()    
  ExamineKeyboard()    
  
  If Event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)
    Break
  EndIf      
  
  MoveCamera(#Camera, 0, 0, 10, #PB_Absolute)
  CameraLookAt(#camera,0,0,0)
  
  ClearScreen(RGB(0, 0, 0))
  RenderWorld()
  FlipBuffers()  
Wend
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%
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Impossible d'afficher n texte3D sur plusieurs entités

Message par graph100 »

Oui, mais ce qui est bizarre c'est que le numéro élevé est accepté une fois, et que c'est la 2nd qui plante !
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Impossible d'afficher n texte3D sur plusieurs entités

Message par falsam »

graph100 a écrit :Oui, mais ce qui est bizarre c'est que le numéro élevé est accepté une fois, et que c'est la 2nd qui plante !
j'avoue que je ne comprend pas non plus et j’espère que Fred passera par là pour tester le deuxième code du premier message.
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