|
|
@@ -9,15 +9,12 @@ import (
|
|
|
"github.com/g3n/engine/math32"
|
|
|
)
|
|
|
|
|
|
+// Standard material supports the classic lighting model with
|
|
|
+// ambient, diffuse, specular and emissive lights.
|
|
|
+// The lighting calculation is implemented in the vertex shader.
|
|
|
type Standard struct {
|
|
|
Material // Embedded material
|
|
|
uni *gls.Uniform3fv // Uniform array of 3 floats with material properties
|
|
|
- //ambient *gls.Uniform3f // Ambient color uniform
|
|
|
- //diffuse *gls.Uniform3f // Diffuse color uniform
|
|
|
- //specular *gls.Uniform3f // Specular color uniform
|
|
|
- //emissive *gls.Uniform3f // Emissive color uniform
|
|
|
- //shininess *gls.Uniform1f // Shininess exponent uniform
|
|
|
- //opacity *gls.Uniform1f // Opacity (alpha)uniform
|
|
|
}
|
|
|
|
|
|
const (
|
|
|
@@ -26,8 +23,10 @@ const (
|
|
|
vSpecular = 2 // index for Specular color in uniform array
|
|
|
vEmissive = 3 // index for Emissive color in uniform array
|
|
|
pShininess = vEmissive * 4 // position for material shininess in uniform array
|
|
|
- pOpacity = pShininess + 1 // position for material opacitiy in uniform array
|
|
|
- uniSize = 5 // total count of groups 3 floats in uniform
|
|
|
+ pOpacity = pShininess + 1 // position for material opacity in uniform array
|
|
|
+ pSize = pOpacity + 1 // position for material point size
|
|
|
+ pRotationZ = pSize + 1 // position for material point rotation
|
|
|
+ uniSize = 6 // total count of groups 3 floats in uniform
|
|
|
)
|
|
|
|
|
|
// NewStandard creates and returns a pointer to a new standard material
|
|
|
@@ -38,34 +37,21 @@ func NewStandard(color *math32.Color) *Standard {
|
|
|
return ms
|
|
|
}
|
|
|
|
|
|
+// Init initializes the material setting the specified shader and color
|
|
|
+// It is used mainly when the material is embedded in another type
|
|
|
func (ms *Standard) Init(shader string, color *math32.Color) {
|
|
|
|
|
|
ms.Material.Init()
|
|
|
ms.SetShader(shader)
|
|
|
|
|
|
- // Creates uniforms and adds to material
|
|
|
+ // Creates uniforms and set initial values
|
|
|
ms.uni = gls.NewUniform3fv("Material", uniSize)
|
|
|
- //ms.emissive = gls.NewUniform3f("MatEmissiveColor")
|
|
|
- //ms.ambient = gls.NewUniform3f("MatAmbientColor")
|
|
|
- //ms.diffuse = gls.NewUniform3f("MatDiffuseColor")
|
|
|
- //ms.specular = gls.NewUniform3f("MatSpecularColor")
|
|
|
- //ms.shininess = gls.NewUniform1f("MatShininess")
|
|
|
- //ms.opacity = gls.NewUniform1f("MatOpacity")
|
|
|
-
|
|
|
- // Set initial values
|
|
|
ms.uni.SetColor(vAmbient, color)
|
|
|
ms.uni.SetColor(vDiffuse, color)
|
|
|
ms.uni.Set(vSpecular, 0.5, 0.5, 0.5)
|
|
|
ms.uni.Set(vEmissive, 0, 0, 0)
|
|
|
ms.uni.SetPos(pShininess, 30.0)
|
|
|
ms.uni.SetPos(pOpacity, 1.0)
|
|
|
-
|
|
|
- //ms.ambient.SetColor(color)
|
|
|
- //ms.diffuse.SetColor(color)
|
|
|
- //ms.emissive.Set(0, 0, 0)
|
|
|
- //ms.specular.Set(0.5, 0.5, 0.5)
|
|
|
- //ms.shininess.Set(30.0)
|
|
|
- //ms.opacity.Set(1.0)
|
|
|
}
|
|
|
|
|
|
// AmbientColor returns the material ambient color reflectivity.
|
|
|
@@ -87,8 +73,6 @@ func (ms *Standard) SetColor(color *math32.Color) {
|
|
|
|
|
|
ms.uni.SetColor(vDiffuse, color)
|
|
|
ms.uni.SetColor(vAmbient, color)
|
|
|
- // ms.diffuse.SetColor(color)
|
|
|
- // ms.ambient.SetColor(color)
|
|
|
}
|
|
|
|
|
|
// SetEmissiveColor sets the material emissive color
|
|
|
@@ -96,14 +80,12 @@ func (ms *Standard) SetColor(color *math32.Color) {
|
|
|
func (ms *Standard) SetEmissiveColor(color *math32.Color) {
|
|
|
|
|
|
ms.uni.SetColor(vEmissive, color)
|
|
|
- // ms.emissive.SetColor(color)
|
|
|
}
|
|
|
|
|
|
// EmissiveColor returns the material current emissive color
|
|
|
func (ms *Standard) EmissiveColor() math32.Color {
|
|
|
|
|
|
return ms.uni.GetColor(vEmissive)
|
|
|
- //return ms.emissive.GetColor()
|
|
|
}
|
|
|
|
|
|
// SetSpecularColor sets the material specular color reflectivity.
|
|
|
@@ -111,13 +93,11 @@ func (ms *Standard) EmissiveColor() math32.Color {
|
|
|
func (ms *Standard) SetSpecularColor(color *math32.Color) {
|
|
|
|
|
|
ms.uni.SetColor(vSpecular, color)
|
|
|
- //ms.specular.SetColor(color)
|
|
|
}
|
|
|
|
|
|
// SetShininess sets the specular highlight factor. Default is 30.
|
|
|
func (ms *Standard) SetShininess(shininess float32) {
|
|
|
|
|
|
- //ms.shininess.Set(shininess)
|
|
|
ms.uni.SetPos(pShininess, shininess)
|
|
|
}
|
|
|
|
|
|
@@ -125,17 +105,12 @@ func (ms *Standard) SetShininess(shininess float32) {
|
|
|
func (ms *Standard) SetOpacity(opacity float32) {
|
|
|
|
|
|
ms.uni.SetPos(pOpacity, opacity)
|
|
|
- //ms.opacity.Set(opacity)
|
|
|
}
|
|
|
|
|
|
+// RenderSetup is called by the engine before drawing the object
|
|
|
+// which uses this material
|
|
|
func (ms *Standard) RenderSetup(gs *gls.GLS) {
|
|
|
|
|
|
ms.Material.RenderSetup(gs)
|
|
|
ms.uni.Transfer(gs)
|
|
|
- //ms.emissive.Transfer(gs)
|
|
|
- //ms.ambient.Transfer(gs)
|
|
|
- //ms.diffuse.Transfer(gs)
|
|
|
- //ms.specular.Transfer(gs)
|
|
|
- //ms.shininess.Transfer(gs)
|
|
|
- //ms.opacity.Transfer(gs)
|
|
|
}
|