Cube rendering in c!
This commit is contained in:
commit
ef44b24798
62
Makefile
Normal file
62
Makefile
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
# the name of your executable
|
||||||
|
TARGET = PlanetMiner
|
||||||
|
|
||||||
|
# launches your target in terminal
|
||||||
|
RUN = ./$(TARGET)
|
||||||
|
|
||||||
|
# directory for your source files
|
||||||
|
SRC_DIR = src
|
||||||
|
|
||||||
|
# directory for your object files
|
||||||
|
BUILD_DIR = bin
|
||||||
|
|
||||||
|
# add more CompilerFLAGS as your project requires
|
||||||
|
CFLAGS = -Wall -Wextra -O3
|
||||||
|
|
||||||
|
# add libraries for your project here
|
||||||
|
LDFLAGS =
|
||||||
|
|
||||||
|
# add library linker commands here (start with -l)
|
||||||
|
LOADLIBS = -lglfw -lGLEW -lGL
|
||||||
|
|
||||||
|
# add library search paths here (start with -L)
|
||||||
|
LDLIBS =
|
||||||
|
|
||||||
|
# add include paths (start with -I)
|
||||||
|
INC =
|
||||||
|
|
||||||
|
# finds all your objects that corrispond to your .cpp files, system agnostic version
|
||||||
|
OBJECTS := $(patsubst $(SRC_DIR)/%.c, $(BUILD_DIR)/%.o, $(wildcard $(SRC_DIR)/*.c))
|
||||||
|
|
||||||
|
.PHONY: all
|
||||||
|
# makes build directory, updates your objects, builds your executable
|
||||||
|
all:
|
||||||
|
mkdir -p $(BUILD_DIR)
|
||||||
|
+$(MAKE) $(TARGET)
|
||||||
|
|
||||||
|
# updates your objects, builds your executable
|
||||||
|
$(TARGET): $(OBJECTS)
|
||||||
|
$(CC) $(OBJECTS) $(CFLAGS) -o $@ $(LOADLIBS) $(LDFLAGS) $(LDLIBS) $(INC)
|
||||||
|
|
||||||
|
# builds your objects
|
||||||
|
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c
|
||||||
|
$(CC) $(CFLAGS) -c $< -o $@ $(LOADLIBS) $(LDFLAGS) $(LDLIBS) $(INC)
|
||||||
|
|
||||||
|
# deletes your built objects and executable
|
||||||
|
.PHONY: clean
|
||||||
|
clean:
|
||||||
|
-rm -rf $(BUILD_DIR) $(TARGET)
|
||||||
|
clear
|
||||||
|
|
||||||
|
# makes build direcotry, updates your objects, builds your executable, launches your program
|
||||||
|
.PHONY: run
|
||||||
|
run:
|
||||||
|
+$(MAKE) all
|
||||||
|
$(RUN)
|
||||||
|
|
||||||
|
# explains the only three options you should be using (unless you build more of your own)
|
||||||
|
.PHONY: help
|
||||||
|
help:
|
||||||
|
@echo "`make` - builds/updates everything, is ready to run with `$(RUN)` after completion"
|
||||||
|
@echo "`make clean` - removes object file folder and executable"
|
||||||
|
@echo "`make run` - builds/updates everything, runs immediately"
|
BIN
PlanetMiner
Executable file
BIN
PlanetMiner
Executable file
Binary file not shown.
BIN
bin/main.o
Normal file
BIN
bin/main.o
Normal file
Binary file not shown.
BIN
bin/textfiles.o
Normal file
BIN
bin/textfiles.o
Normal file
Binary file not shown.
32
devlog.md
Normal file
32
devlog.md
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# Planet Miner Development Log
|
||||||
|
|
||||||
|
## November 24th, 2023
|
||||||
|
|
||||||
|
### General Comments
|
||||||
|
- Messed around with Godot, didn't really find it all that interesting.
|
||||||
|
- Started writing a game engine in C.
|
||||||
|
- Really liking it so far
|
||||||
|
- Feels like I have finer control
|
||||||
|
- I'll definitely be using my mouse less, so that's nice
|
||||||
|
|
||||||
|
### C-Based Game Engine
|
||||||
|
- Boiler plate! Boiler plate! Boiler plate!
|
||||||
|
- I can't render a boiler or its plate yet.
|
||||||
|
- Window opens
|
||||||
|
- Can draw triangle with vertex and fragment shader
|
||||||
|
- Text file loading works
|
||||||
|
|
||||||
|
#### Text File Reading Functions
|
||||||
|
- Very nice
|
||||||
|
- Nice wrapper for builtin functions
|
||||||
|
- Probably will be used a lot, better keep it simple
|
||||||
|
|
||||||
|
### Error Codes?
|
||||||
|
- Gonna be writing a lot of code that throws errors, especially when writing all this darn ***BOILER PLATE***
|
||||||
|
- Error code standards to be implemented - will be documented when done
|
||||||
|
|
||||||
|
## November 25th, 2023
|
||||||
|
|
||||||
|
### Boiler plate
|
||||||
|
- Fixed text file loading not always null terminating stream
|
||||||
|
- Cube rendering!
|
7
src/SimpleFragmentShader.fragmentshader
Normal file
7
src/SimpleFragmentShader.fragmentshader
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#version 330 core
|
||||||
|
// Ouput data
|
||||||
|
out vec3 color;
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
color = vec3(1,1,1);
|
||||||
|
}
|
9
src/SimpleVertexShader.vertexshader
Normal file
9
src/SimpleVertexShader.vertexshader
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#version 330 core
|
||||||
|
|
||||||
|
layout(location = 0) in vec3 vertexPosition_modelspace;
|
||||||
|
|
||||||
|
uniform mat4 MVP;
|
||||||
|
|
||||||
|
void main(){
|
||||||
|
gl_Position = MVP * vec4(vertexPosition_modelspace,1);
|
||||||
|
}
|
14
src/controls.h
Normal file
14
src/controls.h
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#include <cglm/structs.h>
|
||||||
|
|
||||||
|
typedef struct camera
|
||||||
|
{
|
||||||
|
vec3s pos;
|
||||||
|
vec3s dir;
|
||||||
|
vec3s
|
||||||
|
}
|
||||||
|
|
||||||
|
void goForward();
|
||||||
|
void goBackward();
|
||||||
|
void goLeft();
|
||||||
|
void goRight();
|
||||||
|
void yawLeft();
|
250
src/main.c
Normal file
250
src/main.c
Normal file
@ -0,0 +1,250 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
#include <GL/glew.h>
|
||||||
|
|
||||||
|
#include <GLFW/glfw3.h>
|
||||||
|
GLFWwindow* window;
|
||||||
|
|
||||||
|
#include <cglm/struct.h>
|
||||||
|
|
||||||
|
#define WINW 800
|
||||||
|
#define WINH 450
|
||||||
|
|
||||||
|
#define FOV 1.4f
|
||||||
|
|
||||||
|
#define SHADER_BUF_SIZE 1000
|
||||||
|
|
||||||
|
GLuint loadShaders(const char*, const char*);
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
glewExperimental = true;
|
||||||
|
if( !glfwInit() )
|
||||||
|
{
|
||||||
|
fprintf( stderr, "Failed to initialize GLFW :(\n" );
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
glfwWindowHint(GLFW_SAMPLES, 4);
|
||||||
|
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
|
||||||
|
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
|
||||||
|
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
|
||||||
|
|
||||||
|
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
|
||||||
|
|
||||||
|
window = glfwCreateWindow(WINW, WINH, "Planet Miner", NULL, NULL);
|
||||||
|
if( window == NULL )
|
||||||
|
{
|
||||||
|
fprintf( stderr, "Failed to create window. If you are using an Intel GPU, please note that they are not compatible with OpenGL 3.3\n" );
|
||||||
|
glfwTerminate();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
glfwMakeContextCurrent(window);
|
||||||
|
|
||||||
|
glewExperimental = true;
|
||||||
|
if( glewInit() != GLEW_OK )
|
||||||
|
{
|
||||||
|
fprintf( stderr, "Failed to initialize GLEW\n" );
|
||||||
|
getchar();
|
||||||
|
glfwTerminate();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE);
|
||||||
|
|
||||||
|
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
||||||
|
|
||||||
|
GLuint vertexArrayID;
|
||||||
|
glGenVertexArrays(1, &vertexArrayID);
|
||||||
|
glBindVertexArray(vertexArrayID);
|
||||||
|
|
||||||
|
|
||||||
|
GLuint programID = loadShaders( "src/SimpleVertexShader.vertexshader", "src/SimpleFragmentShader.fragmentshader" );
|
||||||
|
|
||||||
|
GLuint matrixID = glGetUniformLocation(programID, "MVP");
|
||||||
|
|
||||||
|
mat4s projection = glms_perspective(FOV, 16.0f / 9.0f, 0.1f, 100.0f);
|
||||||
|
|
||||||
|
vec3s eye = {0.0f, 0.0f, 5.0f};
|
||||||
|
vec3s center = {0.0f, 0.0f, 0.0f};
|
||||||
|
vec3s up = {0.0f, 1.0f, 0.0f};
|
||||||
|
|
||||||
|
static const GLfloat g_vertex_buffer_data[] = {
|
||||||
|
-1.0f,-1.0f,-1.0f, // triangle 1 : begin
|
||||||
|
-1.0f,-1.0f, 1.0f,
|
||||||
|
-1.0f, 1.0f, 1.0f, // triangle 1 : end
|
||||||
|
1.0f, 1.0f,-1.0f, // triangle 2 : begin
|
||||||
|
-1.0f,-1.0f,-1.0f,
|
||||||
|
-1.0f, 1.0f,-1.0f, // triangle 2 : end
|
||||||
|
1.0f,-1.0f, 1.0f,
|
||||||
|
-1.0f,-1.0f,-1.0f,
|
||||||
|
1.0f,-1.0f,-1.0f,
|
||||||
|
1.0f, 1.0f,-1.0f,
|
||||||
|
1.0f,-1.0f,-1.0f,
|
||||||
|
-1.0f,-1.0f,-1.0f,
|
||||||
|
-1.0f,-1.0f,-1.0f,
|
||||||
|
-1.0f, 1.0f, 1.0f,
|
||||||
|
-1.0f, 1.0f,-1.0f,
|
||||||
|
1.0f,-1.0f, 1.0f,
|
||||||
|
-1.0f,-1.0f, 1.0f,
|
||||||
|
-1.0f,-1.0f,-1.0f,
|
||||||
|
-1.0f, 1.0f, 1.0f,
|
||||||
|
-1.0f,-1.0f, 1.0f,
|
||||||
|
1.0f,-1.0f, 1.0f,
|
||||||
|
1.0f, 1.0f, 1.0f,
|
||||||
|
1.0f,-1.0f,-1.0f,
|
||||||
|
1.0f, 1.0f,-1.0f,
|
||||||
|
1.0f,-1.0f,-1.0f,
|
||||||
|
1.0f, 1.0f, 1.0f,
|
||||||
|
1.0f,-1.0f, 1.0f,
|
||||||
|
1.0f, 1.0f, 1.0f,
|
||||||
|
1.0f, 1.0f,-1.0f,
|
||||||
|
-1.0f, 1.0f,-1.0f,
|
||||||
|
1.0f, 1.0f, 1.0f,
|
||||||
|
-1.0f, 1.0f,-1.0f,
|
||||||
|
-1.0f, 1.0f, 1.0f,
|
||||||
|
1.0f, 1.0f, 1.0f,
|
||||||
|
-1.0f, 1.0f, 1.0f,
|
||||||
|
1.0f,-1.0f, 1.0f
|
||||||
|
};
|
||||||
|
|
||||||
|
GLuint vertexbuffer;
|
||||||
|
glGenBuffers(1, &vertexbuffer);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
|
||||||
|
glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_STATIC_DRAW);
|
||||||
|
|
||||||
|
vec3s direction = {0.0f, 0.0f, -5.0f};
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
glClear( GL_COLOR_BUFFER_BIT );
|
||||||
|
g
|
||||||
|
|
||||||
|
if( glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS )
|
||||||
|
{
|
||||||
|
eye.z -= 0.05f;
|
||||||
|
}
|
||||||
|
if( glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS )
|
||||||
|
{
|
||||||
|
eye.z += 0.05f;
|
||||||
|
}
|
||||||
|
if( glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS )
|
||||||
|
{
|
||||||
|
eye.x += 0.05f;
|
||||||
|
}
|
||||||
|
if( glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS )
|
||||||
|
{
|
||||||
|
eye.x -= 0.05f;
|
||||||
|
}
|
||||||
|
if( glfwGetKey(window, GLFW_KEY_SPACE) == GLFW_PRESS )
|
||||||
|
{
|
||||||
|
eye.y += 0.05f;
|
||||||
|
}
|
||||||
|
if( glfwGetKey(window, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS )
|
||||||
|
{
|
||||||
|
eye.y -= 0.05f;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
center = glms_vec3_add(eye, direction);
|
||||||
|
|
||||||
|
mat4s view = glms_lookat(eye, center, up);
|
||||||
|
mat4s model = glms_mat4_identity();
|
||||||
|
mat4s mvp = glms_mat4_mul(glms_mat4_mul(projection, view), model);
|
||||||
|
|
||||||
|
glUseProgram(programID);
|
||||||
|
|
||||||
|
glUniformMatrix4fv(matrixID, 1, GL_FALSE, &mvp);
|
||||||
|
|
||||||
|
glEnableVertexAttribArray(0);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
|
||||||
|
|
||||||
|
glVertexAttribPointer(
|
||||||
|
0,
|
||||||
|
3,
|
||||||
|
GL_FLOAT,
|
||||||
|
GL_FALSE,
|
||||||
|
0,
|
||||||
|
(void*)0
|
||||||
|
);
|
||||||
|
|
||||||
|
glDrawArrays(GL_TRIANGLES, 0, 12*3);
|
||||||
|
glDisableVertexAttribArray(0);
|
||||||
|
|
||||||
|
glfwSwapBuffers(window);
|
||||||
|
glfwPollEvents();
|
||||||
|
}
|
||||||
|
while( glfwGetKey(window, GLFW_KEY_Q) | glfwGetKey(window, GLFW_KEY_ESCAPE) != GLFW_PRESS && !glfwWindowShouldClose(window));
|
||||||
|
|
||||||
|
glDeleteBuffers(1, &vertexbuffer);
|
||||||
|
glDeleteProgram(programID);
|
||||||
|
glDeleteVertexArrays(1, &vertexArrayID);
|
||||||
|
|
||||||
|
glfwTerminate();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
GLuint loadShaders(const char* vertexShaderPath, const char* fragmentShaderPath)
|
||||||
|
{
|
||||||
|
char* vertexShaderCode = readTextFile( vertexShaderPath );
|
||||||
|
char* fragmentShaderCode = readTextFile( fragmentShaderPath );
|
||||||
|
|
||||||
|
GLuint vertexShaderID = glCreateShader(GL_VERTEX_SHADER);
|
||||||
|
GLuint fragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);
|
||||||
|
|
||||||
|
GLint result = GL_FALSE;
|
||||||
|
int infoLogLength;
|
||||||
|
|
||||||
|
printf("Compiling vertex shader...\n");
|
||||||
|
glShaderSource(vertexShaderID, 1, &vertexShaderCode, NULL);
|
||||||
|
glCompileShader(vertexShaderID);
|
||||||
|
|
||||||
|
glGetShaderiv(vertexShaderID, GL_COMPILE_STATUS, &result);
|
||||||
|
glGetShaderiv(vertexShaderID, GL_INFO_LOG_LENGTH, &infoLogLength);
|
||||||
|
if( infoLogLength > 0 )
|
||||||
|
{
|
||||||
|
char vertexShaderErrorMessage[infoLogLength + 1];
|
||||||
|
glGetShaderInfoLog(vertexShaderID, infoLogLength, NULL, &vertexShaderErrorMessage);
|
||||||
|
printf("%s\n", &vertexShaderErrorMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Compiling fragment shader...\n");
|
||||||
|
glShaderSource(fragmentShaderID, 1, &fragmentShaderCode, NULL);
|
||||||
|
glCompileShader(fragmentShaderID);
|
||||||
|
|
||||||
|
glGetShaderiv(fragmentShaderID, GL_COMPILE_STATUS, &result);
|
||||||
|
glGetShaderiv(fragmentShaderID, GL_INFO_LOG_LENGTH, &infoLogLength);
|
||||||
|
if( infoLogLength > 0 )
|
||||||
|
{
|
||||||
|
char fragmentShaderErrorMessage[infoLogLength + 1];
|
||||||
|
glGetShaderInfoLog(fragmentShaderID, infoLogLength, NULL, &fragmentShaderErrorMessage);
|
||||||
|
printf("%s\n", &fragmentShaderErrorMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Linking program\n");
|
||||||
|
GLuint programID = glCreateProgram();
|
||||||
|
glAttachShader(programID, vertexShaderID);
|
||||||
|
glAttachShader(programID, fragmentShaderID);
|
||||||
|
glLinkProgram(programID);
|
||||||
|
|
||||||
|
glGetProgramiv(programID, GL_LINK_STATUS, &result);
|
||||||
|
glGetProgramiv(programID, GL_INFO_LOG_LENGTH, &infoLogLength);
|
||||||
|
if( infoLogLength > 0 )
|
||||||
|
{
|
||||||
|
char programErrorMessage[infoLogLength + 1];
|
||||||
|
glGetProgramInfoLog(programID, infoLogLength, NULL, &programErrorMessage);
|
||||||
|
printf("%s\n", &programErrorMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
free( vertexShaderCode );
|
||||||
|
free( fragmentShaderCode );
|
||||||
|
|
||||||
|
glDetachShader( programID, vertexShaderID );
|
||||||
|
glDetachShader( programID, fragmentShaderID );
|
||||||
|
|
||||||
|
glDeleteShader( vertexShaderID );
|
||||||
|
glDeleteShader( fragmentShaderID );
|
||||||
|
return programID;
|
||||||
|
}
|
46
src/textfiles.c
Normal file
46
src/textfiles.c
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
// Reads an entire text file into a buffer.
|
||||||
|
// USES MALLOC BE SURE TO FREE
|
||||||
|
char* readTextFile(char* fname)
|
||||||
|
{
|
||||||
|
FILE* inFile;
|
||||||
|
long fileLength;
|
||||||
|
char* fileBuffer;
|
||||||
|
size_t result;
|
||||||
|
|
||||||
|
inFile = fopen( fname, "rb" );
|
||||||
|
if( inFile == NULL )
|
||||||
|
{
|
||||||
|
fprintf( stderr, "Failed open file, [%s].\n", fname );
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
fseek( inFile, 0, SEEK_END );
|
||||||
|
fileLength = ftell( inFile );
|
||||||
|
printf("File length: %d\n", fileLength);
|
||||||
|
rewind( inFile );
|
||||||
|
|
||||||
|
fileBuffer = (char*) malloc(sizeof(char) * (fileLength + 1));
|
||||||
|
if( fileBuffer == NULL )
|
||||||
|
{
|
||||||
|
fprintf( stderr, "Failed to allocate memory for reading the file, [%s].\n", fname);
|
||||||
|
exit(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
result = fread( fileBuffer, 1, fileLength, inFile );
|
||||||
|
if( result != fileLength )
|
||||||
|
{
|
||||||
|
fprintf( stderr, "Failed while reading [%s] into the file buffer.\n", fname);
|
||||||
|
exit(3);
|
||||||
|
}
|
||||||
|
|
||||||
|
fileBuffer[fileLength] = '\0';
|
||||||
|
|
||||||
|
fclose( inFile );
|
||||||
|
|
||||||
|
return fileBuffer;
|
||||||
|
}
|
1
src/textfiles.h
Normal file
1
src/textfiles.h
Normal file
@ -0,0 +1 @@
|
|||||||
|
char* readTextFile(char*);
|
21
src/worldgen.c
Normal file
21
src/worldgen.c
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#include "worldgen.h"
|
||||||
|
#include <cglm/struct.h>
|
||||||
|
|
||||||
|
#define ORDER 1
|
||||||
|
#define RSQRT5 0.4472135954999579
|
||||||
|
#define TWICE_RSQRT5 = 0.8944271909999159
|
||||||
|
|
||||||
|
worldMesh generateWorld(vec3s position)
|
||||||
|
{
|
||||||
|
// placeholder struct for world mesh
|
||||||
|
worldMesh mesh;
|
||||||
|
vertex.count = 20 * ORDER * 3; // Icosahedron has 20 triangular sides
|
||||||
|
|
||||||
|
mesh.vertices = (GLfloat*) malloc(sizeof(GLfloat) * mesh.count);
|
||||||
|
populateIcosphere(mesh, ORDER, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void populateIcosphere(worldMesh mesh, unsigned char order, float radius)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
15
src/worldgen.h
Normal file
15
src/worldgen.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#include <cglm/struct.h>
|
||||||
|
|
||||||
|
typedef struct worldMesh {
|
||||||
|
long int count;
|
||||||
|
GLfloat* vertices;
|
||||||
|
} worldMesh;
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief top-level world generation function
|
||||||
|
*
|
||||||
|
* @param[in] pos the position of the center of the roughly spherical world
|
||||||
|
* @return the world mesh as a heap-allocated list of vertices.
|
||||||
|
*/
|
||||||
|
worldMesh generateWorld(vec3s pos);
|
45
todo.md
Normal file
45
todo.md
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
# Planet Miner To Do List
|
||||||
|
|
||||||
|
## Priority List
|
||||||
|
1. Render stuff
|
||||||
|
1. Render a cube
|
||||||
|
2. Render a bunch of cubes
|
||||||
|
3. Diffuse lighting
|
||||||
|
4. Ray tracing?
|
||||||
|
2. Procedural worlds
|
||||||
|
1. Optimize rendering for this many cubes
|
||||||
|
3. Block game
|
||||||
|
1. World editing
|
||||||
|
|
||||||
|
## Idea Categories
|
||||||
|
1. Game Engine?
|
||||||
|
- Custom in C
|
||||||
|
- Started work on one, kinda liking it so far
|
||||||
|
- Don't really like pre-built game engines
|
||||||
|
- If I use one it'll likely be Godot
|
||||||
|
|
||||||
|
2. Voxelization
|
||||||
|
- Zoning
|
||||||
|
- Each planet has its own coordinate system (non-voxelized)
|
||||||
|
- Material is distributed in amorphous blobs containing a certain percent resource
|
||||||
|
- Before world editing can begin, a work zone must be established to create a local voxelized coordinate system
|
||||||
|
-
|
||||||
|
|
||||||
|
3. Progression
|
||||||
|
- The cores of planets exist as large non-voxelized structures
|
||||||
|
- Requires high level tools to mine
|
||||||
|
- Contain lots of resources
|
||||||
|
- Nickel
|
||||||
|
- Iron
|
||||||
|
- Asteroids can be mined like planet cores
|
||||||
|
- Less valuable resources
|
||||||
|
- Mostly rock
|
||||||
|
- Requires lower level tools
|
||||||
|
- Game starts on an Earth-like planet
|
||||||
|
- Make basic tool with sticks rope and stone fragments
|
||||||
|
- Stone fragments from smashing stones on rock
|
||||||
|
|
||||||
|
4. Documentation
|
||||||
|
- Error Codes!
|
||||||
|
- In-Game Wiki-System
|
||||||
|
|
Loading…
Reference in New Issue
Block a user