From 24165c954460aef75ed9cf68dbecd3c84e6ec040 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miloslav=20=C4=8C=C3=AD=C5=BE?= Date: Tue, 18 Sep 2018 15:01:01 +0200 Subject: [PATCH] Update hello ray --- helloRay.cpp | 39 +++++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/helloRay.cpp b/helloRay.cpp index 974e60c..b29cd9f 100644 --- a/helloRay.cpp +++ b/helloRay.cpp @@ -10,7 +10,8 @@ function that will render pixels. It allows super performance. */ /* There are many other options that can be defined here, check the library - for details. */ + for details. Don't forget to disable the features you won't be using - it + will speed up the rendering. */ #include "raycastlib.h" #include "Pokitto.h" @@ -20,26 +21,38 @@ Pokitto::Core pokitto; RCL_Camera camera; // Defines a view that will be rendered. RCL_RayConstraints constraints; -// Function that for given square coordinates returns height of the floor. +/* Function that for given square coordinates returns height of the floor + (in RCL_Units). */ RCL_Unit floorHeightAt(int16_t x, int16_t y) { return x < 0 || x >= 10 || y < 0 || y >= 10 ? RCL_UNITS_PER_SQUARE * 2 : 0; - // ^ RCL_UNITS_PER_SQUARE is the length of one side of the game world square. + /* ^ RCL_UNITS_PER_SQUARE is the length of one side of the game square. + Since we'll place the camera at RCL_UNITS_PER_SQUARE height, let's + make the walls twice as high. */ + + /* You can either generate the level procedurally as above, or read it from + an array and return it here. */ } -// Function which the library will call to draw indivifual pixels. +/* Function that will be called by the library in order to draw individual + pixels (similar to fragment shaders in OpenGL). */ + void pixelFunc(RCL_PixelInfo *pixel) { uint8_t color; - /* Pixel holds all kind of info about the pixel to be rendered. Check - the PixelInfo struct for details. */ + /* The pixel variable holds all kind of info about the pixel to be rendered. + Check the PixelInfo struct for details. */ if (pixel->isWall) - color = pixel->hit.direction + 2; + color = pixel->hit.direction + 2; // give walls different colors else - color = pixel->isFloor ? 10 : 11; + color = pixel->isFloor ? 10 : 11; // also make ceiling and floor differ + + /* You can do all kinds of processing here and draw the pixel wherever you + want, or even discard it. Just remember this function has to be fast and + will usually be the bottleneck. */ pokitto.display.drawPixel(pixel->position.x,pixel->position.y,color); } @@ -48,6 +61,7 @@ void draw() { /* This triggers the rendering, which will keep calling pixelFunc to render the camera view. */ + RCL_renderSimple(camera,floorHeightAt,0,0,constraints); } @@ -56,7 +70,8 @@ int main() pokitto.begin(); pokitto.setFrameRate(60); - RCL_initCamera(&camera); + RCL_initCamera(&camera); /* To initialize all parameters so that none + remains undefined. */ // Set the camera position to square [4;6]. camera.position.x = 4 * RCL_UNITS_PER_SQUARE; @@ -69,15 +84,15 @@ int main() camera.resolution.y = 88; // This specifies the ray behavior. - constraints.maxHits = 1; - constraints.maxSteps = 20; + constraints.maxHits = 1; // Stop at first intersection with a wall. + constraints.maxSteps = 20; // Trace maximum of 20 squares. while (pokitto.isRunning()) { if (pokitto.update()) { draw(); - camera.direction -= 10; // Rotate camera for some animation. + camera.direction -= 10; // Rotate the camera for some animation. } }