Kaynağa Gözat

Add glTF extensions (fix)

Daniel Salvadori 6 yıl önce
ebeveyn
işleme
12e5177914
1 değiştirilmiş dosya ile 0 ekleme ve 163 silme
  1. 0 163
      loader/gltf/material_common.go

+ 0 - 163
loader/gltf/material_common.go

@@ -1,163 +0,0 @@
-package gltf
-
-import (
-	"github.com/g3n/engine/material"
-	"github.com/g3n/engine/math32"
-	"github.com/g3n/engine/texture"
-)
-
-// loadMaterialCommon receives an interface value describing a KHR_materials_common extension,
-// decodes it and returns a Material closest to the specified description
-// The specification of this extension is at:
-// https://github.com/KhronosGroup/glTF/tree/master/extensions/Khronos/KHR_materials_common
-func (g *GLTF) loadMaterialCommon(ext interface{}) (material.IMaterial, error) {
-
-	// The extension must be an object
-	m := ext.(map[string]interface{})
-
-	// Double sided
-	doubleSided := false
-	val, ok := m["doubleSided"]
-	if ok {
-		doubleSided = val.(bool)
-	}
-
-	// Technique
-	technique := ""
-	val, ok = m["technique"]
-	if ok {
-		technique = val.(string)
-	}
-
-	// Transparent
-	transparent := false
-	val, ok = m["transparent"]
-	if ok {
-		transparent = val.(bool)
-	}
-
-	// Defaul values
-	ambient := []float32{0, 0, 0, 1}
-	diffuse := []float32{0, 0, 0, 1}
-	emission := []float32{0, 0, 0, 1}
-	specular := []float32{0, 0, 0, 1}
-	shininess := float32(0)
-	transparency := float32(1)
-	var texDiffuse *texture.Texture2D
-
-	// Converts a slice of interface values which should be float64
-	// to a slice of float32
-	convIF32 := func(v interface{}) []float32 {
-
-		si := v.([]interface{})
-		res := make([]float32, 0)
-		for i := 0; i < len(si); i++ {
-			res = append(res, float32(si[i].(float64)))
-		}
-		return res
-	}
-
-	// Values
-	values, ok := m["values"].(map[string]interface{})
-	if ok {
-
-		// Ambient light
-		val, ok = values["ambient"]
-		if ok {
-			ambient = convIF32(val)
-		}
-
-		// Diffuse light
-		val, ok = values["diffuse"]
-		if ok {
-			v := convIF32(val)
-			// Checks for texture index
-			if len(v) == 1 {
-				var err error
-				texDiffuse, err = g.LoadTexture(int(v[0]))
-				if err != nil {
-					return nil, err
-				}
-				diffuse = []float32{1, 1, 1, 1}
-			}
-		}
-
-		// Emission light
-		val, ok = values["emission"]
-		if ok {
-			emission = convIF32(val)
-		}
-
-		// Specular light
-		val, ok = values["specular"]
-		if ok {
-			specular = convIF32(val)
-		}
-
-		// Shininess
-		val, ok = values["shininess"]
-		if ok {
-			s := convIF32(val)
-			shininess = s[0]
-		}
-
-		// Transparency
-		val, ok = values["transparency"]
-		if ok {
-			s := convIF32(val)
-			transparency = s[0]
-		}
-	}
-
-	//log.Error("doubleSided:%v", doubleSided)
-	//log.Error("technique:%v", technique)
-	//log.Error("transparent:%v", transparent)
-	//log.Error("values:%v", values)
-	//log.Error("ambient:%v", ambient)
-	//log.Error("diffuse:%v", diffuse)
-	//log.Error("emission:%v", emission)
-	//log.Error("specular:%v", specular)
-	//log.Error("shininess:%v", shininess)
-	//log.Error("transparency:%v", transparency)
-
-	var imat material.IMaterial
-	if technique == "PHONG" {
-		pm := material.NewPhong(&math32.Color{diffuse[0], diffuse[1], diffuse[2]})
-		pm.SetAmbientColor(&math32.Color{ambient[0], ambient[1], ambient[2]})
-		pm.SetEmissiveColor(&math32.Color{emission[0], emission[1], emission[2]})
-		pm.SetSpecularColor(&math32.Color{specular[0], specular[1], specular[2]})
-		pm.SetShininess(shininess)
-		pm.SetOpacity(transparency)
-		if texDiffuse != nil {
-			pm.AddTexture(texDiffuse)
-		}
-		imat = pm
-	} else {
-		sm := material.NewStandard(&math32.Color{diffuse[0], diffuse[1], diffuse[2]})
-		sm.SetAmbientColor(&math32.Color{ambient[0], ambient[1], ambient[2]})
-		sm.SetEmissiveColor(&math32.Color{emission[0], emission[1], emission[2]})
-		sm.SetSpecularColor(&math32.Color{specular[0], specular[1], specular[2]})
-		sm.SetShininess(shininess)
-		sm.SetOpacity(transparency)
-		if texDiffuse != nil {
-			sm.AddTexture(texDiffuse)
-		}
-		imat = sm
-	}
-
-	// Double Sided
-	mat := imat.GetMaterial()
-	if doubleSided {
-		mat.SetSide(material.SideDouble)
-	} else {
-		mat.SetSide(material.SideFront)
-	}
-
-	// Transparency
-	if transparent {
-		mat.SetDepthMask(true)
-	} else {
-		mat.SetDepthMask(false)
-	}
-	return imat, nil
-}