Graphics in Julia
A guide on making graphics visualizations in Julia
MeshCat
MeshCat.jl is a Julia wrapper around three.js. It creates its own server and opens a webpage to access the server.
Getting Started
- Install Julia
- Make a new project
Geometry
MeshCat.jl and GeometryTypes.jl both come with a variety of basic geometries such as HyperRectangle
and PointCloud
.
You can also create your own geometry by calling the HomogenousMesh function with your own vertices, normals, triangles/faces, and uvs/texturecoordinates.
Creating Geometry
Example of how to create a quad:
using GeometryTypes
# Load the texture
image = PngImage(joinpath(@__DIR__, "circuit_pattern.png"))
texture = Texture(image=image)
# Make the material from the texture
# TODO: Figure out how to set `mat.transparent = true` from within Julia
material = MeshLambertMaterial(map=texture)
# Make the geometry
quadGeometry = HomogenousMesh(
vertices = [Point(0,0,0), Point(0,1,0), Point(0, 0, 1), Point(0, 1, 1)],
normals = [Point(1,0,0),Point(1,0,0),Point(1,0,0),Point(1,0,0)],
faces = [Triangle(1,2,3), Triangle(2,3,4)],
texturecoordinates = [Point(0.0f0,0), Point(1.0f0,0), Point(0.0f0,1), Point(1.0f0,1)]
);
# Add the object to the scene
setobject!(vis["myquad"], quadGeometry , material)
# Set the position
settransform!(vis["myquad"], Translation(0.5, -0.5, 0.5))
Loading Geometry
using GeometryTypes: GLUVMesh # we need a mesh type that stores texture coordinates
image = PngImage(joinpath(@__DIR__, "..", "data", "HeadTextureMultisense.png"))
texture = Texture(image=image)
material = MeshLambertMaterial(map=texture)
geometry = load(joinpath(MeshCat.VIEWER_ROOT, "..", "data", "head_multisense.obj"), GLUVMesh)
setobject!(vis["robots", "valkyrie", "head"], geometry, material)
settransform!(vis["robots", "valkyrie"], Translation(0.5, -0.5, 0.5))
Updating Geometry
After you update your geometry, say by changing your vertex positions,
you need to call setobject!
again for it to update.