• R/O
  • SSH
  • HTTPS

Commit

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

Revision162 (tree)
Time2017-01-21 23:39:43
Authorxops-mikan

Log Message

OpenGLにて、モデルへのモーフィング処理を実装、モデルを読み込める最大数が誤っている問題の修正。

Change Summary

Incremental Difference

--- trunk/d3dgraphics-opengl.cpp (revision 161)
+++ trunk/d3dgraphics-opengl.cpp (revision 162)
@@ -295,7 +295,7 @@
295295 char stroks[] = " ;,"; //区切る文字列
296296
297297 //空いている認識番号を探す
298- for(int i=0; i<MAX_TEXTURE; i++){
298+ for(int i=0; i<MAX_MODEL; i++){
299299 if( pmodel[i].useflag == false ){
300300 id = i;
301301 break;
@@ -532,33 +532,63 @@
532532 OutputLog.WriteLog(LOG_LOAD, "モデル", str);
533533 #endif
534534
535- /*
536535 //データが正しいか調べる
537536 if( (idA < 0)||((MAX_MODEL -1) < idA) ){ return -1; }
538- if( pmodel[idA].useflag == false ){ return; }
537+ if( pmodel[idA].useflag == false ){ return -1; }
539538 if( (idB < 0)||((MAX_MODEL -1) < idB) ){ return -1; }
540- if( pmodel[idB].useflag == false ){ return; }
539+ if( pmodel[idB].useflag == false ){ return -1; }
541540
542- int id = -1;
541+ int idN = -1;
542+ int numpA, numpB;
543543
544544 //空いている認識番号を探す
545- for(int i=0; i<MAX_TEXTURE; i++){
545+ for(int i=0; i<MAX_MODEL; i++){
546546 if( pmodel[i].useflag == false ){
547- id = i;
547+ idN = i;
548548 break;
549549 }
550550 }
551- if( id == -1 ){ return -1; }
551+ if( idN == -1 ){ return -1; }
552552
553- return -1;
554- */
553+ //ポリゴン数を取得
554+ numpA = pmodel[idA].polygons;
555+ numpB = pmodel[idB].polygons;
555556
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+
556587 #ifdef ENABLE_DEBUGLOG
557588 //ログに出力
558- OutputLog.WriteLog(LOG_ERROR, "", "");
589+ OutputLog.WriteLog(LOG_COMPLETE, "", idN);
559590 #endif
560-
561- return idA;
591+ return idN;
562592 }
563593
564594 //! @brief モデルファイルを解放