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



Глава Методика проектирования неподвижных и подвижных пространственных фигур - часть 6


    //создаем массив из 100 пользовательских вершин:

    CustomVertex.PositionNormalTextured[] Vertex =

        (CustomVertex.PositionNormalTextured[])myVB.Lock(0, 0); // Lock the buffer (which will return our structs)

    for (int i = 0; i < 50; i++)

    {

        //Заполняем вершины данными:

        float theta = (float)(2 * Math.PI * i) / 49;

        //Рассчитываем нормали в вершинах:

        Vertex[2 * i].Normal = new Vector3((float)Math.Sin(theta), 0, (float)Math.Cos(theta));

        //Добавляем в вершину v-компоненту текстуры:

        Vertex[2 * i].Tv = 1.0f;

        //Рассчитываем координаты вершин:

        Vertex[2 * i + 1].Position = new Vector3((float)Math.Sin(theta), 1, (float)Math.Cos(theta));

        //Добавляем в вершину u-компоненту текстуры:

        Vertex[2 * i + 1].Tu = ((float)i) / (50 - 1);

    }

    //Открываем буфер вершин:

    myVB.Unlock();

}

//Включаем таймер и выполняем матричные преобразования:

private void SetupMatrices()

{

    //Используем глобальную матрицу (world matrix),

    //чтобы вращать фигуру вокруг оси y.

    myDevice.Transform.World = Matrix.RotationAxis(

        new Vector3(

        (float)Math.Cos(Environment.TickCount / 250.0f), 1,

        (float)Math.Sin(Environment.TickCount / 250.0f)),

        Environment.TickCount / 1000.0f);

    //Задаем координаты глаза наблюдателя

    //в матрице вида (view matrix):

    myDevice.Transform.View = Matrix.LookAtLH(

        new Vector3(0.0f, 3.0f, -5.0f),

        new Vector3(0.0f, 0.0f, 0.0f),

        new Vector3(0.0f, 1.0f, 0.0f));

    //При помощи матрицы проецирования (projection matrix)

    //выполняем перспективные преобразования:

    myDevice.Transform.Projection =

        Matrix.PerspectiveFovLH(

        (float)Math.PI / 4.0f, 1.0f, 1.0f, 100.0f);

}

//Выполняем визуализацию преобразованных вершин:

public void myRendering()

{

    if (myPause) return;

    //Очищаем и заливаем форму Form1 белым цветом:

    myDevice.Clear(ClearFlags.Target | ClearFlags.ZBuffer,




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