X operations(XOPS)に非常に近いFPSゲームを制作・リメイクし、成果物をオープンソースとして公開することを目的としたプロジェクトです。
| Revision | 162 (tree) |
|---|---|
| Time | 2017-01-21 23:39:43 |
| Author | |
OpenGLにて、モデルへのモーフィング処理を実装、モデルを読み込める最大数が誤っている問題の修正。
| @@ -295,7 +295,7 @@ | ||
| 295 | 295 | char stroks[] = " ;,"; //区切る文字列 |
| 296 | 296 | |
| 297 | 297 | //空いている認識番号を探す |
| 298 | - for(int i=0; i<MAX_TEXTURE; i++){ | |
| 298 | + for(int i=0; i<MAX_MODEL; i++){ | |
| 299 | 299 | if( pmodel[i].useflag == false ){ |
| 300 | 300 | id = i; |
| 301 | 301 | break; |
| @@ -532,33 +532,63 @@ | ||
| 532 | 532 | OutputLog.WriteLog(LOG_LOAD, "モデル", str); |
| 533 | 533 | #endif |
| 534 | 534 | |
| 535 | - /* | |
| 536 | 535 | //データが正しいか調べる |
| 537 | 536 | if( (idA < 0)||((MAX_MODEL -1) < idA) ){ return -1; } |
| 538 | - if( pmodel[idA].useflag == false ){ return; } | |
| 537 | + if( pmodel[idA].useflag == false ){ return -1; } | |
| 539 | 538 | if( (idB < 0)||((MAX_MODEL -1) < idB) ){ return -1; } |
| 540 | - if( pmodel[idB].useflag == false ){ return; } | |
| 539 | + if( pmodel[idB].useflag == false ){ return -1; } | |
| 541 | 540 | |
| 542 | - int id = -1; | |
| 541 | + int idN = -1; | |
| 542 | + int numpA, numpB; | |
| 543 | 543 | |
| 544 | 544 | //空いている認識番号を探す |
| 545 | - for(int i=0; i<MAX_TEXTURE; i++){ | |
| 545 | + for(int i=0; i<MAX_MODEL; i++){ | |
| 546 | 546 | if( pmodel[i].useflag == false ){ |
| 547 | - id = i; | |
| 547 | + idN = i; | |
| 548 | 548 | break; |
| 549 | 549 | } |
| 550 | 550 | } |
| 551 | - if( id == -1 ){ return -1; } | |
| 551 | + if( idN == -1 ){ return -1; } | |
| 552 | 552 | |
| 553 | - return -1; | |
| 554 | - */ | |
| 553 | + //ポリゴン数を取得 | |
| 554 | + numpA = pmodel[idA].polygons; | |
| 555 | + numpB = pmodel[idB].polygons; | |
| 555 | 556 | |
| 557 | + //ポリゴン数が同じかどうか調べる | |
| 558 | + if( numpA != numpB ){ return -1; } | |
| 559 | + | |
| 560 | + float *VertexAry = new float [numpA*6*3]; | |
| 561 | + float *ColorAry = new float [numpA*6*4]; | |
| 562 | + float *TexCoordAry = new float [numpA*6*2]; | |
| 563 | + | |
| 564 | + //各頂点を読み出し計算 | |
| 565 | + for(int i=0; i<numpA*6; i++){ | |
| 566 | + VertexAry[i*3 + 0] = (pmodel[idA].VertexAry[i*3 + 0] + pmodel[idB].VertexAry[i*3 + 0])/2; | |
| 567 | + VertexAry[i*3 + 1] = (pmodel[idA].VertexAry[i*3 + 1] + pmodel[idB].VertexAry[i*3 + 1])/2; | |
| 568 | + VertexAry[i*3 + 2] = (pmodel[idA].VertexAry[i*3 + 2] + pmodel[idB].VertexAry[i*3 + 2])/2; | |
| 569 | + } | |
| 570 | + | |
| 571 | + //マテリアル情報をコピー | |
| 572 | + for(int i=0; i<numpA*6; i++){ | |
| 573 | + ColorAry[i*4 + 0] = pmodel[idA].ColorAry[i*4 + 0]; | |
| 574 | + ColorAry[i*4 + 1] = pmodel[idA].ColorAry[i*4 + 1]; | |
| 575 | + ColorAry[i*4 + 2] = pmodel[idA].ColorAry[i*4 + 2]; | |
| 576 | + ColorAry[i*4 + 3] = pmodel[idA].ColorAry[i*4 + 3]; | |
| 577 | + TexCoordAry[i*2 + 0] = pmodel[idA].TexCoordAry[i*2 + 0]; | |
| 578 | + TexCoordAry[i*2 + 1] = pmodel[idA].TexCoordAry[i*2 + 1]; | |
| 579 | + } | |
| 580 | + | |
| 581 | + pmodel[idN].useflag = true; | |
| 582 | + pmodel[idN].polygons = numpA; | |
| 583 | + pmodel[idN].VertexAry = VertexAry; | |
| 584 | + pmodel[idN].ColorAry = ColorAry; | |
| 585 | + pmodel[idN].TexCoordAry = TexCoordAry; | |
| 586 | + | |
| 556 | 587 | #ifdef ENABLE_DEBUGLOG |
| 557 | 588 | //ログに出力 |
| 558 | - OutputLog.WriteLog(LOG_ERROR, "", ""); | |
| 589 | + OutputLog.WriteLog(LOG_COMPLETE, "", idN); | |
| 559 | 590 | #endif |
| 560 | - | |
| 561 | - return idA; | |
| 591 | + return idN; | |
| 562 | 592 | } |
| 563 | 593 | |
| 564 | 594 | //! @brief モデルファイルを解放 |