Алгоритмы компьютерной графики Пешков Анатолий Тимофеевич, БГУИР. 1 отображение просранства пользователя и машинного носителя 4
Скачать 1.86 Mb.
|
6.6 Затенение отрезка плоскостью при перспективной проекцииП ри отображении проекции трехмерных объектов возникает проблема затенения объектов заднего плана объектами переднего плана. Эту задачу в конечном плане всегда можно свести к задаче затенения отрезка треугольником. Графически эту задачу можно представить, как это показано на . . Рис. Затенение отрезка плоскостью при перспективной проекции ‑68 На приведенном рисунке в видовой системе координат с началом в точке Е представлен треугольник ABC и отрезок PQ. И требуется определить часть заданного отрезка, которая затеняется плоским треугольником. Очевидно, что затеняется та часть отрезка, которая находится во внутренней области бесконечной треугольной усеченной пирамиды с верхней гранью в виде треугольника ABC. На приведенном рисунке это отрезок IJ. Задача в общем случае решается в два этапа: на первом определяется точки пересечения отрезка с боковыми гранями бесконечной треугольной пирамиды с вершиной в точке Е, ребра которой проходят через точки А, В, С, т.е. определяется часть отрезка, находящаяся внутри этой пирамиды; на втором определяются пересечение найденного фрагмента отрезка с усеченной пирамидой. Рассмотрим действия на этих этапах. Первый этап. В общем случае точек пересечения может быть одна (касание или отрезок одним концом находится внутри бесконечной пирамиды), две (отрезок пронизывает пирамиду) и ни одной (отрезок полностью находится внутри пирамиды или вне ее. На рассматриваемом этапе поочередно ищутся точки пересечения отрезка с тремя гранями бесконечной пирамиды. Рассмотрим этот процесс для грани бесконечной пирамиды, проходящей через точки А и В. Сначала определим пересечение линии, несущей отрезок, с плоскостью, несущей рассматриваемую грань бесконечной пирамиды. Для этого представим уравнение, описывающее линию, несущую отрезок PQ, следующим образом: Т()= EP + r , где: Т() – векторное представление точки, принадлежащей прямой, проходящей через точки А и В. Координаты этой точки через параметр определяются как: x= xp +r1; y= yp +r2; z= zp +r3; r – вектор, определяемый отрезком PQ, причем r =r1,r2,r3, где: r1=xQ- xp; r2=уQ- уp; r3=zQ- zp; xQ, yQ, zQ; xp, yp, zp – соответственно, координаты точек Q и P. Зададим уравнение плоскости ЕАВ, проходящей через отрезок АВ и начало системы координат Е, т.е плоскости несущей рассматриваемую грань бесконечной треугольной пирамиды, в виде: D1x+ D2y+D3z +D = 0. Определим коэффициенты D1,D2,D3, D. В общем случае уравнение плоскости, проходящей через три точки L, M, N можно представить в виде определителя: Для плоскости ЕАВ, проходящей через начало видовой системы координат, можно записать: Отсюда, коэффициенты D1,D2,D3 можно определить как: D1= xАzB –yBzА D2= xBzА–xАzB; D3= xАyB –xByА. Значение параметра, соответствующего точи пересечения рассматриваемых плоскости и отрезка, найдем, решив совместно уравнение прямой и уравнение плоскости с найденными коэффициентам D1,D2,D3. D1(xA +r1) +D2( yA +r2) +D3(zA +r3) =0, Искомая точка пересечения с рассчитанным значением параметра будет принадлежать отрезку PQ, если будет выполняться условие: 0<= <=1. (6.6-1) Определим условия принадлежности найденной точки пересечения грани ЕАВ бесконечной треугольной пирамиды. Для этого найдем пересечение линии, несущей отрезок AB и плоскости ЕPQ, проходящей через точки Е, P, Q. Представим уравнение линии, несущей отрезок АВ, в векторной параметрической форме: Т()= EA + R , где: Т() – векторное представление точки, принадлежащей прямой, проходящей через точки А и В. Координаты этой точки через параметр определяются как: x= xp +R1 ; y= yp +R2; z= zp +R3; R – вектор, определяемый отрезком PQ, причем R =R1,R2,R3, где: R1=xB- xA; R2=уB- уA; R3=zB- zA; xA, yA, zA; xB, yB, zB – соответственно, координаты точек A и B. Зададим уравнение плоскости ЕPQ, несущей PQ и проходящей через начало системы координат Е, в виде: U1x+ U2y+U3z = 0. Определим коэффициенты U1, U2, U3. Уравнение плоскости ЕPQ, проходящей через начало видовой системы координат, можно, используя определитель, записать как: Отсюда, коэффициенты U1, U2, U3 можно определить как: U1= xpzQ –yQzP; U2= xQzP–xPzQ; U3= xPyQ –xQyP. Значение параметра, соответствующего точrи пересечения рассматриваемых плоскости и отрезка, найдем, решив совместно уравнение прямой АВ и уравнение плоскости с найденными коэффициентам D1,D2,D3. U1(xp +R1) +U2( yp +R2) +U3(zp +R3) =0, Искомая точка пересечения с рассчитанным значением параметра будет принадлежать отрезку АВ, если будет выполняться условие: 0 <= < =1. (6.6-2) Таким образом, чтобы точка пересечения линии, несущей отрезок PQ и плоскости, несущей грань ЕАВ бесконечной пирамиды, была бы точкой пересечения отрезка PQ и грани пирамиды ЕАВ, необходимо одновременное выполнение условия (6.6-1) и (6.6-1). Аналогичные расчеты необходимо сделать для всех остальных боковых граней заданной бесконечной пирамиды. Таким образом будет найдены точки I и J пересечения заданного отрезка и боковых граней бесконечной треугольной пирамиды. Второй этап Рассмотренным выше способом определяется уравнение плоскости, проходящей через точки А, В, С. Пусть это будет уравнение: F1x + F2y+ F3x + F = 0. (6.6-3) Поочередно подставляя в найденное уравнение плоскости координаты точек E, I, J, рассчитываются значения hE, hI, hJ, определяющие положение точек E, I, J относительно плоскости, несущей верхнюю грань А В С рассматриваемой бесконечной усеченной пирамиды: F1xЕ + F2yЕ+ F3zЕ + F = hЕ; F1xI + F2yI+ F3zI + F = hI; F1xJ + F2yJ + F3x J + F = h J. Если hЕ, hI, hJ имеют один и тот же знак, то найденные точки I, J обе находятся перед верхней гранью АВС (). В этом случае можно сделать вывод, что отрезок PQ полностью виден. Рис. Затенение отрезка плоскостью при перспективной проекции ‑69 Если hI, hJ имеют одинаковый знак и этот знак противоположен знаку hЕ, то это означает, что точки I, J располагаются за верхней гранью АВС и являются точками пересечения отрезком PQ c боковых граней бесконечной усеченной пирамиды, и часть заданного отрезка, ограниченная точками I,J, невидна (Рис. Затенение отрезка плоскостью при перспективной проекции -68). Если hI, hJ имеют разные знаки, то это означает, что точки I и J располагаются по разные стороны относительно верхней гранью АВС (Рис. Затенение отрезка плоскостью при перспективной проекции -70) В этом случае необходимо найти точку S пересечения отрезка PQ и плоскоси, несущей грань АВС, решив совместно уравнение плоскости, несущей грань АВС, и уравнение линии, несущей отрезок PQ. Если точка I находится по одну сторону от треугольника АBC, что и точка Е, то невидимой чстью затеняемого отрезка PQ будет отрезок SJ. В противном случае невидимой чстью затеняемого отрезка PQ будет отрезок SI. Q Рис. Затенение отрезка плоскостью при перспективной проекции ‑70 Как видно из выше описанного, в общем случае решение поставленной задачи довольно-таки сложно. Поэтому, прежде чем решать ее в общем случае, целесообразно проверить наличие в задании положения треугольника и отрезка частного случая. Рассмотрим несколько таких частных случаев. Частный случай 1. Отрезок находится перед треугольником АВС, а, следовательно, он полностью видим (Рис. Затенение отрезка плоскостью при перспективной проекции -71). Для того чтобы определить наличие этого случая, достаточно проанализировать положение отрезка относительно плоскости, несущей треугольник АВС. Процедура в этом случае аналогична той, какая использовалась выше для опеделения положения точек I и J по отноiении к плоскости, несущей треугольник ABC. Рис. Затенение отрезка плоскостью при перспективной проекции ‑71 Частный случай 2. Отрезок находится вне рассматриваемой бесконечной пирамиды, а следовательно полностью видим (Рис. Затенение отрезка плоскостью при перспективной проекции -72). Для того чтобы определить наличие этого случая необходимо для каждой боковой грани рассматриваемой бесконечной пирамиды проанализировать расположение точек P и Q по одну сторону и проверить будет ли эта сторона внешней. Если окажется, что заданный отрезок находится с внешней стороны относительно хотя бы одной грани, то отрезок полностью видим. Рис. Затенение отрезка плоскостью при перспективной проекции ‑72 Частный случай 3. Отрезок находится внутри бесконечной усеченной пирамиды, а следовательно полностью невидим (Рис. Затенение отрезка плоскостью при перспективной проекции -73). Для того чтобы определить наличие этого случая, можно использовать результаты анализов, выполняемого для предыдущих случая. Если окажется, Рис. Затенение отрезка плоскостью при перспективной проекции ‑73 что заданный отрезок находится с внутренней стороны относительно всех граней бесконечной усеченной пирамиды, то отрезок полностью невидим. |