private void SaveSkinningData() { int weightCount = SkinningComponentCount; _vtxBoneWeightsRange = mBinary.AllocateRange(mMesh.boneWeights.Length * weightCount * sizeof(float)); _vtxBoneIndicesRange = mBinary.AllocateRange(mMesh.boneWeights.Length * weightCount * sizeof(byte)); foreach (var weight in mMesh.boneWeights) { _vtxBoneWeightsRange.Write(weight.weight0); _vtxBoneIndicesRange.Write((byte)weight.boneIndex0); if (weightCount >= 2) { _vtxBoneWeightsRange.Write(weight.weight1); _vtxBoneIndicesRange.Write((byte)weight.boneIndex1); if (weightCount >= 4) { _vtxBoneWeightsRange.Write(weight.weight2); _vtxBoneWeightsRange.Write(weight.weight3); _vtxBoneIndicesRange.Write((byte)weight.boneIndex2); _vtxBoneIndicesRange.Write((byte)weight.boneIndex3); } } } }
private void SaveVertexBasics() { _vtxPositionsRange = SaveGeometry(mMesh.vertices); _vtxNormalsRange = SaveGeometry(mMesh.normals); _vtxUV0Range = SaveUVs(mMesh.uv); _vtxUV1Range = SaveUVs(mMesh.uv2); }
public GooBinaryPointer(GooBinaryRange range, Type dataType) { int typeSize = 1; if (dataType == typeof(byte)) { typeSize = 1; _typeString = "uint8"; } else if (dataType == typeof(ushort)) { typeSize = 2; _typeString = "uint16"; } else if (dataType == typeof(uint)) { typeSize = 4; _typeString = "uint32"; } else if (dataType == typeof(float)) { typeSize = 4; _typeString = "float32"; } else { throw new ArgumentException("Unrecognized range type " + dataType.ToString()); } if (range.Length % typeSize != 0) { throw new ArgumentException("Mesh data is not even multiple of element size"); } _start = range.Start; _length = range.Length / typeSize; }
private void SaveVertexColors() { _vtxColorsRange = mBinary.AllocateRange(mMesh.colors.Length * sizeof(float) * 4); foreach (var color in mMesh.colors) { // TEMP HACK _vtxColorsRange.Write(1.0f); _vtxColorsRange.Write(1.0f); _vtxColorsRange.Write(1.0f); _vtxColorsRange.Write(1.0f); /* * _vtxColorsRange.Write(color.r); * _vtxColorsRange.Write(color.g); * _vtxColorsRange.Write(color.b); * _vtxColorsRange.Write(color.a); */ } }
public GooBinaryRange AllocateRange(int pLength) { int alignedOffset = _nextOffset; if (ByteRangeAlignment > 0) { int misalignment = alignedOffset % ByteRangeAlignment; if (misalignment != 0) { alignedOffset += (ByteRangeAlignment - misalignment); } } var range = new GooBinaryRange(this, _writer, alignedOffset, pLength); _nextOffset = range.Start + range.Length; return(range); }
public void AddToBinary(GooBinary pBinary) { PostprocessCurveData(); _transRange = pBinary.Add(_translationKeyframes); _scaleRange = pBinary.Add(_scaleKeyframes); _rotRange = pBinary.AllocateRange(sizeof(float) * 4 * _rotationKeyframes.Length); foreach (var rotQuat in _rotationKeyframes) { _rotRange.Write(rotQuat[0]); _rotRange.Write(rotQuat[1]); _rotRange.Write(rotQuat[2]); _rotRange.Write(rotQuat[3]); } _timesRange = pBinary.AllocateRange(sizeof(float) * _clip.KeyframeCount); for (int i = 0; i < _clip.KeyframeCount; ++i) { _timesRange.Write(_clip.GetTimeAtKeyframe(i)); } }
private void SaveVertexColors() { _vtxColorsRange = mBinary.AllocateRange(mMesh.colors.Length * sizeof(float) * 4); foreach (var color in mMesh.colors) { // TEMP HACK _vtxColorsRange.Write(1.0f); _vtxColorsRange.Write(1.0f); _vtxColorsRange.Write(1.0f); _vtxColorsRange.Write(1.0f); /* _vtxColorsRange.Write(color.r); _vtxColorsRange.Write(color.g); _vtxColorsRange.Write(color.b); _vtxColorsRange.Write(color.a); */ } }
public GooBinaryRange AllocateRange(int pLength) { int alignedOffset = _nextOffset; if (ByteRangeAlignment > 0) { int misalignment = alignedOffset % ByteRangeAlignment; if (misalignment != 0) { alignedOffset += (ByteRangeAlignment - misalignment); } } var range = new GooBinaryRange(this, _writer, alignedOffset, pLength); _nextOffset = range.Start + range.Length; return range; }