mirror of
https://git.coom.tech/drummyfish/raycastlib.git
synced 2024-11-21 20:29:59 +01:00
Move shear to camera
This commit is contained in:
parent
78ec58d1df
commit
5c9c7cb299
1 changed files with 7 additions and 9 deletions
16
raycastlib.h
16
raycastlib.h
|
@ -101,6 +101,8 @@ typedef struct
|
||||||
Vector2D position;
|
Vector2D position;
|
||||||
Unit direction;
|
Unit direction;
|
||||||
Vector2D resolution;
|
Vector2D resolution;
|
||||||
|
int16_t shear; /* Shear offset in pixels (0 => no shear), can simulate
|
||||||
|
looking up/down. */
|
||||||
Unit fovAngle;
|
Unit fovAngle;
|
||||||
Unit height;
|
Unit height;
|
||||||
|
|
||||||
|
@ -203,13 +205,10 @@ void castRaysMultiHit(Camera cam, ArrayFunction arrayFunc,
|
||||||
index), can be 0 (no type in hit result)
|
index), can be 0 (no type in hit result)
|
||||||
@param pixelFunc callback function to draw a single pixel on screen
|
@param pixelFunc callback function to draw a single pixel on screen
|
||||||
@param constraints constraints for each cast ray
|
@param constraints constraints for each cast ray
|
||||||
@param verticalShear normalized camera shear from (1 = UNITS_PER_SQUARE =
|
|
||||||
camera y resolution, 0 means no shear), can simulate
|
|
||||||
looking up/down
|
|
||||||
*/
|
*/
|
||||||
void render(Camera cam, ArrayFunction floorHeightFunc,
|
void render(Camera cam, ArrayFunction floorHeightFunc,
|
||||||
ArrayFunction ceilingHeightFunc, ArrayFunction typeFunction,
|
ArrayFunction ceilingHeightFunc, ArrayFunction typeFunction,
|
||||||
PixelFunction pixelFunc, RayConstraints constraints, Unit verticalShear);
|
PixelFunction pixelFunc, RayConstraints constraints);
|
||||||
|
|
||||||
void moveCameraWithCollision(Camera *camera, Vector2D planeOffset,
|
void moveCameraWithCollision(Camera *camera, Vector2D planeOffset,
|
||||||
Unit heightOffset, ArrayFunction floorHeightFunc,
|
Unit heightOffset, ArrayFunction floorHeightFunc,
|
||||||
|
@ -854,7 +853,7 @@ void _columnFunction(HitResult *hits, uint16_t hitCount, uint16_t x, Ray ray)
|
||||||
|
|
||||||
void render(Camera cam, ArrayFunction floorHeightFunc,
|
void render(Camera cam, ArrayFunction floorHeightFunc,
|
||||||
ArrayFunction ceilingHeightFunc, ArrayFunction typeFunction,
|
ArrayFunction ceilingHeightFunc, ArrayFunction typeFunction,
|
||||||
PixelFunction pixelFunc, RayConstraints constraints, Unit verticalShear)
|
PixelFunction pixelFunc, RayConstraints constraints)
|
||||||
{
|
{
|
||||||
_pixelFunction = pixelFunc;
|
_pixelFunction = pixelFunc;
|
||||||
_floorFunction = floorHeightFunc;
|
_floorFunction = floorHeightFunc;
|
||||||
|
@ -863,9 +862,7 @@ void render(Camera cam, ArrayFunction floorHeightFunc,
|
||||||
_camResYLimit = cam.resolution.y - 1;
|
_camResYLimit = cam.resolution.y - 1;
|
||||||
_middleRow = cam.resolution.y / 2;
|
_middleRow = cam.resolution.y / 2;
|
||||||
|
|
||||||
if (verticalShear != 0)
|
_middleRow = _middleRow + cam.shear;
|
||||||
_middleRow = _middleRow + (verticalShear * _middleRow) /
|
|
||||||
UNITS_PER_SQUARE;
|
|
||||||
|
|
||||||
_computeTextureCoords = constraints.computeTextureCoords;
|
_computeTextureCoords = constraints.computeTextureCoords;
|
||||||
|
|
||||||
|
@ -933,7 +930,8 @@ PixelInfo mapToScreen(Vector2D worldPosition, Unit height, Camera camera)
|
||||||
|
|
||||||
result.position.y = camera.resolution.y / 2 -
|
result.position.y = camera.resolution.y / 2 -
|
||||||
(camera.resolution.y *
|
(camera.resolution.y *
|
||||||
perspectiveScale(height - camera.height,result.depth)) / UNITS_PER_SQUARE;
|
perspectiveScale(height - camera.height,result.depth)) / UNITS_PER_SQUARE
|
||||||
|
+ camera.shear;
|
||||||
|
|
||||||
Unit middleColumn = camera.resolution.x / 2;
|
Unit middleColumn = camera.resolution.x / 2;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue