Note
Go to the end to download the full example code
Hello text¶
Example showing text in world and screen space.
![hello text](../../_images/sphx_glr_hello_text_001.webp)
from time import perf_counter
import pygfx as gfx
import pylinalg as la
scene = gfx.Scene()
# Create a plane to put attach text to
plane = gfx.Mesh(
gfx.box_geometry(20, 20, 1),
gfx.MeshPhongMaterial(color=(0.2, 0.4, 0.6, 1.0)),
)
scene.add(plane)
# Create two texts, one on each side of the plane
text1 = gfx.Text(
gfx.TextGeometry("Hello world", font_size=2.8),
gfx.TextMaterial(color="#ddd"),
)
text1.local.position = (0, 0, 0.55)
plane.add(text1)
text2 = gfx.Text(
gfx.TextGeometry("Здравей свят", font_size=2.8),
gfx.TextMaterial(color="#ddd"),
)
text2.local.position = (0, 0, -0.55)
text2.local.scale = (-1, 1, 1)
plane.add(text2)
# Another text in screen space. Also shows markdown formatting
text3 = gfx.Text(
gfx.TextGeometry(
markdown=" **Screen** space",
screen_space=True,
font_size=20,
anchor="bottomleft",
),
gfx.TextMaterial(color="#0f4"),
)
text3.local.position = (10, 10, 0)
plane.add(text3)
# Let there be ...
scene.add(gfx.AmbientLight())
light = gfx.DirectionalLight()
light.local.position = (0, 0, 1)
scene.add(light)
t_last = perf_counter()
def before_render():
global t_last
t_new = perf_counter()
dt = t_new - t_last
t_last = t_new
rot = la.quat_from_euler((0.25 * dt, 0.5 * dt), order="XY")
plane.local.rotation = la.quat_mul(rot, plane.local.rotation)
disp = gfx.Display(before_render=before_render)
if __name__ == "__main__":
disp.show(scene)
Total running time of the script: (0 minutes 15.322 seconds)