A 3D Rendering Engine

iver 74fe12a062 updated gitignore 10 months ago
.vscode 22d2157df5 added CPU support (and CPU fallback) 10 months ago
builds ab0ba019b5 erck now shows the name of OpenCL error code 10 months ago
objects 91081b3098 added rotation! 10 months ago
src 1aca045d07 added descriptions of RI functions 10 months ago
textures 32e2939770 fixed textures 10 months ago
.gitattributes ed4d2491ef added .gitattributes file 10 months ago
.gitignore 74fe12a062 updated gitignore 10 months ago
Makefile 57f830aa7f really strange visual bug, looks cool 10 months ago
build 5e7402cb52 added helper scripts 10 months ago
dbg af060b7ad5 added obj parser and basic object functions/variables 11 months ago
push bdc35eadbc removed filetype of push.sh 11 months ago
readme.md ddbceb4f8c updated readme 10 months ago
run af060b7ad5 added obj parser and basic object functions/variables 11 months ago
stat c70e598be4 cleaned up some code 11 months ago
todo 5e7402cb52 added helper scripts 10 months ago

readme.md

RasterIver, a Rendering Engine

animated

RasterIver?

Rasterizer + Iver = RasterIver

Features

(todo: write features)

RI_FLAG List

  • RI_FLAG_DEBUG Turns debugging on or off
  • RI_FLAG_DEBUG_LEVEL Indepth-ness of debugging
  • RI_FLAG_SHOW_BUFFER The "buffer" to render
  • RI_FLAG_SHOW_FPS Shows the FPS
  • RI_FLAG_DEBUG_FPS Prints FPS in the console
  • RI_FLAG_CLEAN_POLYGONS Clear the polygon array after RI_RequestPolyons is called
  • RI_FLAG_POPULATE_POLYGONS Sets random values in the polygon array
  • RI_FLAG_BE_MASTER_RENDERER Whether you want to use objects or to have direct access to the polygon array
  • RI_FLAG_SHOW_FRAME Shows the current frame #
  • RI_FLAG_DEBUG_FRAME Prints the current frame # in the console
  • RI_FLAG_SHOW_INFO Shows object info
  • RI_FLAG_DEBUG_TICK Turns debugging on or off for anything that would fill up the console when constantly ticking
  • RI_FLAG_USE_CPU Use the CPU over the GPU

Requirements

To Run

  • SDL2
  • SDL2 TTF
  • OpenCL Runtimes

    To Build

  • SDL2

  • SDL2 TTF

  • OpenCL Developer Libraries

  • ROCm if using AMD

  • CUDA if using NVIDIA

Todo

  • make todo list
  • function to request a mesh. I.E., request a number of polygons/verticies (maybe from presets? planes, cubes, idk) and be able to edit them on the fly. Useful for dynamic terrain or something like that
  • texture support
  • fix interpolation issue with UV maps (and probably normals and Z values too)
  • fix horribly named variables in request object functions
  • include rasteriver.h in the kernels for better code updatability
  • make kernels not be in strings (read the file at compile time and put it inside rasteriver.c as a string? put it in a header like how it is now?)
  • change all iterator variables in for loops to have "i_" before it's variable name
  • add descriptions to RI functions
  • make a function call stack to review where errors happen or just debug stuff
  • optimize object memory usage by not loading object data multiple times when the same object is requested
  • add checks for invalid/nonexistant files (files like object files & texture files)
  • perspective
  • euler rotation
  • quaternion rotation
  • sheer transform (and other fancy ones?)
  • simple lighting using normals
  • complex lighting using rays for shadows and stuff
  • polygon clipping by subdividing
  • flag for using CPU instead of GPU
  • actually acurate FPS cap
  • make a function to return a pointer to the last SDL_event (or copy it doesnt really matter)
  • make an option for multiple cameras, or defining a camera. I want to be able to write it to a "texture" in menory and have objects use it as their texture
  • add materials/shaders that define unlit, lit, textures, and whatever else. Maybe have shader kernels? I have no idea how you would implement that but it sounds cool
  • make the returned array from RI_RequestObjects easier to write to I.E., not a 1D array. Maybe have it so you could do objects[obj #].x_position or something like that. I wonder if I could implement functions with that, too, so you could do objects.get_first_element()
  • object higherarchies (maybe not. This is moving towards game engine territory. Once I get this into a working release, I'll start working on a game engine)
  • deltaTime variable or function. (function that returns pointer? function that returns the last deltatime value?)
  • add a function to set a custom debug prefix