При использовании Context3DVertexBufferFormat.BYTES_4, каков диапазон значений одного поля?

Если я заполню буфер вершин, используя метод байтового массива:

//Example:
var ba:ByteArray = new ByteArray();

//Write vertex #0:
ba.writeFloat(-.5);
ba.writeFloat(-.5);
ba.writeUnsignedInt(0);
ba.writeUnsignedInt(0);

//Write vertex #1:
ba.writeFloat(.5);
ba.writeFloat(-.5);
ba.writeUnsignedInt(1);
ba.writeUnsignedInt(0);

//Write vertex #2:
ba.writeFloat(.5);
ba.writeFloat(.5);
ba.writeUnsignedInt(1);
ba.writeUnsignedInt(1);

//Write vertex #3:
ba.writeFloat(-.5);
ba.writeFloat(.5);
ba.writeUnsignedInt(0);
ba.writeUnsignedInt(1);

myVertexBuffer.uploadFromByteArray(ba, 0, 0, 4);

Затем установите атрибут vertex-buffer в следующем формате:

var format:String = Context3DVertexBufferFormat.BYTES_4;
context3D.setVertexBufferAt(0, myVertexBuffer, 0, format);

Каков диапазон возможных значений (от 0 до 255? 0,0 до 1,0? И т. Д.) Для поля атрибута Vertex (в данном случае, va0.x, va0.y, va0.z, va0.w)? Это зависит от того, какой тип данных записывается в ByteArray объект (writeFloat против writeUnsignedInt)?

1 ответ

Решение

BYTES_4 распаковывается как 4 байта в диапазоне [0..1]. Таким образом, байты 0xff, 0x7f, 0, 1 станут 1,0, 0,5, 0, 1/255 в вершинной программе. В вашем случае WriteUnsignedInt будет заполнять только x значением 1. Вместо этого вы должны использовать WriteByte 4 раза или, что еще лучше, упаковать свои 4 значения в одно целое без знака, как цвет.

Другие вопросы по тегам