Самоучитель по 3dsmax 7

         

Использовать большую таблицу и занести в нее все возможные комбинации цвета и градации освещения


Использовать большую таблицу и занести в нее все возможные комбинации цвета и градации освещения. Таблица получится совсем не маленькая, размером 65536*32 = 2 мегабайта. Я написал здесь 32, потому как в этих режимах на компоненту отводится по 5 бит (за исключением 6-битной зеленой компоненты в 16-битном режим), и делать больше градаций освещенности, чем 32, бессмысленно.

Метод 2: делать все так же, как в 24/32-битных режимах. Проблемы возникнут из-за того, что придется с муками выдирать нужные несколько бит компоненты из пиксела. Таблицы для компонент лучше заранее сделать со всеми нужными сдвигами, т.е. значения элементов таблиц должны быть такого вида: 000bbbbb - синий, 8 бит 00000gggggg00000 - зеленый, 16 бит rrrrr000 - красный, 8 бит

Тогда конечный цвет считается примерно так: outputColor = (redTable[(color >> 10) & 0x2F] > 5) & 0x1F] + blueTable[color & 0x1F].

На ассемблере это делается, видимо, побыстрее - и покрасивее. Примерно так: ; ... mov bx,color shr bx,10 and bx,02Fh mov ah,redTable[bx] mov bx,color and bx,01Fh mov al,blueTable[bx] mov bx,color shr bx,5 ; можно заменить на and bx,01Fh ; shr bx,4 shl bx,1 ; and bx,02Eh or ax,greenTable[bx] mov outputColor,ax ; ...

Метод 3: рисовать все в 24/32-бита, освещение соответсвенно с текстурой совмещать по пункту 5.6.2, а потом непосредственно при выводе на экран делать преобразование из 24/32-бит в 15/16. Или использовать PTC и предоставить делать нужное преобразование именно ему.



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