5
$\begingroup$

I am creating a simple 3D engine as a learning project to get the hang on spherical trigonometry. I am using the following approach. 1. A model consists of a lot of triangular faces. 2. Each triangle is rendered through finding where the vectors pointing to the corners of it intersect a plane. This creates a flat projection I draw to the screen.

projection

I have already implemented this, and it works great, except when some of the corners of a triangle are located behind me.

outside the view

It is quite obvious what the problem is: The vector pointing to the corner is never intersecting the plane. But I need a point to render the projection, as a part of the triangle is visible. That causes trouble. I can not place the third corner anywhere on my projection plane, as the edges of the projected triangle are diverging when they escape the field of view.

Logically, the edges of the projected triangle are thus pointing towards two different points on the plane outside the frame (or on the frame border, depending on taste and size of data types).

frame of view

Suddenly having to deal with rendering a four-sided polygon instead of a triangle is no problem, my rasterization algorithms are flexible. I can however not figure out how to calculate the locations of the new "off-screen" points. How can I find them?

$\endgroup$
  • $\begingroup$ You don't project it. You clip the polygon it against a front clipping plane (or more generally against the view frustum) and then project those results. I had a quick search to try to find a good page explaining the details but nothing really gave a simple/clear explanation. I could suggest a textbook if that'd help. $\endgroup$ – Simon F Sep 5 '16 at 12:18
  • $\begingroup$ @SimonF I would appreciate a textbook suggestion. Is the 'clip' approach then suitable for rendering? Moving around in a model a made, it does not look unnatural. $\endgroup$ – Hohmannfan Sep 5 '16 at 12:25
  • $\begingroup$ Actually it is possible to avoid near clipping by using homogeneous rendering but that has some other drawbacks. Possible texts include Watt & Watt's "Advanced Animation and Rendering Techniques" Foley, Van Dam et al's "Computer Graphics: Principles and Practice" - It's old but clipping hasn't changed. I'm surprised nothing simple/clear shows up in my web searches (for example, Wikipedia's entry doesn't seem to contain much), but you could try searching for Weiler-Atherton or Cohen–Sutherland. $\endgroup$ – Simon F Sep 5 '16 at 12:41
2
$\begingroup$

Trying to explain a problem seems to help the thought process. This is what eventually worked for me:

I realized that I can easily find the point (in 3D space) where a line between two of the corners brakes through one of the walls in my pyramid field of view, given the coordinates of the out-of-view corner and one of the visible ones. It is only a matter of finding the intersection between two lines. The position of the intersection point gives away the height on the frame wall.

wall intersection

Self answer, yes, but nothing came to mind before posting at SE.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.