Skip to main content

VecGL is a 3D rendering engine with vector output

Project description

VecGL

CI

VecGL is a 3D rendering engine with vector output. It is inspired by OpenGL with the key difference that the rendering result is a set of points, lines, and triangles - not a pixelated image. These geometric primitives can be used to generate vector graphics or to drive pen plotters.

Getting started

The VecGL package is available through pip.

$ python3 -m pip install vecgl

Let's create and render a simple model. Here's the complete example for a sphere.

from math import pi

from vecgl.export import write_svg
from vecgl.linalg import (get_frustum_mat4, get_rotate_x_mat4,
                          get_rotate_y_mat4, get_translate_mat4, mul_mat4)
from vecgl.modellib import get_sphere_model
from vecgl.rendering import render
from vecgl.viewer import perspective_update_fn, show, show_interactively

# Get a predefined sphere model and choose nice colors.
# The sphere will span from -1.0 to 1.0 in all dimensions.
sphere = get_sphere_model(16, 32, "lightblue", "black")

# Look at the model interactively.
show_interactively(sphere, perspective_update_fn())

# Define the view and the projection transforms.
view_mat4 = mul_mat4(
    get_translate_mat4(0.0, 0.0, -2.0),
    get_rotate_x_mat4(-0.2 * pi),
    get_rotate_y_mat4(0.15 * pi),
)
projection_mat4 = get_frustum_mat4(-1.0, 1.0, -1.0, 1.0, 1.0, 100.0)

# Transform our sphere model and bring it to the clip space.
transform_mat4 = mul_mat4(projection_mat4, view_mat4)
sphere_in_ndc = sphere.transform(transform_mat4)

# Render, display, and export the model.
rendered = render(sphere_in_ndc)
show(rendered)
write_svg(rendered, "sphere.svg")

# You can access the vector-based rendering result through the rendered model.
for ln in rendered.lines:
    print(ln)

VecGL will render and display the sphere and print the vector-based rendering result to stdout.

This is an image

Build and run tests

Clone the repository.

$ git clone git@github.com:frgossen/vecgl.git
$ cd vecgl

Create a virtual environment and activate it (recommended).

$ python3 -m venv .venv
$ source .venv/bin/activate

Install all requirements in the virtual environment.

$ python3 -m pip install -r requirements.txt

Install the vecgl package in editable mode. This makes the package (and your changes) available when running the tests.

$ python3 -m pip install --editable .

You're all set for contributing back to the project. Run the tests with ...

$ python3 -m pytest --benchmark-skip

... and the benchmarks with ...

$ python3 -m pytest --benchmark-only

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vecgl-0.0.5.tar.gz (46.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vecgl-0.0.5-py3-none-any.whl (16.5 kB view details)

Uploaded Python 3

File details

Details for the file vecgl-0.0.5.tar.gz.

File metadata

  • Download URL: vecgl-0.0.5.tar.gz
  • Upload date:
  • Size: 46.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.1

File hashes

Hashes for vecgl-0.0.5.tar.gz
Algorithm Hash digest
SHA256 9d87055e1121a479d15e24ade07f7ae57295578ea42a33275982d70e336aa0d1
MD5 4785a095d6d8c43ac7502babb6696b1f
BLAKE2b-256 5f6cc9f651a81f78e8c5761c7cf101ac1da20ab77908ee3786c04450ba6becdc

See more details on using hashes here.

File details

Details for the file vecgl-0.0.5-py3-none-any.whl.

File metadata

  • Download URL: vecgl-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 16.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.1

File hashes

Hashes for vecgl-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 e40dc324f8ab9b095b4971befe4e4f2de5c374a6bd707688b0630a3be58bc099
MD5 20f50165928ab3eeeb0ac57c80ce4367
BLAKE2b-256 61569977a3a7e32b5d518d91c6462f76da8e1c8d3f26a2f7127e4a9bb157935f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page