mirror of
https://github.com/sampletext32/ParkanPlayground.git
synced 2025-12-12 09:51:21 +04:00
Material parsing and viewing
This commit is contained in:
82
MaterialLib/Interpolate.c
Normal file
82
MaterialLib/Interpolate.c
Normal file
@@ -0,0 +1,82 @@
|
||||
|
||||
void __cdecl
|
||||
Interpolate(MaterialExternal *src1_ptr,MaterialExternal *src2_ptr,float progress,
|
||||
MaterialExternal *dst_ptr,uint targetFlags)
|
||||
|
||||
{
|
||||
if ((targetFlags & 2) == 0) {
|
||||
(dst_ptr->stage).diffuse.R = (src1_ptr->stage).diffuse.R;
|
||||
(dst_ptr->stage).diffuse.G = (src1_ptr->stage).diffuse.G;
|
||||
(dst_ptr->stage).diffuse.B = (src1_ptr->stage).diffuse.B;
|
||||
}
|
||||
else {
|
||||
(dst_ptr->stage).diffuse.R =
|
||||
((src2_ptr->stage).diffuse.R - (src1_ptr->stage).diffuse.R) * progress +
|
||||
(src1_ptr->stage).diffuse.R;
|
||||
(dst_ptr->stage).diffuse.G =
|
||||
((src2_ptr->stage).diffuse.G - (src1_ptr->stage).diffuse.G) * progress +
|
||||
(src1_ptr->stage).diffuse.G;
|
||||
(dst_ptr->stage).diffuse.B =
|
||||
((src2_ptr->stage).diffuse.B - (src1_ptr->stage).diffuse.B) * progress +
|
||||
(src1_ptr->stage).diffuse.B;
|
||||
}
|
||||
if ((targetFlags & 1) == 0) {
|
||||
(dst_ptr->stage).ambient.R = (src1_ptr->stage).ambient.R;
|
||||
(dst_ptr->stage).ambient.G = (src1_ptr->stage).ambient.G;
|
||||
(dst_ptr->stage).ambient.B = (src1_ptr->stage).ambient.B;
|
||||
}
|
||||
else {
|
||||
(dst_ptr->stage).ambient.R =
|
||||
((src2_ptr->stage).ambient.R - (src1_ptr->stage).ambient.R) * progress +
|
||||
(src1_ptr->stage).ambient.R;
|
||||
(dst_ptr->stage).ambient.G =
|
||||
((src2_ptr->stage).ambient.G - (src1_ptr->stage).ambient.G) * progress +
|
||||
(src1_ptr->stage).ambient.G;
|
||||
(dst_ptr->stage).ambient.B =
|
||||
((src2_ptr->stage).ambient.B - (src1_ptr->stage).ambient.B) * progress +
|
||||
(src1_ptr->stage).ambient.B;
|
||||
}
|
||||
if ((targetFlags & 4) == 0) {
|
||||
(dst_ptr->stage).specular.R = (src1_ptr->stage).specular.R;
|
||||
(dst_ptr->stage).specular.G = (src1_ptr->stage).specular.G;
|
||||
(dst_ptr->stage).specular.B = (src1_ptr->stage).specular.B;
|
||||
}
|
||||
else {
|
||||
(dst_ptr->stage).specular.R =
|
||||
((src2_ptr->stage).specular.R - (src1_ptr->stage).specular.R) * progress +
|
||||
(src1_ptr->stage).specular.R;
|
||||
(dst_ptr->stage).specular.G =
|
||||
((src2_ptr->stage).specular.G - (src1_ptr->stage).specular.G) * progress +
|
||||
(src1_ptr->stage).specular.G;
|
||||
(dst_ptr->stage).specular.B =
|
||||
((src2_ptr->stage).specular.B - (src1_ptr->stage).specular.B) * progress +
|
||||
(src1_ptr->stage).specular.B;
|
||||
}
|
||||
if ((targetFlags & 8) == 0) {
|
||||
(dst_ptr->stage).emissive.R = (src1_ptr->stage).emissive.R;
|
||||
(dst_ptr->stage).emissive.G = (src1_ptr->stage).emissive.G;
|
||||
(dst_ptr->stage).emissive.B = (src1_ptr->stage).emissive.B;
|
||||
}
|
||||
else {
|
||||
(dst_ptr->stage).emissive.R =
|
||||
((src2_ptr->stage).emissive.R - (src1_ptr->stage).emissive.R) * progress +
|
||||
(src1_ptr->stage).emissive.R;
|
||||
(dst_ptr->stage).emissive.G =
|
||||
((src2_ptr->stage).emissive.G - (src1_ptr->stage).emissive.G) * progress +
|
||||
(src1_ptr->stage).emissive.G;
|
||||
(dst_ptr->stage).emissive.B =
|
||||
((src2_ptr->stage).emissive.B - (src1_ptr->stage).emissive.B) * progress +
|
||||
(src1_ptr->stage).emissive.B;
|
||||
}
|
||||
if ((targetFlags & 0x10) != 0) {
|
||||
(dst_ptr->stage).ambient.A =
|
||||
((src2_ptr->stage).ambient.A - (src1_ptr->stage).ambient.A) * progress +
|
||||
(src1_ptr->stage).ambient.A;
|
||||
(dst_ptr->stage).Power = (src1_ptr->stage).Power;
|
||||
return;
|
||||
}
|
||||
(dst_ptr->stage).ambient.A = (src1_ptr->stage).ambient.A;
|
||||
(dst_ptr->stage).Power = (src1_ptr->stage).Power;
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user