Exemple #1
0
    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);
                }
            }
        }
    }
Exemple #2
0
 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;
    }
Exemple #4
0
    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);
             */
        }
    }
Exemple #5
0
    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));
        }
    }
    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;
    }
    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);
            */
        }
    }
 private void SaveVertexBasics()
 {
     _vtxPositionsRange = SaveGeometry(mMesh.vertices);
     _vtxNormalsRange = SaveGeometry(mMesh.normals);
     _vtxUV0Range = SaveUVs(mMesh.uv);
     _vtxUV1Range = SaveUVs(mMesh.uv2);
 }
    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);
                }
            }
        }
    }
    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;
    }