1
0
Fork 0
mirror of https://git.coom.tech/drummyfish/raycastlib.git synced 2024-11-21 20:29:59 +01:00

Fix floor texturing

This commit is contained in:
Miloslav Číž 2018-09-29 09:17:23 +02:00
parent c903d801f8
commit e2fbbd36e8
2 changed files with 11 additions and 13 deletions

View file

@ -1249,7 +1249,7 @@ void _RCL_columnFunctionComplex(RCL_HitResult *hits, uint16_t hitCount, uint16_t
RCL_Unit fPosY = _RCL_camera.resolution.y; RCL_Unit fPosY = _RCL_camera.resolution.y;
RCL_Unit cPosY = -1; RCL_Unit cPosY = -1;
// world coordinates // world coordinates (relative to camera height though)
RCL_Unit fZ1World = _RCL_startFloorHeight; RCL_Unit fZ1World = _RCL_startFloorHeight;
RCL_Unit cZ1World = _RCL_startCeil_Height; RCL_Unit cZ1World = _RCL_startCeil_Height;
@ -1261,7 +1261,7 @@ void _RCL_columnFunctionComplex(RCL_HitResult *hits, uint16_t hitCount, uint16_t
// we'll be simulatenously drawing the floor and the ceiling now // we'll be simulatenously drawing the floor and the ceiling now
for (RCL_Unit j = 0; j <= hitCount; ++j) for (RCL_Unit j = 0; j <= hitCount; ++j)
{ // ^ = add extra iteration for horizon plane { // ^ = add extra iteration for horizon plane
int8_t drawingHorizon = j == hitCount; int8_t drawingHorizon = j == hitCount;
RCL_HitResult hit; RCL_HitResult hit;
@ -1320,6 +1320,8 @@ void _RCL_columnFunctionComplex(RCL_HitResult *hits, uint16_t hitCount, uint16_t
p.depth = 0; p.depth = 0;
#endif #endif
p.hit = hit;
limit = _RCL_drawHorizontal(fPosY,fZ1Screen,cPosY + 1, limit = _RCL_drawHorizontal(fPosY,fZ1Screen,cPosY + 1,
_RCL_camera.resolution.y,fZ1World,-1,RCL_COMPUTE_FLOOR_DEPTH, _RCL_camera.resolution.y,fZ1World,-1,RCL_COMPUTE_FLOOR_DEPTH,
// ^ purposfully allow outside screen bounds // ^ purposfully allow outside screen bounds
@ -1352,7 +1354,6 @@ void _RCL_columnFunctionComplex(RCL_HitResult *hits, uint16_t hitCount, uint16_t
p.isWall = 1; p.isWall = 1;
p.depth = distance; p.depth = distance;
p.isFloor = 1; p.isFloor = 1;
p.hit = hit;
p.texCoords.x = hit.textureCoord; p.texCoords.x = hit.textureCoord;
p.height = 0; // don't compute this, no use p.height = 0; // don't compute this, no use

View file

@ -12,11 +12,7 @@
//#define RCL_USE_DIST_APPROX 2 //#define RCL_USE_DIST_APPROX 2
// redefine some parameters #define RCL_COMPUTE_FLOOR_TEXCOORDS 1
#define FPS 40
#define GRAVITY_ACCELERATION (RCL_UNITS_PER_SQUARE * 3)
#define PLAYER_JUMP_SPEED 700
#define RCL_CAMERA_COLL_HEIGHT_BELOW ((3 * RCL_UNITS_PER_SQUARE) / 2)
#define RCL_HORIZONTAL_FOV (RCL_UNITS_PER_SQUARE / 5) #define RCL_HORIZONTAL_FOV (RCL_UNITS_PER_SQUARE / 5)
#define RCL_VERTICAL_FOV RCL_UNITS_PER_SQUARE // redefine camera vertical FOV #define RCL_VERTICAL_FOV RCL_UNITS_PER_SQUARE // redefine camera vertical FOV
@ -878,7 +874,7 @@ void pixelFunc(RCL_PixelInfo *pixel)
if (pixel->isWall) if (pixel->isWall)
c = sampleImage(textures[pixel->hit.type],pixel->texCoords.x,pixel->texCoords.y); c = sampleImage(textures[pixel->hit.type],pixel->texCoords.x,pixel->texCoords.y);
else else
c = pixel->isFloor ? 0b00010001 : 0b00001010; c = sampleImage(textures[0],pixel->texCoords.x,pixel->texCoords.y); //pixel->isFloor ? 0b00010001 : 0b00001010;
// int intensity = pixel->depth - 8 * RCL_UNITS_PER_SQUARE; // int intensity = pixel->depth - 8 * RCL_UNITS_PER_SQUARE;
int intensity = pixel->depth - 8 * RCL_UNITS_PER_SQUARE; int intensity = pixel->depth - 8 * RCL_UNITS_PER_SQUARE;
@ -913,6 +909,7 @@ if (pixel->isWall)
else else
c = pixel->isFloor ? 0x00FF0000 : 0x00F00000; c = pixel->isFloor ? 0x00FF0000 : 0x00F00000;
*/ */
pixels[index] = r | g | b; pixels[index] = r | g | b;
pixelCounter[index]++; pixelCounter[index]++;
} }
@ -983,11 +980,11 @@ int main()
placeSprite(6,sprite3,16,12,1,3000); placeSprite(6,sprite3,16,12,1,3000);
#undef placeSprite #undef placeSprite
camera.position.x = RCL_UNITS_PER_SQUARE * 5; camera.position.x = 25699;
camera.position.y = RCL_UNITS_PER_SQUARE * 4; camera.position.y = 10717;
camera.shear = 0; camera.shear = 0;
camera.direction = 0; camera.direction = -205;
camera.height = RCL_UNITS_PER_SQUARE * 2; camera.height = 2048;
camera.resolution.x = SCREEN_WIDTH; camera.resolution.x = SCREEN_WIDTH;
camera.resolution.y = SCREEN_HEIGHT; camera.resolution.y = SCREEN_HEIGHT;