使用Context3DVertexBufferFormat.BYTES_4时,一个字段的值范围是多少?

时间:2012-01-20 20:52:36

标签: flash bytearray vertex-shader vertex-buffer stage3d

如果我使用字节数组方法填充顶点缓冲区:

//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);

Vertex属性字段的可能值范围(0到255?0.0到1.0?等)是什么(在这种情况下, va0.x,va0.y,va0.z,va0.w )?是否将哪种数据类型写入ByteArray对象( writeFloat writeUnsignedInt )之间是否存在差异?

1 个答案:

答案 0 :(得分:1)

BYTES_4在[0..1]范围内解压缩为4个字节。 所以字节0xff,0x7f,0,1将在顶点程序中变为1.0,.5,0,1 / 255。 在你的情况下,WriteUnsignedInt只会用1填充x。 您应该使用WriteByte 4次,或者甚至更好地将4个值打包成一个unsigned int,就像一个颜色。