Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OpenGL ES 1и2.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.8 Mб
Скачать

Цвет как атрибут вершины.

Цвет имеет четыре компоненты-красную, зеленую и синюю и альфа. Яркость каждой компоненты можно регулировать в диапазоне от 0 до 1. Всё многообразие цветов можно представить в виде комбинаций красной, зелёной и синей компоненты различной яркости. Последнюю четвертую компоненту цвета называют Альфой. Альфа - это степень непрозрачности цвета. Если Альфа=0 цвет считается абсолютно прозрачным, т.е. невидимым. Если Альфа=1 цвет считается абсолютно непрозрачным. Цвет-это свойство вершины. Как передать цвет вершин в OpenGL ? С помощью тех же буферов. Сначала подготовим буфер для цвета. Каждая вершина имеет четыре значения цвета как числа с плавающей точкой. Каждое число с плавающей точкой занимает в памяти 4 байта. Таким образом, цвет одной вершины занимает в памяти  16 байт. Тогда для треугольника нужно создать буфер размером 16*3=48 байт. FloatBuffer colorBuffer;     

ByteBuffer bb = ByteBuffer.allocateDirect(48); bb.order(ByteOrder.nativeOrder()); colorBuffer = bb.asFloatBuffer(); Запись цветов в буфер производится в следующем порядке: сначала красная компонента, затем зеленая, затем синяя и в конце альфа. Например, для треугольника выглядит так:

// цвет первой вершины - красный

float red1=1;

float green1=0;

float blue1=0;

float alpha1=1;

// цвет второй вершины - зелёный

float red2=0;

float green2=1;

float blue2=0;

float alpha2=1;

// цвет третьей вершины - синий

float red3=0;

float green3=0;

float blue3=1;

float alpha3=1;

// поставим текущую позицию в буфере на начало

colorBuffer.position(0);

// записываем в буфер цвета первой вершины colorBuffer.put(red1); colorBuffer.put(green1); colorBuffer.put(blue1);

colorBuffer.put(alpha1);

// записываем в буфер цвета второй вершины   colorBuffer.put(red2); colorBuffer.put(green2); colorBuffer.put(blue2); colorBuffer.put(alpha2);

// записываем в буфер цвета третьей вершины   colorBuffer.put(red3); colorBuffer.put(green3); colorBuffer.put(blue3); colorBuffer.put(alpha3);

// снова поставим текущую позицию в буфере на начало colorBuffer.position(0); Как альтернативу, можно сначала составить массив цветов треугольника, а затем записать массив в буфер:

float [] colorArray={1,0,0,1,  0,1,0,1,  0,0,1,1};

colorBuffer.position(0);

colorBuffer.put(colorArray);

colorBuffer.position(0);

Буфер цветов готов. Далее мы должны разрешить использование массивов цветов командой gl.glEnableClientState(GL10.GL_COLOR_ARRAY) и передать подготовленный буфер в OpenGL. Для передачи буфера в OpenGL служит команда glColorPointer:

gl.glColorPointer(4,GL10.GL_FLOAT,0,colorBuffer);

Первый аргумент 4 - количество цветов на вершину. Каждая вершина имеет четыре компоненты цвета (красный, зеленый, синий и альфа). Второй аргумент GL10.GL_FLOAT указывает, что буфере заполнен числами с плавающей точкой. Третий аргумент 0 - сдвиг в байтах между цветами одной вершины и цветами следующей вершины. Четвертый аргумент  colorBuffer  - это наш буфер цветов. Теперь цвета вершин переданы в OpenGL. Когда мы вызовем команду рисования glDrawArrays на экране появится треугольник, закрашенный цветами вершин. При этом, если включен режим сглаживания командой glShadeModel(GL10.GL_SMOOTH), цвета в треугольнике будут плавно изменяться при переходе от одной вершины к другой (эффект радуги).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]