aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile18
-rw-r--r--README.md26
-rw-r--r--shaders/dummy.fsh2
-rw-r--r--src/main.c55
4 files changed, 81 insertions, 20 deletions
diff --git a/Makefile b/Makefile
index a676b86..eec9109 100644
--- a/Makefile
+++ b/Makefile
@@ -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
diff --git a/README.md b/README.md
index c1eb7aa..b51ecdc 100644
--- a/README.md
+++ b/README.md
@@ -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);
}
diff --git a/src/main.c b/src/main.c
index c9ffad2..f58fa28 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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;
Feel free to download, copy and edit any repo