{"id":17250095,"url":"https://github.com/stephengold/v-sport","last_synced_at":"2026-01-18T22:07:55.653Z","repository":{"id":179154016,"uuid":"663036734","full_name":"stephengold/V-Sport","owner":"stephengold","description":"A Vulkan-based 3-D graphics engine, written in Java (code has New BSD license)","archived":false,"fork":false,"pushed_at":"2025-12-31T22:30:58.000Z","size":3904,"stargazers_count":16,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2026-01-05T10:47:04.585Z","etag":null,"topics":["3d-graphics","assimp","engine","glfw","graphics-engine","java","joml","jvm-library","library","lwjgl3","open-source","phong","vulkan","vulkan-engine"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stephengold.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-07-06T12:19:31.000Z","updated_at":"2025-12-31T22:31:02.000Z","dependencies_parsed_at":null,"dependency_job_id":"e2cb7b9e-43cf-4c0e-bc0e-3880d0be45b5","html_url":"https://github.com/stephengold/V-Sport","commit_stats":null,"previous_names":["stephengold/v-sport"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/stephengold/V-Sport","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stephengold%2FV-Sport","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stephengold%2FV-Sport/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stephengold%2FV-Sport/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stephengold%2FV-Sport/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stephengold","download_url":"https://codeload.github.com/stephengold/V-Sport/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stephengold%2FV-Sport/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28552372,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T20:59:07.572Z","status":"ssl_error","status_checked_at":"2026-01-18T20:59:02.799Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["3d-graphics","assimp","engine","glfw","graphics-engine","java","joml","jvm-library","library","lwjgl3","open-source","phong","vulkan","vulkan-engine"],"created_at":"2024-10-15T06:46:11.223Z","updated_at":"2026-01-18T22:07:55.648Z","avatar_url":"https://github.com/stephengold.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg height=\"150\" src=\"https://i.imgur.com/YEPFEcx.png\" alt=\"Libbulletjme Project logo\"\u003e\n\n[The V-Sport Project][project] implements\na [Vulkan]-based graphics engine\nfor the [Libbulletjme 3-D physics library][libbulletjme].\n\nIt contains 2 subprojects:\n\n1. lib: the V-Sport graphics engine (a single JVM runtime library)\n2. apps: demos, tutorial examples, and non-automated test software\n\nComplete source code (in [Java]) is provided under\n[a 3-clause BSD license][license].\n\n\n\u003ca name=\"toc\"\u003e\u003c/a\u003e\n\n## Contents of this document\n\n+ [About V-Sport](#about)\n+ [How to add V-Sport to an existing project](#add)\n+ [How to build and run V-Sport from source](#build)\n+ [Conventions](#conventions)\n+ [What's missing](#todo)\n+ [Acknowledgments](#acks)\n\n\n\u003ca name=\"about\"\u003e\u003c/a\u003e\n\n## About V-Sport\n\nV-Sport is a Simple Physics-ORienTed graphics engine written in Java 1.8.\nIn addition to [Libbulletjme],\nit uses [LWJGL], [Assimp], [GLFW], [JOML], [jSnapLoader], and [Vulkan].\nIt has been tested on Windows, Linux, and macOS.\n\n[Jump to the table of contents](#toc)\n\n\n\u003ca name=\"add\"\u003e\u003c/a\u003e\n\n## How to add V-Sport to an existing project\n\nV-Sport comes pre-built as a single library\nthat can be downloaded from Maven Central or GitHub.\nHowever, the native-library dependencies are intentionally omitted from V-Sport's POM\nso developers can specify *which* Libbulletjme and LWJGL natives should be used.\n\nFor projects built using [Maven] or [Gradle], it is\n*not* sufficient to specify the\ndependency on the V-Sport Library.\nYou must also explicitly specify the native-library dependencies.\n\n### Gradle-built projects\n\nAdd to the project’s \"build.gradle\" or \"build.gradle.kts\" file:\n\n    repositories {\n        mavenCentral()\n    }\n    dependencies {\n        // JVM library:\n        implementation(\"com.github.stephengold:V-Sport:0.9.2\")\n\n        // Libbulletjme native libraries:\n        runtimeOnly(\"com.github.stephengold:Libbulletjme-Linux64:22.0.3:SpDebug\")\n          // Libbulletjme native libraries for other platforms could be added.\n\n        // LWJGL native libraries:\n        runtimeOnly(\"org.lwjgl:lwjgl:3.4.0:natives-linux\")\n        runtimeOnly(\"org.lwjgl:lwjgl-assimp:3.4.0:natives-linux\")\n        runtimeOnly(\"org.lwjgl:lwjgl-glfw:3.4.0:natives-linux\")\n        runtimeOnly(\"org.lwjgl:lwjgl-opengl:3.4.0:natives-linux\")\n          // LWJGL native libraries for other platforms could be added.\n    }\n\nFor some older versions of Gradle,\nit's necessary to replace `implementation` with `compile`.\n\n### Coding a V-Sport application\n\nEvery V-Sport application should extend the `BasePhysicsApp` class,\nwhich provides hooks for:\n\n+ initializing the application,\n+ creating and configuring the application's physics space,\n+ populating the space with physics objects, and\n+ updating the space before each frame is rendered.\n\nThe graphics engine doesn't have a scene graph.\nInstead, it maintains an internal list of renderable objects,\ncalled *geometries*.\nInstantiating a geometry automatically adds it to the list\nand causes it to be visualized.\n\n+ To visualize the world (physics-space) coordinate axes,\n  instantiate one or more `LocalAxisGeometry` objects.\n\nBy default, physics objects are not visualized.\n\n+ To visualize the shape\n  of a `PhysicsCollisionObject` other than a `PhysicsSoftBody`,\n  invoke the `visualizeShape()` method on it.\n+ To visualize the local coordinate axes of a `PhysicsCollisionObject`,\n  invoke the `visualizeAxes()` method on it.\n+ To visualize the wheels of a `PhysicsVehicle`,\n  invoke the `visualizeWheels()` method on the vehicle.\n+ To visualize the bounding box of a `PhysicsCollisionObject`,\n  instantiate an `AabbGeometry` for the object.\n+ To visualize a `Constraint`,\n  instantiate a `ConstraintGeometry` for each end.\n+ To visualize the wind acting on a `PhysicsSoftBody`,\n  instantiate a `WindVelocityGeometry` for the body.\n\n[Jump to the table of contents](#toc)\n\n\n\u003ca name=\"build\"\u003e\u003c/a\u003e\n\n## How to build and run V-Sport from source\n\n### Initial build\n\n1. Install a [Java Development Kit (JDK)][adoptium],\n   version 17 or higher,\n   if you don't already have one.\n2. Point the `JAVA_HOME` environment variable to your JDK installation:\n   (In other words, set it to the path of a directory/folder\n   containing a \"bin\" that contains a Java executable.\n   That path might look something like\n   \"C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.3.7-hotspot\"\n   or \"/usr/lib/jvm/java-17-openjdk-amd64/\" or\n   \"/Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home\" .)\n  + using Bash or Zsh: `export JAVA_HOME=\"` *path to installation* `\"`\n  + using [Fish]: `set -g JAVA_HOME \"` *path to installation* `\"`\n  + using Windows Command Prompt: `set JAVA_HOME=\"` *path to installation* `\"`\n  + using PowerShell: `$env:JAVA_HOME = '` *path to installation* `'`\n3. Download and extract the V-Sport source code from GitHub:\n  + using [Git]:\n    + `git clone https://github.com/stephengold/V-Sport.git`\n    + `cd V-Sport`\n4. Run the [Gradle] wrapper:\n  + using Bash or Fish or PowerShell or Zsh: `./gradlew build`\n  + using Windows Command Prompt: `.\\gradlew build`\n\nAfter a successful build,\nMaven artifacts will be found in \"lib/build/libs\".\n\nYou can install the artifacts to your local Maven repository:\n+ using Bash or Fish or PowerShell or Zsh: `./gradlew install`\n+ using Windows Command Prompt: `.\\gradlew install`\n\n### Tutorials\n\nThe tutorial apps all have names starting with \"Hello\".\nFor instance, the first tutorial app is named \"HelloSport\".\n\nTo execute \"HelloSport\":\n+ using Bash or Fish or PowerShell or Zsh: `./gradlew HelloSport`\n+ using Windows Command Prompt: `.\\gradlew HelloSport`\n\n### Demos\n\nSeven demo applications are included:\n+ ConveyorDemo\n+ NewtonsCradle\n+ Pachinko\n+ SplitDemo\n+ TestGearJoint\n+ ThousandCubes\n+ Windlass\n\nDocumentation for the demo apps is at\nhttps://stephengold.github.io/Libbulletjme/lbj-en/English/demos.html\n\n### Chooser\n\nA Swing-based chooser application is included.\nHowever, it doesn't work on macOS yet.\n\nTo run the chooser:\n+ using Bash or Fish or PowerShell or Zsh: `./gradlew AppChooser`\n+ using Windows Command Prompt: `.\\gradlew AppChooser`\n\n### Cleanup\n\nYou can restore the project to a pristine state:\n+ using Bash or Fish or PowerShell or Zsh: `./gradlew clean`\n+ using Windows Command Prompt: `.\\gradlew clean`\n\nNote:  these commands will delete any downloaded native libraries.\n\n[Jump to the table of contents](#toc)\n\n\n\u003ca name=\"conventions\"\u003e\u003c/a\u003e\n\n## Conventions\n\nPackage names begin with `com.github.stephengold` or `jme3utilities.minie`.\n\nThe source code and pre-built libraries are compatible with JDK 8.\n\nRotation signs, polygon windings, and 3-D coordinate axes\nare right-handed/counter-clockwise unless otherwise noted.\n\nAngles are quantified in *radians* unless otherwise noted.\n\nThe world coordinate system is assumed to be Z-forward, Y-up.\n\n[Jump to the table of contents](#toc)\n\n\n\u003ca name=\"todo\"\u003e\u003c/a\u003e\n\n## What's missing\n\nThis project is incomplete.\nFuture enhancements might include:\n\n+ handle more than 1600 geometries\n+ dynamic meshes (for visualizing soft bodies)\n+ pre-compiled shaders\n+ graphics and physics on separate threads\n+ graphical user interface\n+ automated tests\n+ shadow rendering\n+ physically-based rendering\n+ more performance statistics\n+ sound effects\n+ skeletal animation\n+ run on mobile platforms (Android and/or iOS)\n\n[Jump to the table of contents](#toc)\n\n\n\u003ca name=\"acks\"\u003e\u003c/a\u003e\n\n## Acknowledgments\n\nPortions of the V-Sport Project are derived from [Vulkan-Tutorial-Java][vtj]\nby Cristian Herrera, which was in turn ported from\n[Alexander Overvoorde's Vulkan tutorial][vt].\nI am deeply grateful for all the work that went into these invaluable tutorials.\n\nThe ConveyorDemo app derives from source code\ncontributed by \"qwq\" in March 2022.\n\nThe ThousandCubes app derives from source code contributed by Yanis Boudiaf.\n\nThis project has made use of the following libraries and software tools:\n\n  + the [Checkstyle] tool\n  + the [Firefox] web browser\n  + the [Git] revision-control system and GitK commit viewer\n  + the [GitKraken] client\n  + the [GLFW] library\n  + the [Gradle] build tool\n  + the [Java] compiler, standard doclet, and runtime environment\n  + [the Java OpenGL Math Library][joml]\n  + the [jSnapLoader] dynamic-library loader\n  + [the Lightweight Java Gaming Library][lwjgl]\n  + the [Linux Mint][mint] operating system\n  + the [Markdown] document-conversion tool\n  + the [Meld] visual merge tool\n  + the [NetBeans] integrated development environment\n  + [the Open Asset Import (Assimp) Library][assimp]\n  + [the shaderc project][shaderc]\n  + Microsoft Windows\n  + the [Vulkan] API\n\nI am grateful to [GitHub] and [Imgur]\nfor providing free hosting for this project\nand many other open-source projects.\n\nI'm also grateful to my dear Holly, for keeping me sane.\n\nIf I've misattributed anything or left anyone out, please let me know, so I can\ncorrect the situation: sgold@sonic.net\n\n[Jump to the table of contents](#toc)\n\n\n[adoptium]: https://adoptium.net/releases.html \"Adoptium Project\"\n[assimp]: https://www.assimp.org/ \"The Open Asset Importer Library\"\n[checkstyle]: https://checkstyle.org \"Checkstyle\"\n[firefox]: https://www.mozilla.org/en-US/firefox \"Firefox\"\n[fish]: https://fishshell.com/ \"Fish command-line shell\"\n[git]: https://git-scm.com \"Git\"\n[github]: https://github.com \"GitHub\"\n[gitkraken]: https://www.gitkraken.com \"GitKraken client\"\n[glfw]: https://www.glfw.org \"GLFW Library\"\n[gradle]: https://gradle.org \"Gradle Project\"\n[imgur]: https://imgur.com/ \"Imgur\"\n[java]: https://en.wikipedia.org/wiki/Java_(programming_language) \"Java programming language\"\n[joml]: https://joml-ci.github.io/JOML \"Java OpenGL Math Library\"\n[jsnaploader]: https://github.com/Electrostat-Lab/jSnapLoader \"the jSnapLoader Project\"\n[libbulletjme]: https://stephengold.github.io/Libbulletjme/lbj-en/English/overview.html \"Libbulletjme Project\"\n[license]: https://github.com/stephengold/V-Sport/blob/master/LICENSE \"V-Sport license\"\n[lwjgl]: https://www.lwjgl.org \"Lightweight Java Game Library\"\n[markdown]: https://daringfireball.net/projects/markdown \"Markdown Project\"\n[maven]: https://maven.apache.org \"Maven Project\"\n[meld]: https://meldmerge.org \"Meld merge tool\"\n[mint]: https://linuxmint.com \"Linux Mint Project\"\n[netbeans]: https://netbeans.org \"NetBeans Project\"\n[project]: https://github.com/stephengold/V-Sport \"V-Sport Project\"\n[shaderc]: https://github.com/google/shaderc \"shaderc project\"\n[vt]: https://vulkan-tutorial.com/\n[vtj]: https://github.com/Naitsirc98/Vulkan-Tutorial-Java \"Vulkan tutorial in Java\"\n[vulkan]: https://www.vulkan.org/ \"Vulkan API\"\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstephengold%2Fv-sport","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstephengold%2Fv-sport","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstephengold%2Fv-sport/lists"}