たびたびすいません、助けてください。
以下のプログラム(妙な物体を表示するだけ)を実行すると、
ウィンドウを閉じた後に「異常終了」のダイアログが出ます。
ログを見ても異常はないようです。
浮動小数点のあたりに問題があるような気がするのですが、自分ではわかりません。
(point[z*100+x+50].pos=の行をコメントアウトすると直ります)
#include "DxLib.h"
#include <math>
#define PROP 100.0f
#define CALC cos( ((float)x) /90.0f *PHI_F) *cos((((float)z)-50.0f)/90.0f*PHI_F) *PROP
void MouseInput();
int WINAPI WinMain(HINSTANCE hI,HINSTANCE hP,LPSTR lpC,int nC){
ChangeWindowMode(true); //ウィンドウモード
SetOutApplicationLogValidFlag(true); //ログ出力ON
if(DxLib_Init()==-1) return -1;
VERTEX3D point[10000]; //座標
int x,y,z;
for(z=0;z<100;z++){
for(x=-50;x<=50;x++){
point[z*100+x+50].dif=GetColorU8(0,z*2.5,255-z*2.5,255);
point[z*100+x+50].spc=GetColorU8(0,255-z*2.5,z*2.5,255);
point[z*100+x+50].u=0;
point[z*100+x+50].v=0;
point[z*100+x+50].norm=VGet(0.0f,0.0f,-1.0f);
point[z*100+x+50].pos=VGet((float)x*3,(float)CALC,(float)z*3);
}
}
unsigned short indc[60000]; //頂点インデックス
for(int z=0;z<99;z++){
for(int i=0;i<100;i++){
indc[i*6+z*594]=100*z+i;
indc[i*6+z*594+1]=100*z+i+1;
indc[i*6+z*594+2]=100*z+i+100;
indc[i*6+z*594+3]=100*z+i+100;
indc[i*6+z*594+4]=100*z+i+101;
indc[i*6+z*594+5]=100*z+i+1;
}
}
SetCameraNearFar(1.0f,300.0f);
SetCameraPositionAndTarget_UpVecY(VGet(0.0f,50.0f,-50.0f),VGet(0.0f,0.0f,0.0f));
SetDrawScreen(DX_SCREEN_BACK);
while(ProcessMessage()==0 && CheckHitKey(KEY_INPUT_ESCAPE)==0){
ClsDrawScreen();
MouseInput();
DrawPolygonIndexed3D(point,10000,indc,19602,DX_NONE_GRAPH,false);
ScreenFlip();
}
DxLib_End();
return 0;
}
int px,py;
float xzd,yd;
void MouseInput(){
int x,y;
GetMousePoint(&x,&y);
int dx,dy;
dx=x-px;
dy=y-py;
yd+=((float)dx)/100.0f;
xzd+=((float)dy)/100.0f;
VECTOR campos;
campos.x=-cos(yd)*200.0f;
campos.z=-sin(yd)*200.0f;
campos.y=200.0f;
SetCameraPositionAndTarget_UpVecY(campos,VGet(0.0f,0.0f,0.0f));
px=x;
py=y;
}
環境:CPU Celeron D 2.66G
DRAM 512MB
OS WinXP SP3
DirectX9.00cエンドユーザーランタイムインストール済み
DXライブラリV3.00c
どなたかご指摘お願いしますm(_ _)m