github.com/archlabjp/eeslism-go@v0.0.0-20231109122333-4bb7bfcdf292/eeslism/DAINYUU.go (about) 1 //This file is part of EESLISM. 2 // 3 //Foobar is free software : you can redistribute itand /or modify 4 //it under the terms of the GNU General Public License as published by 5 //the Free Software Foundation, either version 3 of the License, or 6 //(at your option) any later version. 7 // 8 //Foobar is distributed in the hope that it will be useful, 9 //but WITHOUT ANY WARRANTY; without even the implied warranty of 10 //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 11 //GNU General Public License for more details. 12 // 13 //You should have received a copy of the GNU General Public License 14 //along with Foobar.If not, see < https://www.gnu.org/licenses/>. 15 16 /* 17 18 構造体から別の構造体へ代入 19 FILE=DAINYUU.c 20 Create Date=1999.6.7 21 */ 22 23 package eeslism 24 25 import ( 26 "fmt" 27 "os" 28 ) 29 30 /*---------------------------------------------------------------------*/ 31 func DAINYUU_MP(mp *[]P_MENN, op []P_MENN, opn int, mpn int) { 32 k := 0 33 for i := 0; i < opn; i++ { 34 (*mp)[k].P = make([]XYZ, op[i].polyd) 35 (*mp)[k] = op[i] 36 (*mp)[k].wd = 0 37 (*mp)[k].sbflg = 0 38 (*mp)[k].wlflg = 0 39 (*mp)[k].opname = op[i].opname 40 41 for j := 0; j < op[i].wd; j++ { 42 k++ 43 (*mp)[k].wd = 0 44 (*mp)[k].sbflg = 0 45 (*mp)[k].wlflg = 1 46 (*mp)[k].refg = op[i].refg 47 (*mp)[k].ref = op[i].opw[j].ref 48 (*mp)[k].rgb[0] = op[i].opw[j].rgb[0] 49 (*mp)[k].rgb[1] = op[i].opw[j].rgb[1] 50 (*mp)[k].rgb[2] = op[i].opw[j].rgb[2] 51 (*mp)[k].polyd = op[i].opw[j].polyd 52 (*mp)[k].P = make([]XYZ, op[i].opw[j].polyd) 53 (*mp)[k].grpx = op[i].opw[j].grpx 54 (*mp)[k].wb = op[i].wb 55 (*mp)[k].wa = op[i].wa 56 (*mp)[k].e = op[i].e 57 (*mp)[k].opname = op[i].opw[j].opwname 58 59 for l := 0; l < (*mp)[k].polyd; l++ { 60 (*mp)[k].P[l] = op[i].opw[j].P[l] 61 } 62 } 63 k++ 64 } 65 } 66 67 /*-------------------------------------------------------------------------*/ 68 func DAINYUU_GP(p *XYZ, O XYZ, E XYZ, ls float64, ms float64, ns float64) { 69 var t, u float64 70 71 u = E.X*ls + E.Y*ms + E.Z*ns 72 73 if u != 0.0 { 74 t = (E.X*O.X + E.Y*O.Y + E.Z*O.Z) / u 75 p.X = ls * t 76 p.Y = ms * t 77 p.Z = ns * t 78 } else { 79 fmt.Println("error DAINYUU_GP") 80 os.Exit(1) 81 } 82 } 83 84 /*-----------------------------------------------------------------------*/ 85 func DAINYUU_SMO(opn int, mpn int, op []P_MENN, mp []P_MENN) { 86 k := 0 87 for i := 0; i < opn; i++ { 88 mp[k].sum = op[i].sum 89 for j := 0; j < op[i].wd; j++ { 90 k++ 91 mp[k].sum = op[i].opw[j].sumw 92 } 93 k++ 94 } 95 } 96 97 /*-----------------------------------------------------------------------*/ 98 func DAINYUU_SMO2(opn int, mpn int, op []P_MENN, mp []P_MENN, Sdstr []SHADSTR, dcnt int, tm int) { 99 k := 0 100 101 if dcnt == 1 { 102 // 過去の影で近似しない時間 103 for i := 0; i < opn; i++ { 104 mp[k].sum = op[i].sum 105 Sdstr[k].sdsum[tm] = mp[k].sum 106 for j := 0; j < op[i].wd; j++ { 107 k++ 108 mp[k].sum = op[i].opw[j].sumw 109 Sdstr[k].sdsum[tm] = mp[k].sum 110 } 111 k++ 112 } 113 } else { 114 //過去の影で近似する時間 115 for k = 0; k < mpn; k++ { 116 mp[k].sum = Sdstr[k].sdsum[tm] 117 } 118 } 119 }