В большинстве классов принцип инкапсуляции принят в ослабленном виде: большинство полей данных определены как publ ic, а не private, - для краткости, а также чтобы избежать необходимости определения большого числа функций аксессоров (accessor) и мутаторов (mutator).
Еще один прекрасный источник классов и утилит можно найти в серии «Жемчужины графики» («Graphics Gems»), онлайновое представление которого расположено в Интернете по адресу http:// www.acm.org/tog/GraphicsGems/index.html.
Классы, определенные в данном приложении, собраны в заголовочных файлах (. h) и в файлах исходного кода (.срр), которые также доступны на Интернет-сайте книги (см. введение). Совокупности описанных ниже классов.
1. Классы для двумерной графики. Эти классы обеспечивают определенную поддержку рисования двумерных рисунков и включают в себя IntPoint, Point2, Polyline, IntRect, Vector2, Canvas.
2. RGBpixmap. Классы (то есть mRGB и RGBpixmap) обеспечивают поддержку создания и рисования пиксельных карт (pix map), в том числе чтение изображения, записанного в формате BMP.
3. SDL. Классы поддерживают управление и рисование трехмерных сцен, в том числе сцен, описанных на языке SDL (см. приложение Д). Сюда включены следующие классы: Point3, Vector3, Со1огЗ, Light, Affine4, AffineStack, Material, GeomObj, Boolean, UnionBool, IntersectionBool, DifferenceBool, Shape, Cube, Sphere, TaperedCylinder, Square, Plane, Face, Mesh, Torus, Teapot, Scene.
4. Шум (Noise). В эту группу классов входит класс Noi se, предназначенный для создания трехмерного шума и турбулентности для текстуры твердого тела.
5. Классы трассировки луча (ray-tracing). Включают в себя: PointCluster, Spherelnfo, Cuboid, Ray, Hitinfo, Intersection.
В1. Классы для двумерной графики В1. Классы для двумерной графики
// graphics2d.h
// A collection of classes to support 2D graphics
// Набор классов для поддержки двумерной графики
#ifndef _GRAPHICS2D
#define _GRAPHICS2D
#include <string>
#include <iostream>