123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- using GLTFExport.Entities;
- namespace Max2Babylon
- {
- public class GLTFBufferService
- {
- private static GLTFBufferService _instance;
- public static GLTFBufferService Instance
- {
- get
- {
- if (_instance == null)
- {
- _instance = new GLTFBufferService();
- }
- return _instance;
- }
- }
- public GLTFBuffer GetBuffer(GLTF gltf)
- {
- var buffer = gltf.buffer;
- if (buffer == null)
- {
- buffer = new GLTFBuffer
- {
- uri = gltf.OutputFile + ".bin"
- };
- buffer.index = gltf.BuffersList.Count;
- gltf.BuffersList.Add(buffer);
- gltf.buffer = buffer;
- }
- return buffer;
- }
- public GLTFBufferView GetBufferViewScalar(GLTF gltf, GLTFBuffer buffer)
- {
- if (gltf.bufferViewScalar == null)
- {
- gltf.bufferViewScalar = CreateBufferView(gltf, buffer, "bufferViewScalar");
- }
- return gltf.bufferViewScalar;
- }
- public GLTFBufferView GetBufferViewFloatVec2(GLTF gltf, GLTFBuffer buffer)
- {
- if (gltf.bufferViewFloatVec2 == null)
- {
- var bufferView = CreateBufferView(gltf, buffer, "bufferViewFloatVec2");
- bufferView.byteStride = 8;
- gltf.bufferViewFloatVec2 = bufferView;
- }
- return gltf.bufferViewFloatVec2;
- }
- public GLTFBufferView GetBufferViewFloatVec3(GLTF gltf, GLTFBuffer buffer)
- {
- if (gltf.bufferViewFloatVec3 == null)
- {
- var bufferView = CreateBufferView(gltf, buffer, "bufferViewFloatVec3");
- bufferView.byteStride = 12;
- gltf.bufferViewFloatVec3 = bufferView;
- }
- return gltf.bufferViewFloatVec3;
- }
- public GLTFBufferView GetBufferViewFloatVec4(GLTF gltf, GLTFBuffer buffer)
- {
- if (gltf.bufferViewFloatVec4 == null)
- {
- var bufferView = CreateBufferView(gltf, buffer, "bufferViewFloatVec4");
- bufferView.byteStride = 16;
- gltf.bufferViewFloatVec4 = bufferView;
- }
- return gltf.bufferViewFloatVec4;
- }
- public GLTFBufferView GetBufferViewFloatMat4(GLTF gltf, GLTFBuffer buffer)
- {
- if (gltf.bufferViewFloatMat4 == null)
- {
- var bufferView = CreateBufferView(gltf, buffer, "bufferViewFloatMat4");
- gltf.bufferViewFloatMat4 = bufferView;
- }
- return gltf.bufferViewFloatMat4;
- }
- public GLTFBufferView GetBufferViewUnsignedShortVec4(GLTF gltf, GLTFBuffer buffer)
- {
- if (gltf.bufferViewUnsignedShortVec4 == null)
- {
- var bufferView = CreateBufferView(gltf, buffer, "bufferViewUnsignedShortVec4");
- bufferView.byteStride = 8;
- gltf.bufferViewUnsignedShortVec4 = bufferView;
- }
- return gltf.bufferViewUnsignedShortVec4;
- }
- public GLTFBufferView GetBufferViewAnimationFloatScalar(GLTF gltf, GLTFBuffer buffer)
- {
- if (gltf.bufferViewAnimationFloatScalar == null)
- {
- gltf.bufferViewAnimationFloatScalar = CreateBufferView(gltf, buffer, "bufferViewAnimationFloatScalar");
- }
- return gltf.bufferViewAnimationFloatScalar;
- }
- public GLTFBufferView GetBufferViewAnimationFloatVec3(GLTF gltf, GLTFBuffer buffer)
- {
- if (gltf.bufferViewAnimationFloatVec3 == null)
- {
- var bufferView = CreateBufferView(gltf, buffer, "bufferViewAnimationFloatVec3");
- gltf.bufferViewAnimationFloatVec3 = bufferView;
- }
- return gltf.bufferViewAnimationFloatVec3;
- }
- public GLTFBufferView GetBufferViewAnimationFloatVec4(GLTF gltf, GLTFBuffer buffer)
- {
- if (gltf.bufferViewAnimationFloatVec4 == null)
- {
- var bufferView = CreateBufferView(gltf, buffer, "bufferViewAnimationFloatVec4");
- gltf.bufferViewAnimationFloatVec4 = bufferView;
- }
- return gltf.bufferViewAnimationFloatVec4;
- }
- private GLTFBufferView CreateBufferView(GLTF gltf, GLTFBuffer buffer, string name)
- {
- var bufferView = new GLTFBufferView
- {
- name = name,
- buffer = buffer.index,
- Buffer = buffer
- };
- bufferView.index = gltf.BufferViewsList.Count;
- gltf.BufferViewsList.Add(bufferView);
- buffer.BufferViews.Add(bufferView);
- return bufferView;
- }
- public GLTFAccessor CreateAccessor(GLTF gltf, GLTFBufferView bufferView, string name, GLTFAccessor.ComponentType componentType, GLTFAccessor.TypeEnum type)
- {
- var accessor = new GLTFAccessor
- {
- name = name,
- bufferView = bufferView.index,
- BufferView = bufferView,
- componentType = componentType,
- type = type.ToString()
- };
- accessor.index = gltf.AccessorsList.Count;
- gltf.AccessorsList.Add(accessor);
- bufferView.Accessors.Add(accessor);
- return accessor;
- }
- public static void UpdateMinMaxAccessor(GLTFAccessor accessor, float[] values)
- {
- for (int indexComponent = 0; indexComponent < values.Length; indexComponent++)
- {
- UpdateMinMaxAccessor(accessor, values[indexComponent], indexComponent);
- }
- }
- public static void UpdateMinMaxAccessor(GLTFAccessor accessor, float value, int indexComponent = 0)
- {
- if (value < accessor.min[indexComponent])
- {
- accessor.min[indexComponent] = value;
- }
- if (value > accessor.max[indexComponent])
- {
- accessor.max[indexComponent] = value;
- }
- }
- }
- }
|