Module: Rgltf::Builder::Materials

Included in:
Rgltf::Builder
Defined in:
lib/rgltf/builder/materials.rb

Defined Under Namespace

Classes: TextureInfoValue

Instance Method Summary collapse

Instance Method Details

#image(bytes: nil, uri: nil, buffer_view: nil, mime_type: nil, name: nil, extensions: nil, extras: nil) ⇒ Object

Raises:

  • (ArgumentError)


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'] = metallic_factor unless metallic_factor.nil?
  pbr['roughnessFactor'] = roughness_factor unless roughness_factor.nil?
  pbr['metallicRoughnessTexture'] = texture_info_json(metallic_roughness_texture) if metallic_roughness_texture
  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

Raises:

  • (ArgumentError)


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