From 9cb1c3ea2285b4083dab602ceeebc2116d560f55 Mon Sep 17 00:00:00 2001 From: Krzysztof Rudnicki Date: Thu, 28 Nov 2024 19:11:45 +0100 Subject: [PATCH] feat: added opengl main py and requirements --- ,gitignore | 162 ++++++++++++++++++++++++++++++++++++++++++ code/main.py | 87 +++++++++++++++++++++++ code/requirements.txt | 4 ++ 3 files changed, 253 insertions(+) create mode 100644 ,gitignore create mode 100644 code/main.py create mode 100644 code/requirements.txt diff --git a/,gitignore b/,gitignore new file mode 100644 index 00000000..efa407c3 --- /dev/null +++ b/,gitignore @@ -0,0 +1,162 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/latest/usage/project/#working-with-version-control +.pdm.toml +.pdm-python +.pdm-build/ + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ \ No newline at end of file diff --git a/code/main.py b/code/main.py new file mode 100644 index 00000000..3bff121f --- /dev/null +++ b/code/main.py @@ -0,0 +1,87 @@ +from OpenGL.GL import * +from OpenGL.GLUT import * +from OpenGL.GL.shaders import compileProgram, compileShader +import numpy as np + +# Vertex shader +VERTEX_SHADER = """ +#version 330 +in vec3 position; +in vec3 color; +out vec3 vertexColor; +void main() { + gl_Position = vec4(position, 1.0); + vertexColor = color; +} +""" + +# Fragment shader +FRAGMENT_SHADER = """ +#version 330 +in vec3 vertexColor; +out vec4 fragColor; +void main() { + fragColor = vec4(vertexColor, 1.0); +} +""" + +# Define vertices and colors +vertices = np.array([ + # Positions # Colors + 0.0, 0.5, 0.0, 1.0, 0.0, 0.0, # Top (red) + -0.5, -0.5, 0.0, 0.0, 1.0, 0.0, # Bottom-left (green) + 0.5, -0.5, 0.0, 0.0, 0.0, 1.0 # Bottom-right (blue) +], dtype=np.float32) + +# Initialize OpenGL +def init(): + global shader, VAO + + # Compile shaders + shader = compileProgram( + compileShader(VERTEX_SHADER, GL_VERTEX_SHADER), + compileShader(FRAGMENT_SHADER, GL_FRAGMENT_SHADER) + ) + + # Generate VAO and VBO + VAO = glGenVertexArrays(1) + VBO = glGenBuffers(1) + + glBindVertexArray(VAO) + + glBindBuffer(GL_ARRAY_BUFFER, VBO) + glBufferData(GL_ARRAY_BUFFER, vertices.nbytes, vertices, GL_STATIC_DRAW) + + # Position attribute + glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * vertices.itemsize, None) + glEnableVertexAttribArray(0) + + # Color attribute + glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * vertices.itemsize, ctypes.c_void_p(3 * vertices.itemsize)) + glEnableVertexAttribArray(1) + + glBindBuffer(GL_ARRAY_BUFFER, 0) + glBindVertexArray(0) + +# Render function +def display(): + glClear(GL_COLOR_BUFFER_BIT) + glUseProgram(shader) + glBindVertexArray(VAO) + glDrawArrays(GL_TRIANGLES, 0, 3) + glBindVertexArray(0) + glUseProgram(0) + glutSwapBuffers() + +# Main function +def main(): + glutInit() + glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB) + glutCreateWindow(b"PyOpenGL Triangle") + glutInitWindowSize(800, 600) + glutDisplayFunc(display) + init() + glutMainLoop() + +if __name__ == "__main__": + main() diff --git a/code/requirements.txt b/code/requirements.txt new file mode 100644 index 00000000..82f9807d --- /dev/null +++ b/code/requirements.txt @@ -0,0 +1,4 @@ +glfw +numpy +pyrr +PyOpenGL \ No newline at end of file