X operations(XOPS)に非常に近いFPSゲームを制作・リメイクし、成果物をオープンソースとして公開することを目的としたプロジェクトです。
修訂 | 74 (tree) |
---|---|
時間 | 2015-03-25 00:19:47 |
作者 | ![]() |
厚みゼロの板状ブロックに対する判定を改善
@@ -124,9 +124,31 @@ | ||
124 | 124 | //一ヵ所でも頂点が同じなら、板状になっていると判定。 |
125 | 125 | if( (data.x[j] == data.x[k])&&(data.y[j] == data.y[k])&&(data.z[j] == data.z[k]) ){ |
126 | 126 | BoardBlock[i] = true; |
127 | + j = 8; k = 8; //break | |
127 | 128 | } |
128 | 129 | } |
129 | 130 | } |
131 | + | |
132 | + //ブロックの中心を算出 | |
133 | + float mx = 0.0f; | |
134 | + float my = 0.0f; | |
135 | + float mz = 0.0f; | |
136 | + for(int j=0; j<8; j++){ | |
137 | + mx += data.x[j]; | |
138 | + my += data.y[j]; | |
139 | + mz += data.z[j]; | |
140 | + } | |
141 | + mx /= 8; | |
142 | + my /= 8; | |
143 | + mz /= 8; | |
144 | + | |
145 | + //ブロックの中心点に対して1面でも表面ならば、板状になっていると判定。 | |
146 | + for(int j=0; j<6; j++){ | |
147 | + if( CheckPolygonFront(i, j, mx, my, mz) == true ){ | |
148 | + BoardBlock[i] = true; | |
149 | + break; | |
150 | + } | |
151 | + } | |
130 | 152 | } |
131 | 153 | |
132 | 154 |
@@ -230,7 +252,7 @@ | ||
230 | 252 | //内積 |
231 | 253 | d = bdata.material[face].vx*vx + bdata.material[face].vy*vy + bdata.material[face].vz*vz; |
232 | 254 | |
233 | - if( d < 0.0f ){ | |
255 | + if( d <= 0.0f ){ | |
234 | 256 | return true; |
235 | 257 | } |
236 | 258 | return false; |
@@ -260,7 +282,7 @@ | ||
260 | 282 | //内積 |
261 | 283 | d = bdata.material[face].vx*vx + bdata.material[face].vz*vz; |
262 | 284 | |
263 | - if( d < 0.0f ){ | |
285 | + if( d <= 0.0f ){ | |
264 | 286 | return true; |
265 | 287 | } |
266 | 288 | return false; |
@@ -1086,6 +1108,7 @@ | ||
1086 | 1108 | //! @param maxDist 判定を行う最大距離 (0.0fを超える値) |
1087 | 1109 | //! @return 当たっている:true 当たっていない:false |
1088 | 1110 | //! @warning RayPos(始点)と RayDir(ベクトル)を間違えないこと。 |
1111 | +//! @attention Y軸方向へ垂直に立つ円柱です。向きは変えられません。 | |
1089 | 1112 | bool CollideCylinderRay(float c_x, float c_y, float c_z, float c_r, float c_h, float RayPos_x, float RayPos_y, float RayPos_z, float RayDir_x, float RayDir_y, float RayDir_z, float *Dist, float maxDist) |
1090 | 1113 | { |
1091 | 1114 | float x, z, d; |