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

Render wall height offset

This commit is contained in:
Miloslav Číž 2018-08-31 19:13:15 +02:00
parent fb3922a7ba
commit 50df4a40f4

View file

@ -485,14 +485,14 @@ void castRaysMultiHit(Camera cam, ArrayFunction arrayFunc,
} }
PixelFunction _pixelFunction = 0; PixelFunction _pixelFunction = 0;
ArrayFunction _arrayFunction = 0;
Camera _camera; Camera _camera;
void _columnFunction(HitResult *hits, uint16_t hitCount, uint16_t x, Ray ray) void _columnFunction(HitResult *hits, uint16_t hitCount, uint16_t x, Ray ray)
{ {
if (hitCount == 0) for (uint32_t j = 0; j < hitCount; ++j)
return; {
HitResult hit = hits[j];
HitResult hit = hits[0];
Unit dist = // adjusted distance Unit dist = // adjusted distance
(hit.distance * vectorsAngleCos(angleToDirection(_camera.direction), (hit.distance * vectorsAngleCos(angleToDirection(_camera.direction),
@ -502,7 +502,9 @@ void _columnFunction(HitResult *hits, uint16_t hitCount, uint16_t x, Ray ray)
int32_t height = perspectiveScale(50,dist,1); int32_t height = perspectiveScale(50,dist,1);
Unit offset = perspectiveScale(_camera.height,dist,1); int16_t z = _arrayFunction(hit.square.x,hit.square.y) * 50;
Unit offset = perspectiveScale(_camera.height - z,dist,1);
uint32_t start = _camera.resolution.y / 2 - height / 2 + offset; uint32_t start = _camera.resolution.y / 2 - height / 2 + offset;
@ -517,12 +519,14 @@ void _columnFunction(HitResult *hits, uint16_t hitCount, uint16_t x, Ray ray)
_pixelFunction(p); _pixelFunction(p);
} }
}
} }
void render(Camera cam, ArrayFunction arrayFunc, PixelFunction pixelFunc, void render(Camera cam, ArrayFunction arrayFunc, PixelFunction pixelFunc,
RayConstraints constraints) RayConstraints constraints)
{ {
_pixelFunction = pixelFunc; _pixelFunction = pixelFunc;
_arrayFunction = arrayFunc;
_camera = cam; _camera = cam;
castRaysMultiHit(cam,arrayFunc,_columnFunction,constraints); castRaysMultiHit(cam,arrayFunc,_columnFunction,constraints);
} }