MCPcopy
hub / github.com/g3n/engine / NewMesh

Method NewMesh

loader/obj/obj.go:234–309  ·  view source on GitHub ↗

NewMesh creates and returns a mesh from an specified decoded object.

(obj *Object)

Source from the content-addressed store, hash-verified

232
233// NewMesh creates and returns a mesh from an specified decoded object.
234func (dec *Decoder) NewMesh(obj *Object) (*graphic.Mesh, error) {
235
236 // Creates object geometry
237 geom, err := dec.NewGeometry(obj)
238 if err != nil {
239 return nil, err
240 }
241
242 // Single material
243 if geom.GroupCount() == 1 {
244 // get Material info from mtl file and ensure it's valid.
245 // substitute default material if it is not.
246 var matDesc *Material
247 var matName string
248 if len(obj.materials) > 0 {
249 matName = obj.materials[0]
250 }
251 matDesc = dec.Materials[matName]
252 if matDesc == nil {
253 matDesc = defaultMat
254 // log warning
255 msg := fmt.Sprintf("could not find material for %s. using default material.", obj.Name)
256 dec.appendWarn(objType, msg)
257 }
258
259 // Creates material for mesh
260 mat := material.NewStandard(&matDesc.Diffuse)
261 ambientColor := mat.AmbientColor()
262 mat.SetAmbientColor(ambientColor.Multiply(&matDesc.Ambient))
263 mat.SetSpecularColor(&matDesc.Specular)
264 mat.SetShininess(matDesc.Shininess)
265 // Loads material textures if specified
266 err = dec.loadTex(&mat.Material, matDesc)
267 if err != nil {
268 return nil, err
269 }
270
271 return graphic.NewMesh(geom, mat), nil
272 }
273
274 // Multi material
275 mesh := graphic.NewMesh(geom, nil)
276 for idx := 0; idx < geom.GroupCount(); idx++ {
277 group := geom.GroupAt(idx)
278
279 // get Material info from mtl file and ensure it's valid.
280 // substitute default material if it is not.
281 var matDesc *Material
282 var matName string
283 if len(obj.materials) > group.Matindex {
284 matName = obj.materials[group.Matindex]
285 }
286 matDesc = dec.Materials[matName]
287 if matDesc == nil {
288 matDesc = defaultMat
289 // log warning
290 msg := fmt.Sprintf("could not find material for %s. using default material.", obj.Name)
291 dec.appendWarn(objType, msg)

Callers 1

NewGroupMethod · 0.95

Calls 13

NewGeometryMethod · 0.95
GroupCountMethod · 0.95
appendWarnMethod · 0.95
AmbientColorMethod · 0.95
SetAmbientColorMethod · 0.95
SetSpecularColorMethod · 0.95
SetShininessMethod · 0.95
loadTexMethod · 0.95
GroupAtMethod · 0.95
AddGroupMaterialMethod · 0.95
NewStandardFunction · 0.92
NewMeshFunction · 0.92

Tested by

no test coverage detected