>> C = imread('texture.bmp' ) ;
>> whos С
Name Size Bytes Class
С 300х300х3 270000 uint8 array
Grand total is 270000 elements using 270000 bytes
Массив с является трехмерным, третье измерение соответствует цвету в RGB. Перед использованием массива цвета в качестве текстуры, его следует преобразовать к типу double и масштабировать элементы:
>> C = double(C);
>> С(:, :,1) = С(:, :,1)/255;
>> С(:, :,2) = С(:, :,2)/255;
>> С(:,:,3) = С(:,:,3)/255;
Теперь трехмерный массив вещественных чисел можно использовать для задания цвета поверхности.
>> surface('Xdata',X,'YData',Y,'ZData',Z,'Cdata',C,'FaceColor', ...
'texturemap', 'CDataMapping', 'direct');
>> view(-37.5,30)
Стиль и толщина линий каркасной поверхности устанавливаются при помощи свойств LineStyle и LineWidth. Значениями LineStyle могут быть:':', '‑‑' или '–', a LineWidth – вещественное число, равное толщине линий в пунктах (1 пункт = 1/72 дюйма).
Тип, размер и способ закраски границ и внутренности маркеров, помещаемых в узлах каркасной сетки, определяют свойства Marker,
MarkerSize, MarkerEdgeColor, MarkerFaceColor.
Можно также освещать поверхность и управлять свойствами, определяющими взаимодействие поверхности со светом. Ниже перечислены свойства поверхности, отвечающие за освещение.
▪ Ambientstrength – интенсивность ненаправленного окружающего света, который освещает всю поверхность. Значением может быть вещественное число от нуля до единицы, по умолчанию используется 0.3. Цвет определяется значением свойства AmbientLigthColor осей (объекта axes).
▪ BackFaceLighting – определение способа частей поверхности в зависимости от направления нормали к поверхности и расположения наблюдателя. Значение reverselit (установленное по умолчанию) соответствует освещению внутренних поверхностей, нормаль к которым направлена от наблюдателя, так же как и внешних. Внутренние поверхности не освещаются, если свойство BackFaceLighting имеет значение unlit. Освещение границы замкнутых объектов убирается при помощи lit.
▪ DiffuseStrength – интенсивность рассеиваемого поверхностью света, излучаемого источником. Значение свойства DiffuseStrength может принимать вещественные значения от нуля до единицы, по умолчанию используется 0,6.
▪ EdgeLighting и FaceLighting – Способ освещения границ и ячеек каркасной поверхности светом, идущим от источника. Свет не оказывает влияния на границы или ячейки каркасной поверхности, если соответствующее свойство установлено в 'none'. Самым простым способом является равномерное освещение границ ячеек и самих ячеек. Равномерное освешение задается значением 'flat'. Более сложным, но дающим лучший эффект, является способ Гуро, который используется при выборе 'gouraud'. Интенсивность света вычисляется в узлах каркасной сетки, затем интерполируется вдоль границ каждой ячейки. Интенсивность света в точках ячейки определяется при помощи интерполяции вдоль отрезка прямой, соединяющего ребра. Самое естественное освещение поверхности обеспечивается выбором значения 'phong', соответствующего способу Фонга. Способ Фонга состоит в интерполяции нормали сначала вдоль границ ячейки, а затем внутри ячейки. Зная нормаль в каждой точке поверхности (в каждом пикселе), можно определить, как она освещена внешним источником света. Метод Фонга требует достаточно большого объема вычислений, по сравнению с другими методами.
Листинг 1 содержит пример использования функции surface для построения параметрически заданной поверхности, освещенной одним источником спета, кроме ненаправленного света.
Листинг 1, Пример использования функции surface
Do'stlaringiz bilan baham: |