При использовании 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 значения в одно целое без знака, как цвет.