Разбиение сферы на треугольники



Рисунок 6.4. Разбиение сферы на треугольники

Мы будем управлять степенью дискретизации сферы с помощью двух чисел: количества колец (gnRings) и количества секций (gnSects). Они определяют как полное количество вершин, так и треугольников. Если глобально зададим переменные:

const UINT gnRings = 20; // Количество колец (широта)

const UINT gnSects = 20; // Количество секций (долгота),то, так как каждый прямоугольник разбит на два треугольника, общее количество треугольников будет:

const UINT gnTria = (gnRings+1) * gnSects * 2;

//===Нетрудно подсчитать и общее количество вершин:

const UINT gnVert = (gnRings+1) * gnSects + 2;

Мы уже, по сути, начали писать код, поэтому создайте новый файл Sphere.срр и подключите его к проекту, а предыдущий файл OG.cpp отключите. Эти действия производятся так:

  1. Поставьте фокус на элемент дерева OG.cpp в окне Solution Explorer и нажмите клавишу Delete. При этом файл будет отключен от проекта, но он останется в папке проекта.


  2. Переведите фокус на строку Console того же окна и, вызвав контекстное меню, дайте команду Add New Item.
  3. Выберите шаблон C++ File (.срр) и, задав имя файла Sphere.срр, нажмите ОК.

Введите в него директивы препроцессора, которые нам понадобятся, а также объявления некоторых констант:

#include <stdlib.h>

#include <stdio.h>

#include <math.h>

#include <string.h>

#include <time.h>

#include <windows.h>

#include <gl\gl.h>

#include <gl\glu.h>

#include <gl\glaux.h>

const UINT gnRings = 40; // Количество колец (широта)

const UINT gnSects = 40; // Количество секций (долгота)

//====== Общее количество треугольников

const UINT gnTria = (gnRings+1) * gnSects * 2;

//====== Общее количество вершин

const UINT gnVert = (gnRings+1) * gnSects + 2;

//====== Два цвета вершин

const COLORREF gClrl = RGB(0, 255, 0);

const COLORREF gClr2 = RGB(0, 0, 255);

const double gRad = 1.5; // Радиус сферы

const double gMax =5.; // Амплитуда сдвига

const double PI = atan(1.)*4,; // Число пи



Содержание раздела