Imposible to display a Text3D above entities.

Everything related to 3D programming
User avatar
falsam
Enthusiast
Enthusiast
Posts: 635
Joined: Wed Sep 21, 2011 9:11 am
Location: France
Contact:

Imposible to display a Text3D above entities.

Post by falsam »

This code works

Code: Select all

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
But if I want to manage a number of unidentified bodies, I use a linked list.

But it's the drama! :cry:

This code does not work. (Acces memory error)

Code: Select all

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
I need your help. thank you :)

➽ Windows 11 64-bit - PB 6.21 x64 - AMD Ryzen 7 - NVIDIA GeForce GTX 1650 Ti

Sorry for my bad english and the Dunning–Kruger effect 🤪
IdeasVacuum
Always Here
Always Here
Posts: 6426
Joined: Fri Oct 23, 2009 2:33 am
Location: Wales, UK
Contact:

Re: Imposible to display a Text3D above entities.

Post by IdeasVacuum »

[PB5.20 WinXPx86]

It very much looks like a bug - as though either AttachEntityObject() or Text3DID() cannot accept 'high' numbers.
I note that although it works (and there is a 2012 example in the Help), Text3DID() is not listed for use with AttachEntityObject() in the Help for AttachEntityObject() - probably a 'red herring', just an omission from the Help.

Edit: Another way of ensuring 'low numbers'

Code: Select all

iID.i = 1

For X=-3 To 3 Step 2
  AddElement(Players())
  
                     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
Debug Players()\Entity
Debug Players()\Text3D
  Text3DAlignment(Players()\Text3D, #PB_Text3D_HorizontallyCentered)
  AttachEntityObject(Players()\Entity, "", Text3DID(Players()\Text3D))
  MoveText3D(Players()\Text3D, 0.5, 0.5, 0)
  iID = iID + 1
Next
IdeasVacuum
If it sounds simple, you have not grasped the complexity.
User avatar
falsam
Enthusiast
Enthusiast
Posts: 635
Joined: Wed Sep 21, 2011 9:11 am
Location: France
Contact:

Re: Imposible to display a Text3D above entities.

Post by falsam »

IdeasVacuum thank you very much for your help. I'll try to find a solution with your code. :)

➽ Windows 11 64-bit - PB 6.21 x64 - AMD Ryzen 7 - NVIDIA GeForce GTX 1650 Ti

Sorry for my bad english and the Dunning–Kruger effect 🤪
Post Reply