|
@@ -8,21 +8,21 @@
|
|
|
|
|
|
|
|
struct IShader {
|
|
struct IShader {
|
|
|
virtual ~IShader() {};
|
|
virtual ~IShader() {};
|
|
|
- virtual Vector3 vertex(Vector3 &vertex, Matrix4 &MVP, float intens=0) = 0;
|
|
|
|
|
|
|
+ virtual Vector3 vertex(Vector3 &vertex, Matrix4 &MVP, float intensity, Vector3 &normals, Vector3 &light, int i) = 0;
|
|
|
virtual bool fragment(Vector3 &bari, Vector3 &color, float &depth, Vector3 &zVerts) = 0;
|
|
virtual bool fragment(Vector3 &bari, Vector3 &color, float &depth, Vector3 &zVerts) = 0;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
struct FlatShader : public IShader {
|
|
struct FlatShader : public IShader {
|
|
|
- float intensity;
|
|
|
|
|
|
|
+ float varIntensity;
|
|
|
Vector3 rgb{255,255,255};
|
|
Vector3 rgb{255,255,255};
|
|
|
|
|
|
|
|
- virtual Vector3 vertex(Vector3 &vertex, Matrix4 &MVP, float intens){
|
|
|
|
|
- intensity = intens;
|
|
|
|
|
|
|
+ Vector3 vertex(Vector3 &vertex, Matrix4 &MVP, float intensity, Vector3 &normals, Vector3 &light, int index) override{
|
|
|
|
|
+ varIntensity = intensity;
|
|
|
return MVP.matMultVec(vertex);
|
|
return MVP.matMultVec(vertex);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- virtual bool fragment(Vector3 &bari, Vector3 &color, float &depth, Vector3 &zVerts){
|
|
|
|
|
- color = rgb*intensity;
|
|
|
|
|
|
|
+ bool fragment(Vector3 &bari, Vector3 &color, float &depth, Vector3 &zVerts) override{
|
|
|
|
|
+ color = rgb*varIntensity;
|
|
|
depth = bari.dotProduct(zVerts);
|
|
depth = bari.dotProduct(zVerts);
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
@@ -33,11 +33,16 @@ struct GouraudShader : public IShader {
|
|
|
Vector3 varying_intensity;
|
|
Vector3 varying_intensity;
|
|
|
Vector3 rgb{255,255,255};
|
|
Vector3 rgb{255,255,255};
|
|
|
|
|
|
|
|
- virtual Vector3 vertex(Vector3 &vertex, Matrix4 &MVP,float intens =0){
|
|
|
|
|
|
|
+ Vector3 vertex(Vector3 &vertex, Matrix4 &MVP,float intensity, Vector3 &normals, Vector3 &light, int index) override{
|
|
|
|
|
+ //normals.print();
|
|
|
|
|
+ varying_intensity.data[index] = std::max(0.0f, normals.dotProduct(light));
|
|
|
return MVP.matMultVec(vertex);
|
|
return MVP.matMultVec(vertex);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- virtual bool fragment(Vector3 &bari, Vector3 &color, float &depth, Vector3 &zVerts){
|
|
|
|
|
|
|
+ bool fragment(Vector3 &bari, Vector3 &color, float &depth, Vector3 &zVerts) override{
|
|
|
|
|
+ //varying_intensity.print();
|
|
|
|
|
+ float intensity = varying_intensity.dotProduct(bari);
|
|
|
|
|
+ color = rgb * intensity;
|
|
|
depth = bari.dotProduct(zVerts);
|
|
depth = bari.dotProduct(zVerts);
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|