Компьютерная графика, мультимедиа и игры на Visual C#


         

Строим матрицу преобразования, чтобы получить


        r2 = R * CSng(Cos(phi))
        Cx = r2 * CSng(Cos(theta))
        Cz = r2 * CSng(Sin(theta))
        MatrixTransformation(M, type_of_projection, _
        Cx, Cy, Cz, Fx, Fy, Fz, ux, uy, uz)
    End Sub
    ' Строим матрицу преобразования, чтобы получить
    'отражение напротив плоскости, проходящей 
    'через (p1, p2, p3) с вектором нормали <n1, n2, n3>:
    Public Sub m3Reflect(ByRef M(,) As Single, _
    ByVal p1 As Single, ByVal p2 As Single, _
    ByVal p3 As Single, ByVal n1 As Single, _
    ByVal n2 As Single, ByVal n3 As Single)
        Dim T(4, 4) As Single 'Перенос.
        Dim R1(4, 4) As Single 'Вращение 1.
        Dim r2(4, 4) As Single 'Вращение 2.
        Dim S(4, 4) As Single 'Отражение.
        Dim R2i(4, 4) As Single 'Не вращать 2.
        Dim R1i(4, 4) As Single 'Не вращать 1.
        Dim Ti(4, 4) As Single 'Не переносить.
        Dim D As Single : Dim L As Single
        Dim M12(4, 4) As Single : Dim M34(4, 4) As Single
        Dim M1234(4, 4) As Single
        Dim M56(4, 4) As Single : Dim M567(4, 4) As Single
        'Переносим плоскость к началу координат:
        MatrixTranslate(T, -p1, -p2, -p3)
        MatrixTranslate(Ti, p1, p2, p3)
        'Вращаем вокруг оси z,
        'пока нормаль не будет в y-z плоскости:
        MatrixIdentity(R1)
        D = CSng(Sqrt(n1 * n1 + n2 * n2))
        R1(1, 1) = n2 / D : R1(1, 2) = n1 / D
        R1(2, 1) = -R1(1, 2) : R1(2, 2) = R1(1, 1)
        MatrixIdentity(R1i)
        R1i(1, 1) = R1(1, 1) : R1i(1, 2) = -R1(1, 2)
        R1i(2, 1) = -R1(2, 1) : R1i(2, 2) = R1(2, 2)
        'Вращаем вокруг оси x, когда нормаль будет по оси y:
        MatrixIdentity(r2)
        L = CSng(Sqrt(n1 * n1 + n2 * n2 + n3 * n3))
        r2(2, 2) = D / L : r2(2, 3) = -n3 / L
        r2(3, 2) = -r2(2, 3) : r2(3, 3) = r2(2, 2)
        MatrixIdentity(R2i)
        R2i(2, 2) = r2(2, 2) : R2i(2, 3) = -r2(2, 3)
        R2i(3, 2) = -r2(3, 2) : R2i(3, 3) = r2(3, 3)
        'Рисуем отражение объекта перпендикулярно x-z плоскости:

Содержание  Назад  Вперед