Displaying debug line in custom raytracer implementation

Not sure if I should post this here or on the Math forum, but I will try my luck.

Some background. I made my custom raytracer. The processing happens purely on the CPU for now, no GPU interaction whatsoever. It supports basic Phong shading and X levels of reflections.

I started fiddling with some ideas now and I realized that I need a way to display debug lines so that I could debug what I am doing, at least to some extent.

I thought of this solution: Debug line is a constrained plane, which means that it is basically a rectangle, with pixels having their normal always facing the camera. The line is defined by a start point, magnitude, direction, and thickness. Based on these properties I should be able to calculate everything I need to get it displayed.

Below is some pseudocode for checking if my ray is intersecting this debug line.

Defined in the line initialization are:

• startPosition (where the line starts)
• magnitude (lenght of the line)
• direction (line direction)
• thickness (thickness of the line)

Code:

function isIntersecting(_originRay, _rayOrigin)

ray = _originRay.Normalize(); // Ray coming from the camera
spreadVector = direction.Cross(ray).Normalize(); // Vector showing the line width direction
lineNormal = ray * (-1); // Debug line pixel always faces the camera directly

// Plane intersection
denominator = ray.Dot(lineNormal);
if (denominator > 0) // Plane not visible
return false;

hitDistance = (startPosition - _rayOrigin).Dot(lineNormal) / denominator;
hitPosition = _rayOrigin + (ray * hitDistance); // Get the intersection point in 3D space

hitPositionTranslated = hitPosition - startPosition;

if (hitPositionTranslated.Dot(widthVector) > widthVector.Length() || hitPositionTranslated.Dot(widthVector) < 0) // Ray hitting the plane outside the constrained area
return false;

// Code for checking height here - Not putting it cause width is not working at first place

return true;


I get this when using pretty great width (should be ~100px), but it is thin - looks like the algorithm is not constraining the width correctly:

I am obviously doing something wrong here. Any kind of help would be much appreciated!

hitPositionTranslated.Dot(widthVector) / widthVector.Length()