2. Добавьте элемент FOGTHICKNESS всюду в списке перечислений TokenType. О Изменения в SDL-файле с расширением .срр.
1. В функции whichtokenO добавьте следующую строку: if (temp - "fogginess") return (FOGTHICKNESS):
2. В функции getObjectO добавьте следующую строку:
case FOGTHICKNESS: fogThickness - getFloatO: break:
Вопрос о том, как использовать это новое поле, разумеется, остается за программистом. Так, при разработке трассировщика лучей программист может добавить к методу Scene: :shade() некоторый код, например:
if (fogThickness > 0) do something..;
Пример Д3.2. Определение нового типа объекта Допустим, что вы хотите добавить pie slice (ломтик пирога) к набору возможных объектов, появляющихся в сценах. Это будет часть тонкого кругового диска, лежащего в плоскости ху. Ломтик начинается с угла 0 (вдоль оси х) и продолжается против часовой стрелки (если смотреть из точки (0,0,1) в сторону начала координат) до угла sweep (развертка), измеряемого в градусах. Таким образом, если sweep равен 180, то круговой сектор равен половине круга в положительном полупространстве у, а если sweep
ДЗ. Расширение SDL
1045
равен 360, то круговой сектор составит полный круг. Расширим язык SDL так, чтобы распознавалось ключевое слово pieSlice с последующим параметром для угла sweep, например, так:
pieSlice 90
О Изменения в SDL-файле с расширением .h.
1. Определите класс PieSlice вместе с полем для хранения угла sweep с помощью следующего кода:
class PieSlice : public Shape { public:
float sweep: // и т. д. }:
2. Напишите код для соответствующих методов данного класса, таких как drawOpenGLO. О Изменения в SDL-файле с расширением .срр.
1. Добавьте следующую строку к функции whichtokenO: if (temp == "pieSlice") return (PIESLICE):
2. В функции getObjectO добавьте следующие строки:
case PIESLICE:
newShape = new PieSlice:
((PieSlice*)newShape) ->angle = getFloatO: break:
Литература На некоторые журналы и тексты так много ссылок, что в данной библиографии они приводятся в сокращенной форме.