502_LSCMParam.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import igl
  2. V = igl.eigen.MatrixXd()
  3. F = igl.eigen.MatrixXi()
  4. V_uv = igl.eigen.MatrixXd()
  5. def key_down(viewer, key, modifier):
  6. if key == ord('1'):
  7. # Plot the 3D mesh
  8. viewer.data.set_mesh(V,F)
  9. viewer.core.align_camera_center(V,F)
  10. elif key == ord('2'):
  11. # Plot the mesh in 2D using the UV coordinates as vertex coordinates
  12. viewer.data.set_mesh(V_uv,F)
  13. viewer.core.align_camera_center(V_uv,F)
  14. viewer.data.compute_normals()
  15. return False
  16. # Load a mesh in OFF format
  17. igl.readOFF("../tutorial/shared/camelhead.off", V, F);
  18. # Fix two points on the boundary
  19. bnd = igl.eigen.MatrixXi()
  20. b = igl.eigen.MatrixXi(2,1)
  21. igl.boundary_loop(F,bnd)
  22. b[0] = bnd[0]
  23. b[1] = bnd[int(bnd.size()/2)]
  24. bc = igl.eigen.MatrixXd([[0,0],[1,0]])
  25. # LSCM parametrization
  26. igl.lscm(V,F,b,bc,V_uv)
  27. # Scale the uv
  28. V_uv *= 5
  29. # Plot the mesh
  30. viewer = igl.viewer.Viewer()
  31. viewer.data.set_mesh(V, F)
  32. viewer.data.set_uv(V_uv)
  33. viewer.callback_key_down = key_down
  34. # Disable wireframe
  35. viewer.core.show_lines = False
  36. # Draw checkerboard texture
  37. viewer.core.show_texture = True
  38. # Launch the viewer
  39. viewer.launch()