[solved] TextNodePath

I’m trying to display names above my panda avatars. not sure if it’s the best way of doing it but I used TextNode.
The tutorial ( http://www.panda3d.org/manual/index.php/Text_Node ) only gives an example of aspect2d but how would you go about putting the text in 3D? I tried parenting the node to my avatar but the text won’t display.

here is the example from tutorial:

text = TextNode(‘node name’)
text.setText(“Every day in every way I’m getting better and better.”)
textNodePath = aspect2d.attachNewNode(text)
textNodePath.setScale(0.07)

with aspect 2d, the text stays in the center of my view. I changed “aspect2d” to my avatar object but the text won’t display…

any idea how to make this work? I’m new to panda3d and would appreciate any help! :stuck_out_tongue:

It is possible to display text in the 3D-space, but wouldn’t it be nicer, if you map the 3D-coordinates of your avatar / enemy / whatever to display coordinates? That would mean: the text has everytime the same size, no matter how far the avatar is away. This should help you: Librocket over node [Solved]

Thank you very much! :slight_smile:

Follow up question, feel free to ignore. I know I’m supposed to learn :stuck_out_tongue:

It displayed text but as my avatar moves, texts from each of the previous frames will stay on screen and overlap with each other. is there an easy way to resolve that?

Are you creating new text or moving the old, previous created text? Some code would be helpful.

I create it this way: remoteNames is a dictionary with (int, OnscreenText) pairs

	if base.camLens.project(p3, p2):
	   r2d = Point3(p2[0], 0, p2[1])
	   a2d = aspect2d.getRelativePoint(render2d, r2d) 
	   nameText = OnscreenText(text = name, pos = a2d, scale = 0.07)
	   self.remoteNames[id] = nameText

update it’s position when it moves:
fint a2d the same way as above
if base.camLens.project(p3, p2):
r2d = Point3(p2[0], 0, p2[1])
a2d = aspect2d.getRelativePoint(render2d, r2d)
self.remoteNames[id].pos = a2d

I think my problem is that I’m not resetting the position correctly?

		if base.camLens.project(p3, p2):
		   r2d = Point3(p2[0], 0, p2[1])
		   a2d = aspect2d.getRelativePoint(render2d, r2d) 
		   nameText = OnscreenText(text = name, pos = a2d, scale = 0.07)

You create a new OnscreenText every frame. Create the OnscreenText at the same time you create the avatar, then every frame update the position. And your code is easier readable in the forum with Codetags.

Fixed :slight_smile: thank you :smiley:

And I’ll use codetag next time :blush: