diff options
author | jvech <jmvalenciae@unal.edu.co> | 2023-01-01 20:18:25 -0500 |
---|---|---|
committer | jvech <jmvalenciae@unal.edu.co> | 2023-01-01 20:18:25 -0500 |
commit | 0a245e329a9af7df792981f1f35a70bbfaded8b9 (patch) | |
tree | e26adcbd15facb607451bc6d4c52dfe1d069566a | |
parent | fafff7a4e32dcd63e5b33358414d0fa37305f458 (diff) |
feat: cli support and install rule addeddev
Now it is possible to use custom shaders and install the program on the system
-rw-r--r-- | Makefile | 18 | ||||
-rw-r--r-- | README.md | 26 | ||||
-rw-r--r-- | shaders/dummy.fsh | 2 | ||||
-rw-r--r-- | src/main.c | 55 |
4 files changed, 81 insertions, 20 deletions
@@ -7,6 +7,10 @@ SRCDIR = src OBJS = $(addprefix objs/,main.o shader.o linear.o obj.o) BIN = mverse +SHADERS_DIR = /usr/share/${BIN} +VERTEX = shaders/dummy.vsh +FRAGMENT = shaders/dummy.fsh + all: build $(OBJS): | $(OBJDIR) @@ -23,5 +27,19 @@ build: $(OBJS) run: ./${BIN} +install: build + install -Dm 644 ${VERTEX} -t ${SHADERS_DIR} + install -Dm 644 ${FRAGMENT} -t ${SHADERS_DIR} + install -D ${BIN} -t /usr/bin + @echo "========================================================" + @echo "To use the ${BIN} set the environment variables:" + @echo " MVERSE_VERTEX=${SHADERS_DIR}/$(notdir ${VERTEX})" + @echo " MVERSE_FRAGMENT=${SHADERS_DIR}/$(notdir ${FRAGMENT})" + @echo "========================================================" + +uninstall: + rm -f /usr/bin/${BIN} + rm -rvf ${SHADERS_DIR} + clean: @rm $(OBJS) -v @@ -1,18 +1,28 @@ -# My 3D Dimensional World +# Mverse -The goal of this project is learning Opengl through a project, which consists in -making a convincing world with mountains and lands, this will take a while 🥲. +A minimalist feature less object file visualizer that uses opengl -# Installation +## Dependencies + +* glfw +* opengl >= 3.3 +* stb\_image + +## Installation ``` $ cd mverse -$ make +$ sudo make install ``` -# Usage - +Before running Mverse set the following environment variables (on your +`.bashrc`): ``` -$ ./mverse <FILE> +export MVERSE_VERTEX=/usr/share/mverse/dummy.vsh +export MVERSE_FRAGMENT=/usr/share/mverse/dummy.fsh ``` +## Usage +``` +$ mverse [-v vertexshader] [-f fragmentshader] objfile +``` diff --git a/shaders/dummy.fsh b/shaders/dummy.fsh index 75c7ef2..0c052ac 100644 --- a/shaders/dummy.fsh +++ b/shaders/dummy.fsh @@ -43,5 +43,5 @@ void main() vec3 diffuse = diff * dirLight.diffuse * mtl.diffuse; vec3 specular = spec * dirLight.specular * mtl.specular; - FragColor = vec4(ambient + diffuse + specular, 1.0); + FragColor = vec4(mtl.diffuse, 1.0); } @@ -23,6 +23,7 @@ #include <signal.h> #include <stdarg.h> +#include <getopt.h> #include <math.h> #include <GL/glew.h> #include <GLFW/glfw3.h> @@ -50,6 +51,7 @@ static void meshSetUp(Mesh *mesh); static void meshDraw(unsigned int shader, Mesh mesh); static void objSetUp(Obj obj); static void objDraw(unsigned int shader, Obj obj); +static void usage(int status); static float cameraSpeed = 2.0; @@ -258,6 +260,12 @@ objDraw(unsigned int shader, Obj obj) } } +void +usage(int exitStatus) +{ + fprintf(stderr, "Usage: mverse [-h] [-v vertexshader] [-f fragmentshader] objfile\n"); + exit(exitStatus); +} int main(int argc, char *argv[]) { @@ -265,9 +273,35 @@ int main(int argc, char *argv[]) GLFWwindow *window; const char *glfwErrno; - if (argc == 2) obj = objCreate(argv[1]); - else if (argc == 1) obj = objCreate("-"); - else return 1; + int opt; + char *vertexFile, *fragmentFile; + vertexFile = getenv("MVERSE_VERTEX"); + fragmentFile = getenv("MVERSE_FRAGMENT"); + + while ((opt = getopt(argc, argv, "hv:f:")) != -1) { + switch (opt) { + case 'h': + usage(0); + break; + case 'v': + vertexFile = optarg; + break; + case 'f': + fragmentFile = optarg; + break; + default: + usage(2); + } + } + + if (optind >= argc) userError("cli Error", "expected argument after options\n"); + else if (!vertexFile) userError("environment Error", "MVERSE_VERTEX not defined"); + else if (!fragmentFile) userError("environment Error", "MVERSE_FRAGMENT not defined"); + + argv += optind; + argc -= optind; + + obj = objCreate(argv[0]); if (obj.mesh == NULL) { glfwTerminate(); @@ -296,15 +330,16 @@ int main(int argc, char *argv[]) userError("glewInit Error", (const char *)glewGetErrorString(glewErrno)); } - unsigned int shader = shaderCreateProgram("shaders/dummy.vsh", "shaders/dummy.fsh"); + unsigned int shader = shaderCreateProgram(vertexFile, fragmentFile); objSetUp(obj); - struct Camera mainCamera; - mainCamera.position = linearVec3(0.0, 0.0, 10.0); - mainCamera.front = linearVec3(0.0, 0.0, 1.0); - mainCamera.up = linearVec3(0.0, 1.0, 0.0); + struct Camera mainCamera = { + .position = linearVec3(0.0, 0.0, 10.0), + .front = linearVec3(0.0, 0.0, 1.0), + .up = linearVec3(0.0, 1.0, 0.0), + }; Mat4 model, view, proj; Mat4 T, S, R; @@ -316,7 +351,7 @@ int main(int argc, char *argv[]) glEnable(GL_DEPTH_TEST); while (!glfwWindowShouldClose(window)) { processInput(window); - glClearColor(1.0f, 1.0f, 1.0f, 1.0f); + glClearColor(0.2f, 0.2f, 0.2f, 0.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glfwGetWindowSize(window, &width, &height); sprintf(title, "mverse: x: %f y: %f z: %f", @@ -325,8 +360,6 @@ int main(int argc, char *argv[]) mainCamera.front.vector[2] + mainCamera.position.vector[2]); glfwSetWindowTitle(window, title); - - t = (float)glfwGetTime(); dt = t - t0; t0 = t; |