curv3d / curv

a language for making art using mathematics
Apache License 2.0
1.14k stars 73 forks source link
3d creative-coding csg function-representation functional-language generative-art language signed-distance-field solid-modeling

================================================= Curv: a language for making art using mathematics

By Doug Moen doug@moens.org

Note: This repository has migrated to https://codeberg.org/doug-moen/curv.

|twistor| |shreks_donut|

.. |twistor| image:: docs/images/torus.png .. |shreks_donut| image:: docs/images/shreks_donut.png

Curv is a programming language for creating art using mathematics. It's a 2D and 3D geometric modelling tool that supports full colour, animation and 3D printing.

Features:

Getting Started

Community

There is a high volume chat room.

There is a Github Discussions page: <https://github.com/curv3d/curv/discussions>_.

There is a low-volume mailing list: curv@googlegroups.com, connected to a web forum: <https://groups.google.com/d/forum/curv>_. You can join the mailing list using your Google account (or you'll be prompted to create an account).

Hardware and OS Requirements

Linux, MacOS (intel & apple silicon) and Windows (native & WSL) are supported.

In order to export meshes (STL files, etc) using the fast -Ojit method, you need to have a C++ compiler installed (GCC or Clang), and you need the glm C++ math library installed. These things will already be installed if you have built Curv from scratch using the build instructions. Otherwise, if you are using a prebuilt binary, you may want to install these things. Either way, see <BUILD.md>_.

Curv uses OpenGL 3.3. The recommended configuration is a GPU made by Intel, AMD or Nvidia, using a known working GPU driver (see below).

Curv is not as GPU intensive as AAA video games. Integrated graphics will work fine for most stuff. But you can definitely write Curv code that will benefit from expensive discrete graphics.

Why is Curv so picky about GPU drivers and hardware, when [some old 3D software] runs just fine? The answer is that old 3D software relies primarily on triangle meshes for representing and rendering 3D shapes, whereas Curv uses signed distance fields to represent shapes. Signed distance fields are a powerful, hot new technology that is only made practical by modern GPUs. Curv uses shader programs to render shapes, and uses larger and more complex shader programs than [some old 3D software]. This places a heavy and atypical load on the GPU driver and hardware, which old hardware and old, outdated driver software may not be prepared to deal with.

.. TurboVNC: https://turbovnc.org/About/Introduction .. VirtualGL: https://virtualgl.org/About/Introduction .. issue #78: https://github.com/curv3d/curv/issues/78 .. issue #88: https://github.com/curv3d/curv/issues/88 .. issue #30: https://github.com/curv3d/curv/issues/30 .. The open source AMD driver has a bug: https://bugs.freedesktop.org/show_bug.cgi?id=105371