首先,請不要問我爲什麼使用過時的軟件。我只是將Turbo C++搞亂了,作爲一種有趣的方式來開始使用簡單的程序。我正在嘗試創建一個在CPU上運行的舊式3D引擎。我首先嚐試使它在Z軸上旋轉一個簡單的3D盒子。由於它是通過Z軸旋轉的,它應該看起來像是旋轉的2D盒子。但是當我運行代碼時,它甚至不會將頂點投影到正確的位置。Turbo C++ 3D旋轉問題
請原諒我鍵入我的代碼的方式。
void Render3D(float VDATA[],float CFRAME[]) {
if (VDATA!=NULL) { float POINT[2]; float OLDPOINT[2]; float AXIS=0;
for (int P=0; P<24; P=P+1) { AXIS=AXIS+1; if (AXIS==1) { POINT[0]=VDATA[P]; }
if (AXIS==2) { POINT[1]=VDATA[P]; } if (AXIS==3) { POINT[2]=VDATA[P]; if (CFRAME!=NULL) {
OLDPOINT[0]=POINT[0]; OLDPOINT[1]=POINT[1]; OLDPOINT[2]=POINT[2];
POINT[0]=OLDPOINT[0]*cos(CFRAME[8])-OLDPOINT[1]*sin(CFRAME[8]);
POINT[1]=OLDPOINT[0]*sin(CFRAME[8])+OLDPOINT[1]*cos(CFRAME[8]);
OLDPOINT[0]=POINT[0]; OLDPOINT[1]=POINT[1]; OLDPOINT[2]=POINT[2];
POINT[1]=OLDPOINT[1]*cos(CFRAME[7])-OLDPOINT[2]*sin(CFRAME[7]);
POINT[2]=OLDPOINT[1]*sin(CFRAME[7])+OLDPOINT[2]*cos(CFRAME[7]);
OLDPOINT[0]=POINT[0]; OLDPOINT[1]=POINT[1]; OLDPOINT[2]=POINT[2];
POINT[2]=OLDPOINT[2]*cos(CFRAME[6])-OLDPOINT[0]*sin(CFRAME[6]);
POINT[0]=OLDPOINT[2]*sin(CFRAME[6])+OLDPOINT[0]*cos(CFRAME[6]);
POINT[0]=POINT[0]+CFRAME[3]; POINT[1]=POINT[1]+CFRAME[4]; POINT[2]=POINT[2]+CFRAME[5]; }
cout<<POINT[0]<<","<<POINT[1]<<","<<POINT[2]<<endl;
putpixel(POINT[0],POINT[1],7); AXIS=0; POINT[0]=0; POINT[1]=0; POINT[2]=0; } } } }
void main() { int Driver=DETECT,Mode; initgraph(&Driver,&Mode,"BGI");
clrscr(); cleardevice();
float VDATA[23]; float CFRAME[8]; CFRAME[3]=200; CFRAME[4]=200; CFRAME[5]=0;
VDATA[0]=-50; VDATA[1]=-50; VDATA[2]=-50;
VDATA[3]=-50; VDATA[4]=50; VDATA[5]=-50;
VDATA[6]=50; VDATA[7]=-50; VDATA[8]=-50;
VDATA[9]=50; VDATA[10]=50; VDATA[11]=-50;
VDATA[12]=-50; VDATA[13]=-50; VDATA[14]=50;
VDATA[15]=-50; VDATA[16]=50; VDATA[17]=50;
VDATA[18]=50; VDATA[19]=-50; VDATA[20]=50;
VDATA[21]=50; VDATA[22]=50; VDATA[23]=50;
while (1>0) { clrscr(); cleardevice(); Render3D(VDATA,CFRAME);
CFRAME[8]=CFRAME[8]+0.01; getch(); }
clrscr(); cleardevice(); closegraph(); }
VDATA [23]數組包含一個立方體的點。 CFRAME [8]數組保存座標系信息。前三個元素可以忽略。但是CFRAME [3],CFRAME [4],CFRAME [5]設置了XYZ中立方體的偏移量。 CFRAME [6],CFRAME [7],CFRAME [8]設置XYZ中立方體的旋轉。但是,當我運行的代碼,它顯示是這樣的:
https://i.gyazo.com/a8c0d62b03e14aa10e2bc93027fb3f05.png
應該顯示一個框,但事實並非如此。
當您在SO發帖時,請縮進您的代碼。更有可能讓某人去看它......而且,你正在繪製角落像素?嘗試繪製線條,以更好地看到發生了什麼。 – hyde
當我顯示座標的XYZ時,您不一定需要查看像素。沒有必要畫線,因爲它不會改變任何東西,並且在屏幕上看到一條線會更混亂。我也喜歡這樣輸入我的代碼,因爲我寧願看到所有的代碼,而沒有讓它們與窗口重疊,並且需要滾動到一邊才能看到它。 – Jason
對於遇到此線索的其他人,請不要談論讓它「看起來更好」,或者提出一些對我們兩個人都沒有幫助的事情。這是我的第一篇文章,下次我會縮進我未來的編碼,因爲我不想讓我的代碼看起來更整潔。謝謝。 :) – Jason