X operations(XOPS)に非常に近いFPSゲームを制作・リメイクし、成果物をオープンソースとして公開することを目的としたプロジェクトです。
| Revision | 169 (tree) |
|---|---|
| Time | 2017-03-21 00:08:53 |
| Author | |
ブロックの繋ぎ目から落ちる場合がある問題の暫定対策(R142のバグ) 例:WAREHOUSE_DEF
| @@ -253,10 +253,10 @@ | ||
| 253 | 253 | |
| 254 | 254 | blockdata->Getdata(&bdata, id); |
| 255 | 255 | |
| 256 | - //面の中心を基準点に、座標のベクトルを求める ※正確な中心点を使うこと | |
| 257 | - vx = bdata.material[face].center_x - x; | |
| 258 | - vy = bdata.material[face].center_y - y; | |
| 259 | - vz = bdata.material[face].center_z - z; | |
| 256 | + //面の中心を基準点に、座標のベクトルを求める | |
| 257 | + vx = cbdata[id].polygon_center_x[face] - x; | |
| 258 | + vy = cbdata[id].polygon_center_y[face] - y; | |
| 259 | + vz = cbdata[id].polygon_center_z[face] - z; | |
| 260 | 260 | |
| 261 | 261 | //内積 |
| 262 | 262 | d = bdata.material[face].vx*vx + bdata.material[face].vy*vy + bdata.material[face].vz*vz; |
| @@ -330,10 +330,10 @@ | ||
| 330 | 330 | return false; //面とレイが平行か、面に対してレイが逆向き |
| 331 | 331 | } |
| 332 | 332 | |
| 333 | - //面の中心を基準点に、座標のベクトルを求める ※正確な中心点を使うこと | |
| 334 | - vx1 = RayPos_x - data.material[face].center_x; | |
| 335 | - vy1 = RayPos_y - data.material[face].center_y; | |
| 336 | - vz1 = RayPos_z - data.material[face].center_z; | |
| 333 | + //面の中心を基準点に、座標のベクトルを求める | |
| 334 | + vx1 = RayPos_x - cbdata[blockid].polygon_center_x[face]; | |
| 335 | + vy1 = RayPos_y - cbdata[blockid].polygon_center_y[face]; | |
| 336 | + vz1 = RayPos_z - cbdata[blockid].polygon_center_z[face]; | |
| 337 | 337 | |
| 338 | 338 | //内積 |
| 339 | 339 | d2 = data.material[face].vx*vx1 + data.material[face].vy*vy1 + data.material[face].vz*vz1; //面までの最短距離が求まる |
| @@ -355,9 +355,9 @@ | ||
| 355 | 355 | // 面を形成する各4辺との位置関係を算出し、面の法線と比較する。 |
| 356 | 356 | |
| 357 | 357 | //外積 |
| 358 | - vx2 = ((data.y[ vID[1] ] - data.y[ vID[0] ]) * (z - data.z[ vID[0] ])) - ((y - data.y[ vID[0] ]) * (data.z[ vID[1] ] - data.z[ vID[0] ])); | |
| 359 | - vy2 = ((data.z[ vID[1] ] - data.z[ vID[0] ]) * (x - data.x[ vID[0] ])) - ((z - data.z[ vID[0] ]) * (data.x[ vID[1] ] - data.x[ vID[0] ])); | |
| 360 | - vz2 = ((data.x[ vID[1] ] - data.x[ vID[0] ]) * (y - data.y[ vID[0] ])) - ((x - data.x[ vID[0] ]) * (data.y[ vID[1] ] - data.y[ vID[0] ])); | |
| 358 | + vx2 = ((cbdata[blockid].y[ vID[1] ] - cbdata[blockid].y[ vID[0] ]) * (z - cbdata[blockid].z[ vID[0] ])) - ((y - cbdata[blockid].y[ vID[0] ]) * (cbdata[blockid].z[ vID[1] ] - cbdata[blockid].z[ vID[0] ])); | |
| 359 | + vy2 = ((cbdata[blockid].z[ vID[1] ] - cbdata[blockid].z[ vID[0] ]) * (x - cbdata[blockid].x[ vID[0] ])) - ((z - cbdata[blockid].z[ vID[0] ]) * (cbdata[blockid].x[ vID[1] ] - cbdata[blockid].x[ vID[0] ])); | |
| 360 | + vz2 = ((cbdata[blockid].x[ vID[1] ] - cbdata[blockid].x[ vID[0] ]) * (y - cbdata[blockid].y[ vID[0] ])) - ((x - cbdata[blockid].x[ vID[0] ]) * (cbdata[blockid].y[ vID[1] ] - cbdata[blockid].y[ vID[0] ])); | |
| 361 | 361 | |
| 362 | 362 | //内積 |
| 363 | 363 | d1 = data.material[face].vx*vx2 + data.material[face].vy*vy2 + data.material[face].vz*vz2; //ブロック面の法線との関係を算出 |
| @@ -368,9 +368,9 @@ | ||
| 368 | 368 | |
| 369 | 369 | |
| 370 | 370 | //外積 |
| 371 | - vx2 = ((data.y[ vID[2] ] - data.y[ vID[1] ]) * (z - data.z[ vID[1] ])) - ((y - data.y[ vID[1] ]) * (data.z[ vID[2] ] - data.z[ vID[1] ])); | |
| 372 | - vy2 = ((data.z[ vID[2] ] - data.z[ vID[1] ]) * (x - data.x[ vID[1] ])) - ((z - data.z[ vID[1] ]) * (data.x[ vID[2] ] - data.x[ vID[1] ])); | |
| 373 | - vz2 = ((data.x[ vID[2] ] - data.x[ vID[1] ]) * (y - data.y[ vID[1] ])) - ((x - data.x[ vID[1] ]) * (data.y[ vID[2] ] - data.y[ vID[1] ])); | |
| 371 | + vx2 = ((cbdata[blockid].y[ vID[2] ] - cbdata[blockid].y[ vID[1] ]) * (z - cbdata[blockid].z[ vID[1] ])) - ((y - cbdata[blockid].y[ vID[1] ]) * (cbdata[blockid].z[ vID[2] ] - cbdata[blockid].z[ vID[1] ])); | |
| 372 | + vy2 = ((cbdata[blockid].z[ vID[2] ] - cbdata[blockid].z[ vID[1] ]) * (x - cbdata[blockid].x[ vID[1] ])) - ((z - cbdata[blockid].z[ vID[1] ]) * (cbdata[blockid].x[ vID[2] ] - cbdata[blockid].x[ vID[1] ])); | |
| 373 | + vz2 = ((cbdata[blockid].x[ vID[2] ] - cbdata[blockid].x[ vID[1] ]) * (y - cbdata[blockid].y[ vID[1] ])) - ((x - cbdata[blockid].x[ vID[1] ]) * (cbdata[blockid].y[ vID[2] ] - cbdata[blockid].y[ vID[1] ])); | |
| 374 | 374 | |
| 375 | 375 | //内積 |
| 376 | 376 | d1 = data.material[face].vx*vx2 + data.material[face].vy*vy2 + data.material[face].vz*vz2; //ブロック面の法線との関係を算出 |
| @@ -381,9 +381,9 @@ | ||
| 381 | 381 | |
| 382 | 382 | |
| 383 | 383 | //外積 |
| 384 | - vx2 = ((data.y[ vID[3] ] - data.y[ vID[2] ]) * (z - data.z[ vID[2] ])) - ((y - data.y[ vID[2] ]) * (data.z[ vID[3] ] - data.z[ vID[2] ])); | |
| 385 | - vy2 = ((data.z[ vID[3] ] - data.z[ vID[2] ]) * (x - data.x[ vID[2] ])) - ((z - data.z[ vID[2] ]) * (data.x[ vID[3] ] - data.x[ vID[2] ])); | |
| 386 | - vz2 = ((data.x[ vID[3] ] - data.x[ vID[2] ]) * (y - data.y[ vID[2] ])) - ((x - data.x[ vID[2] ]) * (data.y[ vID[3] ] - data.y[ vID[2] ])); | |
| 384 | + vx2 = ((cbdata[blockid].y[ vID[3] ] - cbdata[blockid].y[ vID[2] ]) * (z - cbdata[blockid].z[ vID[2] ])) - ((y - cbdata[blockid].y[ vID[2] ]) * (cbdata[blockid].z[ vID[3] ] - cbdata[blockid].z[ vID[2] ])); | |
| 385 | + vy2 = ((cbdata[blockid].z[ vID[3] ] - cbdata[blockid].z[ vID[2] ]) * (x - cbdata[blockid].x[ vID[2] ])) - ((z - cbdata[blockid].z[ vID[2] ]) * (cbdata[blockid].x[ vID[3] ] - cbdata[blockid].x[ vID[2] ])); | |
| 386 | + vz2 = ((cbdata[blockid].x[ vID[3] ] - cbdata[blockid].x[ vID[2] ]) * (y - cbdata[blockid].y[ vID[2] ])) - ((x - cbdata[blockid].x[ vID[2] ]) * (cbdata[blockid].y[ vID[3] ] - cbdata[blockid].y[ vID[2] ])); | |
| 387 | 387 | |
| 388 | 388 | //内積 |
| 389 | 389 | d1 = data.material[face].vx*vx2 + data.material[face].vy*vy2 + data.material[face].vz*vz2; //ブロック面の法線との関係を算出 |
| @@ -394,9 +394,9 @@ | ||
| 394 | 394 | |
| 395 | 395 | |
| 396 | 396 | //外積 |
| 397 | - vx2 = ((data.y[ vID[0] ] - data.y[ vID[3] ]) * (z - data.z[ vID[3] ])) - ((y - data.y[ vID[3] ]) * (data.z[ vID[0] ] - data.z[ vID[3] ])); | |
| 398 | - vy2 = ((data.z[ vID[0] ] - data.z[ vID[3] ]) * (x - data.x[ vID[3] ])) - ((z - data.z[ vID[3] ]) * (data.x[ vID[0] ] - data.x[ vID[3] ])); | |
| 399 | - vz2 = ((data.x[ vID[0] ] - data.x[ vID[3] ]) * (y - data.y[ vID[3] ])) - ((x - data.x[ vID[3] ]) * (data.y[ vID[0] ] - data.y[ vID[3] ])); | |
| 397 | + vx2 = ((cbdata[blockid].y[ vID[0] ] - cbdata[blockid].y[ vID[3] ]) * (z - cbdata[blockid].z[ vID[3] ])) - ((y - cbdata[blockid].y[ vID[3] ]) * (cbdata[blockid].z[ vID[0] ] - cbdata[blockid].z[ vID[3] ])); | |
| 398 | + vy2 = ((cbdata[blockid].z[ vID[0] ] - cbdata[blockid].z[ vID[3] ]) * (x - cbdata[blockid].x[ vID[3] ])) - ((z - cbdata[blockid].z[ vID[3] ]) * (cbdata[blockid].x[ vID[0] ] - cbdata[blockid].x[ vID[3] ])); | |
| 399 | + vz2 = ((cbdata[blockid].x[ vID[0] ] - cbdata[blockid].x[ vID[3] ]) * (y - cbdata[blockid].y[ vID[3] ])) - ((x - cbdata[blockid].x[ vID[3] ]) * (cbdata[blockid].y[ vID[0] ] - cbdata[blockid].y[ vID[3] ])); | |
| 400 | 400 | |
| 401 | 401 | //内積 |
| 402 | 402 | d1 = data.material[face].vx*vx2 + data.material[face].vy*vy2 + data.material[face].vz*vz2; //ブロック面の法線との関係を算出 |