diff --git a/.gitea/config/gitversion.yml b/.gitea/config/gitversion.yml new file mode 100644 index 0000000..57caa9e --- /dev/null +++ b/.gitea/config/gitversion.yml @@ -0,0 +1,9 @@ +next-version: 1.0.0 +mode: ContinuousDeployment +assembly-versioning-scheme: MajorMinorPatch +assembly-file-versioning-scheme: MajorMinorPatch + +branches: + main: + regex: ^main$ + increment: Patch \ No newline at end of file diff --git a/.gitea/readme/screenshot.png b/.gitea/readme/screenshot.png new file mode 100644 index 0000000..1eaa408 Binary files /dev/null and b/.gitea/readme/screenshot.png differ diff --git a/.gitea/workflows/analyze.yml b/.gitea/workflows/analyze.yml new file mode 100644 index 0000000..43b0e26 --- /dev/null +++ b/.gitea/workflows/analyze.yml @@ -0,0 +1,34 @@ +name: Analyze code + +on: + push: + branches: + - "dev" + paths: + - "src**" + - "requirements.txt" + pull_request: + branches: + - "dev" + - "main" + paths: + - "src**" + - "requirements.txt" + +jobs: + analyze: + name: Analyze code + steps: + - name: Checkout + uses: actions/checkout@v6 + - name: Set up Python + uses: actions/setup-python@v6 + with: + python-version: "3.10" + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + pip install pylint + - name: Analysing the code with pylint + run: pylint --exit-zero $(git ls-files 'src/*.py') \ No newline at end of file diff --git a/.gitea/workflows/analyze_and_publish.yml b/.gitea/workflows/analyze_and_publish.yml new file mode 100644 index 0000000..7d74b45 --- /dev/null +++ b/.gitea/workflows/analyze_and_publish.yml @@ -0,0 +1,75 @@ +name: Analyze code and publish script + +on: + push: + branches: + - "main" + paths: + - "src**" + - "requirements.txt" + +jobs: + analyze: + name: Analyze code + steps: + - name: Checkout + uses: actions/checkout@v6 + - name: Set up Python + uses: actions/setup-python@v6 + with: + python-version: "3.10" + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + pip install pylint + - name: Analysing the code with pylint + run: pylint --exit-zero $(git ls-files 'src/*.py') + publish: + name: Publish script + needs: analyze + steps: + - name: Checkout + uses: actions/checkout@v6.0.2 + with: + fetch-depth: 0 + - name: Setup .NET + uses: actions/setup-dotnet@v3 + with: + dotnet-version: 10.0.x + - name: Setup GitVersion + uses: gittools/actions/gitversion/setup@v4.2.0 + with: + versionSpec: 6.4.x + - name: Determine version + uses: gittools/actions/gitversion/execute@v4.2.0 + id: gitversion + with: + configFilePath: ./.gitea/config/gitversion.yml + - name: Create package root directory + run: | + mkdir package + mkdir package/3d_renderer + cp -r src/* package/3d_renderer/ + cp requirements.txt package/requirements.txt + - name: Create .TAR.GZ archive + uses: ksm2/archive-action@v1 + with: + format: "tar.gz" + name: 3d_renderer_${{steps.gitversion.outputs.SemVer}} + root-directory: "package" + - name: Create .ZIP archive + uses: ksm2/archive-action@v1 + with: + format: "zip" + name: 3d_renderer_${{steps.gitversion.outputs.SemVer}} + root-directory: "package" + - name: Create Release + uses: akkuman/gitea-release-action@v1 + with: + tag_name: ${{steps.gitversion.outputs.SemVer}} + name: ${{steps.gitversion.outputs.SemVer}} + files: |- + 3d_renderer_${{steps.gitversion.outputs.SemVer}}.tar.gz + 3d_renderer_${{steps.gitversion.outputs.SemVer}}.zip + \ No newline at end of file diff --git a/README.md b/README.md index 8f7352c..d6a3a52 100644 --- a/README.md +++ b/README.md @@ -1 +1,63 @@ -# 3D Renderer \ No newline at end of file +

3D Renderer

+ +

A simple 3D renderer that allows you to move around the scene using the keys.

+ + + +

3D Renderer was written using Python and PyGame library. This project was part of "Computer Graphics" course at Warsaw University of Technology

+ +--- + +## Features + +- Create your own scene +- Move around the scene using the keys + +## Installation + +Download latest package version from Releases tab, unpack, install requirements and you good to go + +**Requirements** + +- Python installed +- PIP packages: + - `pygame` + - `numpy` + +You can also use `requirements.txt` file to install PIP dependencies + +``` +pip install -r requirements.txt +``` + +## Usage + +``` +python 3d_renderer +``` + +**Create the scene:** + +You can define your own scene in `main` method of `App` class in `3d_renderer/app.py` file. + +- Create object builder: `obj_builder1 = ObjectBuilder()` +- Add as many vertices to the object as you want: `va = obj_builder1.add_vertex(-1, 1, 1)` +- Connect vertices to make edges: `obj_builder1.add_vertices_connection(va, vb)` +- Build object and add it to the scene: `self.renderer.add_object(obj_builder1.build())` + +**Controls:** + +- W - move forward +- S - move backward +- A - move left +- D - move right +- Space - move up +- LShift - move down +- = - FOV up +- - - FOV down +- F - Pitch up +- R - Pitch down +- E - Yaw up +- Q - Yaw down +- C - Roll up +- Z - Roll down \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..4091431 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +pygame +numpy diff --git a/3d_renderer.py b/src/__main__.py similarity index 71% rename from 3d_renderer.py rename to src/__main__.py index 4b586ac..f573483 100644 --- a/3d_renderer.py +++ b/src/__main__.py @@ -1,4 +1,4 @@ -from src.app import App +from app import App if __name__ == "__main__": app = App() diff --git a/3d_renderer/app.py b/src/app.py similarity index 98% rename from 3d_renderer/app.py rename to src/app.py index 4fbe8ba..441e9f7 100644 --- a/3d_renderer/app.py +++ b/src/app.py @@ -1,5 +1,5 @@ -from src.renderer import Renderer -from src.object_builder import ObjectBuilder +from renderer import Renderer +from object_builder import ObjectBuilder class App: renderer : Renderer diff --git a/3d_renderer/camera.py b/src/camera.py similarity index 99% rename from 3d_renderer/camera.py rename to src/camera.py index dd25726..cf623d3 100644 --- a/3d_renderer/camera.py +++ b/src/camera.py @@ -1,6 +1,6 @@ import numpy as np import math as mt -import src.transformations as tn +import transformations as tn class Camera: __position: np.ndarray[float] diff --git a/3d_renderer/object.py b/src/object.py similarity index 97% rename from 3d_renderer/object.py rename to src/object.py index f32d367..2624748 100644 --- a/3d_renderer/object.py +++ b/src/object.py @@ -1,7 +1,7 @@ import numpy as np import pygame as pg import os -from src.vertex import Vertex +from vertex import Vertex class Object: vertices: list[Vertex] diff --git a/3d_renderer/object_builder.py b/src/object_builder.py similarity index 89% rename from 3d_renderer/object_builder.py rename to src/object_builder.py index 14d46bb..67df6d3 100644 --- a/3d_renderer/object_builder.py +++ b/src/object_builder.py @@ -1,5 +1,5 @@ -from src.object import Object -from src.vertex import Vertex +from object import Object +from vertex import Vertex class ObjectBuilder: __vertices: list[Vertex] diff --git a/3d_renderer/renderer.py b/src/renderer.py similarity index 97% rename from 3d_renderer/renderer.py rename to src/renderer.py index 194c150..baeabb8 100644 --- a/3d_renderer/renderer.py +++ b/src/renderer.py @@ -1,8 +1,8 @@ import pygame as pg import numpy as np from math import * -from src.camera import Camera -from src.object import Object +from camera import Camera +from object import Object class Renderer: __clock: pg.time.Clock diff --git a/3d_renderer/transformations.py b/src/transformations.py similarity index 100% rename from 3d_renderer/transformations.py rename to src/transformations.py diff --git a/3d_renderer/vertex.py b/src/vertex.py similarity index 100% rename from 3d_renderer/vertex.py rename to src/vertex.py