Calculate the horizon of a curved face? - Not extrema

╄→гoц情女王★ 提交于 2019-11-30 21:06:09

You don't say how your surface is defined, only that it is bounded by two quadratic Bézier curves. There are lots of ways to build such a surface, and each way of building it would have a different horizon. So this answer is going to be guesswork.

The horizon consists of those points on the surface where the vector from the camera to the point is tangent to the surface, as shown here:

A quadratic Bézier curve has parametric equation

B(t) = (1 − t)2 P0 + 2(1 − t)t P1 + t2 P2

differentiating that with respect to t gives us the tangent to the curve:

B′(t) = 2(t − 1) P0 + 2(1 − 2t) P1 + 2t P2

and this is parallel with the vector from the camera (at the origin) to the curve if

B(t) × B′(t) = 0

Solve this for t and you'll have the point on the curve at the horizon. How you can extend this to the horizon for the whole surface depends on how your surface is constructed. (Maybe you can just find the horizon points for the curves at each end of the surface and join them with a straight line?)

Does it work to first rotate the curves so that the connection between the corner points is horizontal and then calculating the extrema?

To test it visually, you can rotate your example image by about 150 degree:

Rotated image http://www.freeimagehosting.net/uploads/ad502509e9.png

Note the extrema of this curve isn't exactly where you want it, but this could be caused by several factors, for example the way you marked the horizon points doesn't seem to be that exact.

What you're looking for is actually called a silhouette, not a horizon.
The most simple method of doing this is finding the boundary between the surface parts in which the normal is directed towards the camera (dot product is negative) and the surface parts in which the normal is directed away from the camera (dot product is positive).

With a triangle mesh you can do this directly by using the normals. with NURBS you can probably find a closed formula which does this.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!