龍神録の3D背景に関する章を読んで一応理解できたので改造に着手しました。
龍神録の3D背景はディスプレイに関して垂直方向にしか移動しておらず
不自然(?)な感じだったので、地面に角度を持たせて色々いじったところ
本家の東方のような3D背景を再現できました。しかし、画像の位置がズレているのか、
画像と画像のつなぎ目に黒線が入ってしまってます。どう改善すればよいでしょう。
龍神録のサンプルを利用させてもらってます。
改造箇所は、Objectに新しく①角度Angle ②スクロール速度Speed
③④⑤画像を描画する位置の基準となる座標 GraphX,Y,Z という情報を持たせました。
初期化部分--------------------------------------
・
・
・
for(s=0; s<Ob->ObchindMax; s++){
Ob->ObChild.x = GraphX;
Ob->ObChild.y = GraphY + Ob->LargeY*2 * sin(Ob->Angle) * s;
Ob->ObChild.z = GraphZ + Ob->LargeY*2 * cos(Ob->Angle) * s;
for(i=0; i<6; i++){
Ob->ObChild.Vertex.r =
Ob->ObChild.Vertex.g =
Ob->ObChild.Vertex.b =
Ob->ObChild.Vertex.a = 255;
Ob->ObChild.Vertex.u = ou1 + ou2 * VtPm.u;
Ob->ObChild.Vertex.v = ov1 + ov2 * VtPm.v;
}
}
・
・
・
---------------------------
計算部分------------------------
・
・
・
for(t=0; t<ObjectNum; t++){
for(s=0; s<Object[t].ObchindMax; s++){
Object[t].ObChild.z-=Object[t].Speed*cos(Object[t].Angle);
Object[t].ObChild[s].y-=Object[t].Speed*sin(Object[t].Angle);
for(i=0;i<6;i++){
switch(Object[t].Type){
case 0://地面
Object[t].ObChild[s].Vertex.pos.x = Object[t].ObChild[s].x + Object[t].LargeX * VtPm.x ;
Object[t].ObChild[s].Vertex[i].pos.y = Object[t].ObChild[s].y + Object[t].LargeY * sin( Object[t].Angle ) * VtPm[i].y ;
Object[t].ObChild[s].Vertex[i].pos.z = Object[t].ObChild[s].z + Object[t].LargeY * cos( Object[t].Angle ) * VtPm[i].y ;
break;
}
}
}
if( Object[t].FromZ - Object[t].FadeFromZ <= 0 ){
printfDx("Object[%d].Fromの設定がおかしい\n",t);
}
else if( Object[t].FadeToZ - Object[t].ToZ <= 0 ){
printfDx("Object[%d].Toの設定がおかしい\n",t);
}
else{
for(s=0; s<Object[t].ObchindMax; s++){
//yが GraphY から画像1枚分小さい位置に来たら
if(Object[t].ObChild[s].y < Object[t].GraphY - Object[t].LargeY*2 * sin(Object[t].Angle)){
Object[t].ObChild[s].y = Object[t].GraphY + (Object[t].LargeY*2) * sin(Object[t].Angle) * (Object[t].ObchindMax-1);
Object[t].ObChild[s].z = Object[t].GraphZ + (Object[t].LargeY*2) * cos(Object[t].Angle) * (Object[t].ObchindMax-1);
}
}
・
・
・
