1

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

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

然后使用以下格式设置顶点缓冲区属性:

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

Vertex 属性的字段(在本例中为va0.x、va0.y、va0.z、va0.w )的可能值范围是多少(0 ​​到 255?0.0 到 1.0?等)?写入对象的数据类型是否有所不同ByteArraywriteFloatwriteUnsignedInt)?

4

1 回答 1

1

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

于 2012-02-01T06:07:55.710 回答