Module: Rgltf::Builder::Materials
- Included in:
- Rgltf::Builder
- Defined in:
- lib/rgltf/builder/materials.rb
Defined Under Namespace
Classes: TextureInfoValue
Instance Method Summary collapse
- #image(bytes: nil, uri: nil, buffer_view: nil, mime_type: nil, name: nil, extensions: nil, extras: nil) ⇒ Object
- #material(name: nil, base_color_factor: nil, base_color_texture: nil, metallic_factor: nil, roughness_factor: nil, metallic_roughness_texture: nil, normal_texture: nil, occlusion_texture: nil, emissive_texture: nil, emissive_factor: nil, alpha_mode: nil, alpha_cutoff: nil, double_sided: nil, pbr_extensions: nil, pbr_extras: nil, extensions: nil, extras: nil, **properties) ⇒ Object
- #normal_texture_info(texture, tex_coord: nil, scale: nil, extensions: nil, extras: nil) ⇒ Object
- #occlusion_texture_info(texture, tex_coord: nil, strength: nil, extensions: nil, extras: nil) ⇒ Object
- #sampler(mag_filter: nil, min_filter: nil, wrap_s: nil, wrap_t: nil, name: nil, extensions: nil, extras: nil) ⇒ Object
- #texture(image: nil, source: nil, mime_type: nil, sampler: nil, name: nil, extensions: nil, extras: nil) ⇒ Object
- #texture_info(texture, tex_coord: nil, extensions: nil, extras: nil) ⇒ Object
Instance Method Details
#image(bytes: nil, uri: nil, buffer_view: nil, mime_type: nil, name: nil, extensions: nil, extras: nil) ⇒ Object
8 9 10 11 12 13 14 15 |
# File 'lib/rgltf/builder/materials.rb', line 8 def image(bytes: nil, uri: nil, buffer_view: nil, mime_type: nil, name: nil, extensions: nil, extras: nil) sources = [bytes, uri, buffer_view].count { |source| !source.nil? } raise ArgumentError, 'provide exactly one of image bytes, uri, or buffer_view' unless sources == 1 value = image_properties(bytes:, uri:, buffer_view:, mime_type:) add_common_properties(value, name:, extensions:, extras:) handle(:image, append('images', value)) end |
#material(name: nil, base_color_factor: nil, base_color_texture: nil, metallic_factor: nil, roughness_factor: nil, metallic_roughness_texture: nil, normal_texture: nil, occlusion_texture: nil, emissive_texture: nil, emissive_factor: nil, alpha_mode: nil, alpha_cutoff: nil, double_sided: nil, pbr_extensions: nil, pbr_extras: nil, extensions: nil, extras: nil, **properties) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/rgltf/builder/materials.rb', line 36 def material(name: nil, base_color_factor: nil, base_color_texture: nil, metallic_factor: nil, roughness_factor: nil, metallic_roughness_texture: nil, normal_texture: nil, occlusion_texture: nil, emissive_texture: nil, emissive_factor: nil, alpha_mode: nil, alpha_cutoff: nil, double_sided: nil, pbr_extensions: nil, pbr_extras: nil, extensions: nil, extras: nil, **properties) pbr = {} pbr['baseColorFactor'] = base_color_factor if base_color_factor pbr['baseColorTexture'] = texture_info_json(base_color_texture) if base_color_texture pbr['metallicFactor'] = unless .nil? pbr['roughnessFactor'] = roughness_factor unless roughness_factor.nil? pbr['metallicRoughnessTexture'] = texture_info_json() if pbr['extensions'] = pbr_extensions if pbr_extensions pbr['extras'] = pbr_extras unless pbr_extras.nil? value = {} add_common_properties(value, name:, extensions:, extras:) value['pbrMetallicRoughness'] = pbr unless pbr.empty? value['normalTexture'] = texture_info_json(normal_texture) if normal_texture value['occlusionTexture'] = texture_info_json(occlusion_texture) if occlusion_texture value['emissiveTexture'] = texture_info_json(emissive_texture) if emissive_texture value['emissiveFactor'] = emissive_factor if emissive_factor value['alphaMode'] = alpha_mode.to_s.upcase if alpha_mode value['alphaCutoff'] = alpha_cutoff unless alpha_cutoff.nil? value['doubleSided'] = double_sided unless double_sided.nil? value.merge!(stringify_properties(properties)) handle(:material, append('materials', value)) end |
#normal_texture_info(texture, tex_coord: nil, scale: nil, extensions: nil, extras: nil) ⇒ Object
68 69 70 |
# File 'lib/rgltf/builder/materials.rb', line 68 def normal_texture_info(texture, tex_coord: nil, scale: nil, extensions: nil, extras: nil) build_texture_info(texture, tex_coord:, scale:, extensions:, extras:) end |
#occlusion_texture_info(texture, tex_coord: nil, strength: nil, extensions: nil, extras: nil) ⇒ Object
72 73 74 |
# File 'lib/rgltf/builder/materials.rb', line 72 def occlusion_texture_info(texture, tex_coord: nil, strength: nil, extensions: nil, extras: nil) build_texture_info(texture, tex_coord:, strength:, extensions:, extras:) end |
#sampler(mag_filter: nil, min_filter: nil, wrap_s: nil, wrap_t: nil, name: nil, extensions: nil, extras: nil) ⇒ Object
17 18 19 20 21 22 |
# File 'lib/rgltf/builder/materials.rb', line 17 def sampler(mag_filter: nil, min_filter: nil, wrap_s: nil, wrap_t: nil, name: nil, extensions: nil, extras: nil) value = sampler_properties(mag_filter:, min_filter:, wrap_s:, wrap_t:) add_common_properties(value, name:, extensions:, extras:) handle(:sampler, append('samplers', value)) end |
#texture(image: nil, source: nil, mime_type: nil, sampler: nil, name: nil, extensions: nil, extras: nil) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/rgltf/builder/materials.rb', line 24 def texture(image: nil, source: nil, mime_type: nil, sampler: nil, name: nil, extensions: nil, extras: nil) image ||= source raise ArgumentError, 'texture requires an image or source' unless image image_handle = image.is_a?(Handle) ? verify_handle(image, :image) : self.image(bytes: image, mime_type:, name:) texture_json = { 'source' => image_handle.index } texture_json['sampler'] = build_sampler(sampler) if sampler add_common_properties(texture_json, name:, extensions:, extras:) handle(:texture, append('textures', texture_json)) end |
#texture_info(texture, tex_coord: nil, extensions: nil, extras: nil) ⇒ Object
64 65 66 |
# File 'lib/rgltf/builder/materials.rb', line 64 def texture_info(texture, tex_coord: nil, extensions: nil, extras: nil) build_texture_info(texture, tex_coord:, extensions:, extras:) end |