• R/O
  • SSH
  • HTTPS

提交

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

X operations(XOPS)に非常に近いFPSゲームを制作・リメイクし、成果物をオープンソースとして公開することを目的としたプロジェクトです。


Commit MetaInfo

修訂74 (tree)
時間2015-03-25 00:19:47
作者xops-mikan

Log Message

厚みゼロの板状ブロックに対する判定を改善

Change Summary

差異

--- trunk/collision.cpp (revision 73)
+++ trunk/collision.cpp (revision 74)
@@ -124,9 +124,31 @@
124124 //一ヵ所でも頂点が同じなら、板状になっていると判定。
125125 if( (data.x[j] == data.x[k])&&(data.y[j] == data.y[k])&&(data.z[j] == data.z[k]) ){
126126 BoardBlock[i] = true;
127+ j = 8; k = 8; //break
127128 }
128129 }
129130 }
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+ }
130152 }
131153
132154
@@ -230,7 +252,7 @@
230252 //内積
231253 d = bdata.material[face].vx*vx + bdata.material[face].vy*vy + bdata.material[face].vz*vz;
232254
233- if( d < 0.0f ){
255+ if( d <= 0.0f ){
234256 return true;
235257 }
236258 return false;
@@ -260,7 +282,7 @@
260282 //内積
261283 d = bdata.material[face].vx*vx + bdata.material[face].vz*vz;
262284
263- if( d < 0.0f ){
285+ if( d <= 0.0f ){
264286 return true;
265287 }
266288 return false;
@@ -1086,6 +1108,7 @@
10861108 //! @param maxDist 判定を行う最大距離 (0.0fを超える値)
10871109 //! @return 当たっている:true 当たっていない:false
10881110 //! @warning RayPos(始点)と RayDir(ベクトル)を間違えないこと。
1111+//! @attention Y軸方向へ垂直に立つ円柱です。向きは変えられません。
10891112 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)
10901113 {
10911114 float x, z, d;