Пакет | flash.display3D |
Класс | public class VertexBuffer3D |
Наследование | VertexBuffer3D Object |
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 11, AIR 3 |
Используйте объект VertexBuffer3D для определения данных, связанных с каждой точкой в наборе вершин. Данные вершин можно загрузить из массива Vector или ByteArray. (После загрузки ссылки на данные в исходном массиве не сохраняются; изменение или удаление исходного массива не влечет за собой удаление данных вершин.)
Данные, связанные с каждой вершиной, имеют определенный приложением формат и используются в качестве входных данных для вершинной шейдерной программы. Определите данные, которые принадлежат определенным входным данной вершинной программы, с использованием функции setVertexBufferAt()
экземпляра Context3D. Вершинная программа поддерживает использование до восьми наборов входных данных (также называются регистрами атрибутов вершин). В каждом входном наборе может требоваться от одного до четырех 32-разрядных значений. Например, координаты положения вершины [x,y,z] можно передать в вершинную программу в виде вектора, содержащего три 32-разрядных значения. В классе Context3DVertexBufferFormat определяются константы для поддерживаемых форматов входных данных шейдера. Можно указать до шестидесяти четырех 32-разрядных значений (256 байт) данных для каждой точки (но использование всех данных в одном вершинном шейдере в этом случае будет невозможно).
Функция setVertexBufferAt()
также определяет, какой буфер вершин необходимо использовать для визуализации любых последующих вызовов drawTriangles()
. Для визуализации данных из другого буфера вершин вызовите setVertexBufferAt()
еще раз с подходящими аргументами. (Можно хранить данные для одной точки в нескольких буферах вершин (например, данные о положении в одном буфере, а координаты текстуры в другом), но, как правило, визуализация выполняется эффективнее, когда все данные для точки передаются из одного буфера.)
Объект Index3DBuffer, переданный в метод drawTriangles()
экземпляра Context3D, упорядочивает данные вершин в треугольники. Каждое значение в буфере индексов является индексом для вершины в буфере вершин. Набор из трех последовательных индексов определяет треугольник.
Объект VertexBuffer3D нельзя создавать напрямую. Используйте для этого метод createVertexBuffer()
экземпляра Context3D.
Чтобы освободить ресурсы контекста визуализации, связанные с буфером вершин, вызовите метод dispose()
объекта.
Связанные элементы API
Метод | Определено | ||
---|---|---|---|
Освобождает все ресурсы, связанные с этим объектом. | VertexBuffer3D | ||
Показывает, определено ли заданное свойство для объекта. | Object | ||
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра. | Object | ||
Показывает наличие заданного свойства и его перечисляемость. | Object | ||
Задает доступность динамического свойства для операций цикла. | Object | ||
Возвращает строковое представление этого объекта, отформатированного в соответствии со стандартами, принятыми для данной локали. | Object | ||
Возвращает строковое представление заданного объекта. | Object | ||
Загружает данные для набора точек в контекст визуализации из массива байтов. | VertexBuffer3D | ||
Загружает данные для набора точек в контекст визуализации из векторного массива. | VertexBuffer3D | ||
Возвращает элементарное значение заданного объекта. | Object |
dispose | () | метод |
public function dispose():void
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 11, AIR 3 |
Освобождает все ресурсы, связанные с этим объектом. После очистки буфера вершин происходит сбой вызова метода upload() и визуализации с использованием этого объекта.
uploadFromByteArray | () | метод |
public function uploadFromByteArray(data:ByteArray, byteArrayOffset:int, startVertex:int, numVertices:int):void
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 11, AIR 3 |
Загружает данные для набора точек в контекст визуализации из массива байтов.
Параметры
data:ByteArray — массив байтов, содержащий данные вершин. Длина каждого значения данных равна четырем байтам. Количество значений в вершине определяется во время создания буфера с использованием параметра data32PerVertex для метода createVertexBuffer3D() экземпляра Context3D. Длина данных в байтах должна быть равна значению byteArrayOffset , к которому прибавлено умноженное на четыре число значений в вершине, умноженное на количество вершин. Для объекта ByteArray необходимо использовать формат с прямым порядком байтов.
| |
byteArrayOffset:int — количество байтов для пропуска от начала данных.
| |
startVertex:int — Индекс первой загружаемой вершины. Значение startVertex, не равное нулю, может использоваться для загрузки подрегиона данных вершины.
| |
numVertices:int — Количество вершин для загрузки из объекта data .
|
Выдает
TypeError — Ошибка пустого указателя: когда data имеет значение null.
| |
RangeError — Неверный размер ввода: если значение byteArrayOffset больше 0, или если значение byteArrayOffset больше или равно длине массива data , или если количество элементов в массиве data минус byteArrayOffset меньше значения numVertices *data32pervertex *4, переданного в Context3D::createVertexBuffer() .
| |
Error — 3768: API-интерфейс Stage3D не может использоваться во время выполнения в фоновом режиме.
|
uploadFromVector | () | метод |
public function uploadFromVector(data:Vector.<Number>, startVertex:int, numVertices:int):void
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 11, AIR 3 |
Загружает данные для набора точек в контекст визуализации из векторного массива.
Параметры
data:Vector.<Number> — вектор 32-разрядных значений. Отдельная вершина состоит из количества значений, сохраняемых последовательно в векторе. Количество значений в вершине определяется во время создания буфера с использованием параметра data32PerVertex для метода createVertexBuffer3D() экземпляра Context3D. Длина вектора должна быть равна числу значений в каждой вершине, умноженному на число вершин.
| |
startVertex:int — Индекс первой загружаемой вершины. Значение startVertex , не равное нулю, может использоваться для загрузки подобласти данных вершин.
| |
numVertices:int — Число вершин, представленных значением data .
|
Выдает
TypeError — Ошибка пустого указателя: когда data имеет значение null.
| |
RangeError — Неверный размер ввода: если количество элементов в массиве data меньше значения numVertices * data32PerVertex , переданного в Context3D::createVertexBuffer() , или если сумма startVertex + numVertices больше значения numVertices переданного в Context3D::createVertexBuffer() .
|
setVertexBufferAt()
вызывается для указания того, что первые три точки данных передаются в вершинную программу в качестве 3 значений с плавающей точкой в va0 и вторые три точки данных передаются в качестве va1. Вершинная программа поддерживает до 8 определенных подобным образом входных значений, которые также называются регистрами атрибутов.
const dataPerVertex:int = 6; var vertexData:Vector.<Number> = Vector.<Number>( [ // x, y, z r, g, b format 0, 0, 0, 1, 1, 1, -1, 1, 0, 0, 0,.5, 1, 1, 0, 0, 0, 1, 1,-1, 0, .5, 0, 0, -1,-1, 0, 1, 0, 0 ] ); var vertexes:VertexBuffer3D = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex ); vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex ); //Identify vertex data inputs for vertex program renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //Defines shader input va0 as the position data renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //Defines shader input va1 as the color data
Tue Jun 12 2018, 11:34 AM Z