/** * Create a {@link DefaultAccessorModel} for the given {@link Accessor} * * @param accessor The {@link Accessor} * @return The {@link AccessorModel} */ private static DefaultAccessorModel createAccessorModel(Accessor accessor) { Integer componentType = accessor.getComponentType(); Integer byteOffset = accessor.getByteOffset(); Integer count = accessor.getCount(); ElementType elementType = ElementType.forString(accessor.getType()); Integer byteStride = accessor.getByteStride(); if (byteStride == null) { byteStride = elementType.getNumComponents() * Accessors.getNumBytesForAccessorComponentType( componentType); } DefaultAccessorModel accessorModel = new DefaultAccessorModel( componentType, count, elementType); accessorModel.setByteOffset(byteOffset); accessorModel.setByteStride(byteStride); return accessorModel; }
/** * Create the {@link Accessor} object from the given * {@link AccessorModel} * * @param accessorModel The {@link AccessorModel} * @param bufferViewId The {@link BufferView} ID * @return The {@link Accessor} object */ private static Accessor createAccessor( AccessorModel accessorModel, String bufferViewId) { Accessor accessor = new Accessor(); accessor.setBufferView(bufferViewId); accessor.setByteOffset(accessorModel.getByteOffset()); accessor.setComponentType(accessorModel.getComponentType()); accessor.setCount(accessorModel.getCount()); accessor.setType(accessorModel.getElementType().toString()); accessor.setByteStride(accessorModel.getByteStride()); AccessorData accessorData = accessorModel.getAccessorData(); accessor.setMax(AccessorDatas.computeMax(accessorData)); accessor.setMin(AccessorDatas.computeMin(accessorData)); return accessor; }
String bufferViewId = accessor.getBufferView(); validatorResult.add(validateMapEntry( getGltf().getBufferViews(), bufferViewId, context)); Integer componentType = accessor.getComponentType(); if (componentType == null) GltfConstants.stringFor(accessor.getComponentType()); int componentSizeInBytes = Accessors.getNumBytesForAccessorComponentType(componentType); int numComponents = Accessors.getNumComponentsForAccessorType(accessor.getType()); int elementSizeInBytes = numComponents * componentSizeInBytes; int accessorByteOffset = accessor.getByteOffset(); int totalByteOffset = bufferView.getByteOffset() + accessorByteOffset; "The byteOffset is " + accessorByteOffset + ", but must be aligned to the size of the elements (" + accessor.getType() + " with " + componentTypeName + "), " + "which is "+elementSizeInBytes, context); bufferView.getBuffer() + " is " + totalByteOffset + ", but must be aligned to the size of the elements (" + accessor.getType() + " with " + componentTypeName + "), " + "which is "+elementSizeInBytes, context);
/** * Initialize the {@link AccessorModel} instances */ private void initAccessorModels() { Map<String, Accessor> accessors = Optionals.of(gltf.getAccessors()); for (Entry<String, Accessor> entry : accessors.entrySet()) { String accessorId = entry.getKey(); Accessor accessor = entry.getValue(); String bufferViewId = accessor.getBufferView(); BufferViewModel bufferViewModel = get("bufferViews", bufferViewId, bufferViewModels); DefaultAccessorModel accessorModel = get("accessors", accessorId, accessorModels); accessorModel.setName(accessor.getName()); accessorModel.setBufferViewModel(bufferViewModel); } }