2012-01-25 19 views
0

Я действительно не понимаю, что я делаю неправильно, но, по словам Adobe, это то, как вы используете uploadFromByteArray(...) на IndexBuffer3D объекта:Как написать на IndexBuffer3D с uploadFromByteArray (...)

То, что я не понимаю, который письменно-метод я должен использовать, чтобы написать целые числа моих вершин-индексов? Я пробовал writeFloat, writeUnsignedInt, writeInt, даже writeShort и все терпит неудачу. Я установил экземпляр ByteArray в ba.endian = Endian.LITTLE_ENDIAN, но все равно не пошел.

Я позаботился о том, чтобы сбросить позицию ByteArray до 0, прежде чем я попытаюсь загрузить его в свой индексный буфер, но ничего не появляется!

Если я загружаю Vector.<uint>, то это работает! Поэтому я знаю, что проблема связана не с шейдером AGAL.

Любые идеи?

ответ

2

Nevermind, только что нашел то, что я делаю неправильно:

НЕПРАВИЛЬНО:

_buffer.uploadFromByteArray(_dataBytes, 0, 0, _dataBytes.length >> 2); 

я делил на 4 на первом (побитового сдвига в два раза одно и то же), потому что, хотя числа байтов на индекс было 4 байта. Нах ах! Некорректное!

ByteArrays для целей IndexBuffer3D должен быть написан с writeShort(), так как он использует 16-разрядные номера вместо 32-разрядных. Поэтому он использует только 2 байта на индексы.

ПРАВИЛЬНО:

_buffer.uploadFromByteArray(_dataBytes, 0, 0, _dataBytes.length >> 1); 

Надежда, что проясняет его для других пользователей Stage3D! :)