3D

「3D」の編集履歴(バックアップ)一覧はこちら

3D」(2007/11/17 (土) 20:43:48) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

情報工学基礎演習 3D描画用ツール C言語 ソースコード -------------------------------------------------------------------------------------------------------------------- #include<stdio.h> void box(); void tree1(); void tree2(); void pole(); void texmake(); void texexpo(); int main(){ int t=1; printf("注意 小数座標には対応していません\n"); while(t!=0){ printf("終了:0 直方体:1 円柱:2\n"); printf("木A:3 木B:4\n"); printf("texture maker:10 texture exporter:20\n"); printf("タイプ:"); scanf("%d", &t); if (t==0){} else if(t==1){box();} else if(t==2){pole();} else if(t==3){tree1();} else if(t==4){tree2();} else if(t==10){texmake();} else if(t==20){texexpo();} /*else if()*/ else{} } return 0; } void box(){ int x, y, z, xl, yl, zl; printf("左上座標(x)=");scanf("%d", &x);printf("左上座標(y)=");scanf("%d", &y); printf("左上座標(z)=");scanf("%d", &z);printf("サイズ(x)=");scanf("%d", &xl); printf("サイズ(y)=");scanf("%d", &yl);printf("サイズ(z)=");scanf("%d", &zl); printf("BOX{P %d. %d. %d. C 1. 1. 1. S %d. %d. %d. T 0.}\n", x+xl/2, y+yl/2, z+zl/2, xl, yl, zl); } void pole(){ int v, x, y, z, r, h; printf("向き x:1 y:2 z:3=");scanf("%d", &v); printf("底辺座標(x)=");scanf("%d", &x); printf("底辺座標(y)=");scanf("%d", &y); printf("底辺座標(z)=");scanf("%d", &z); printf("半径=");scanf("%d", &r); printf("長さ=");scanf("%d", &h); if(v==1){printf("POLE_X{P %d. %d. %d. C 1. 1. 1. R %d. H %d. T 0.}\n", x+h/2, y, z, r, h);} else if(v==2){printf("POLE_Y{P %d. %d. %d. C 1. 1. 1. R %d. H %d. T 0.}\n", x, y+h/2, z, r, h);} else if(v==3){printf("POLE_Z{P %d. %d. %d. C 1. 1. 1. R %d. H %d. T 0.}\n", x, y, z+h/2, r, h);} else {} } void tree1(){ int x, z, s; printf("座標(x)=");scanf("%d", &x); printf("座標(z)=");scanf("%d", &z); printf("POLE_Y{P %d. 45. %d. C 0.6 0.2 0.2 R 7. H 90. T 0.}\n", x, z); printf("BALL{P %d. 120. %d. C 0. 0.5 0.1 S 120. 60. 140. T 0.}\n", x, z); } void tree2(){ int x, z, s; printf("座標(x)=");scanf("%d", &x); printf("座標(z)=");scanf("%d", &z); printf("POLE_Y{P %d. 60. %d. C 0.5 0.1 0.1 R 6. H 120. T 0.}\n", x, z); printf("BALL{P %d. 160. %d. C 0. 0.6 0.1 S 18. 60. 18. T 0.}\n", x, z); } void texmake(){ int v, x, y, z, h, i, k, a[100][4]; float c, rad, rx, ry, rz, cr, cg, cb; printf("平面選択 (x-y):[0] (y-z):[1] (z-x):[2]=");scanf("%d", &v); printf("開始座標(x)=");scanf("%d", &x); printf("開始座標(y)=");scanf("%d", &y); printf("開始座標(z)=");scanf("%d", &z); printf("奥行き=");scanf("%d", &h); printf("透過度=");scanf("%f", &c); printf("色(R G B)");scanf("%f %f %f", &cr, &cg, &cb); printf("回転角度=");scanf("%f", &rad); if(rad!=0){printf("回転軸(x y z)=");scanf("%f %f %f", &rx, &ry, &rz);} for(i=0;i<100;i++) { for(k=0;k<4;k++) {printf("a[%d][%d]", i, k);scanf("%d", &a[i][k]); if(k==3&&a[i][0]==0&&a[i][1]==0&&a[i][2]==0&&a[i][3]==0){i=100;} } } printf("\n"); for(i=0;i<100;i++) { if(a[i][0]==0&&a[i][1]==0&&a[i][2]==0&&a[i][3]==0){i=100;} else { if(v==0){printf("BOX{P %d. %d. %d. C %1.1f %1.1f %1.1f S %d. %d. %d. T %1.1f", x+(a[i][2]+a[i][0])/2, y+(a[i][3]+a[i][1])/2, z+h/2, cr, cg, cb, a[i][2]-a[i][0], a[i][3]-a[i][1], h, c);} else if(v==1){printf("BOX{P %d. %d. %d. C %1.1f %1.1f %1.1f S %d. %d. %d. T %1.1f", x+h/2, y+(a[i][3]+a[i][1])/2, z+(a[i][2]+a[i][0])/2, cr, cg, cb, h, a[i][3]-a[i][1], a[i][2]-a[i][0], c);} else if(v==2){printf("BOX{P %d. %d. %d. C %1.1f %1.1f %1.1f S %d. %d. %d. T %1.1f", x+(a[i][2]+a[i][0])/2, y+h/2, z+(a[i][3]+a[i][1])/2, cr, cg, cb, a[i][2]-a[i][0], h, a[i][3]-a[i][1], c);} if(rad!=0){printf(" Ro %1.1f %1.1f %1.1f %1.2f", rx, ry, rz, rad);} printf("}\n"); } } } void texexpo(){ int pa, v, x, y, z, h, i, k, a[200][4], p, q, x1, x2, y1, y2, xmax, ymax; float c, rad, rx, ry, rz, cr, cg, cb; printf("ヘッダ情報を入力しますか? yes[1] no[0]");scanf("%d", &pa); if(pa==1){ printf("平面選択 (x-y):[0] (y-z):[1] (z-x):[2]=");scanf("%d", &v); printf("開始座標(x)=");scanf("%d", &x); printf("開始座標(y)=");scanf("%d", &y); printf("開始座標(z)=");scanf("%d", &z); printf("奥行き=");scanf("%d", &h); printf("透過度=");scanf("%f", &c); printf("色(R G B)");scanf("%f %f %f", &cr, &cg, &cb); printf("回転角度=");scanf("%f", &rad); if(rad!=0){printf("回転軸(x y z)=");scanf("%f %f %f", &rx, &ry, &rz);} } printf("パターンサイズ(横軸)=");scanf("%d", &p); printf("パターンサイズ(縦軸)=");scanf("%d", &q); printf("始点座標(x1:y1)=");scanf("%d %d", &x1, &y1); printf("終点座標(x2:y2)=");scanf("%d %d", &x2, &y2); printf("横方向くり返し回数=");scanf("%d", &xmax); printf("縦方向くり返し回数=");scanf("%d", &ymax); printf("\n**********************"); if(pa==1){printf("\n10\n%d\n%d %d %d\n%d\n%1.1f\n%1.1f %1.1f %1.1f\n%1.2f", v,x,y,z,h,c,cr,cg,cb,rad); if (rad!=0){printf(" %1.1f %1.1f %1.1f", rx, ry, rz);} } for(i=0;i<ymax;i++) { for(k=0;k<xmax;k++) { printf("\n%d %d %d %d", x1+p*k, y1+q*i, x2+p*k, y2+q*i);} } printf("\n0 0 0 0\n0\n**********************\n"); } ------------------------------------------------------------------------------------------------------------------ 「texture maker」「texture exporter」 使用マニュアル <texture maker>   「texture maker」は平面を指定し、相対座標を打ち込むことで簡単に大量の直方体を   作ることの出来るツールです。   1.原点座標 2.奥行き 3.色、透過性、回転   4.範囲の始点座標(原点側) 5.範囲の終点座標(原点の反対側)   4と5は連続で入力し続けることができます。(a[i][o]=x1, a[i][1]=y1, a[i][2]=x2, a[i][3]=y2) 0,0,0,0と打ち込むと終了します。 <texture exporter>   「texture exporter」は「texture maker」用のデータを出力するためのツールです。   1.(x-y)(y-z)(z-x)平面のいずれかを選択し、原点とする座標を選択。   2.平面からの奥行き(残りの軸の正方向)を選択。   3.その他の情報を入力。   4.単位面積の縦横長を入力。   5.作りたい長方形の始点、終点座標(相対)を入力。   6.横方向、縦方向に何回繰り返すかを入力。   出力されたデータ(*******************に挟まれている部分)を拡張子.datで保存してください。   これをプログラム実行時に ./~~~.out<~~~.dat とすると、自動的に変換されて出力されます。      *ヘッダファイルの有無について    ヘッダとはプログラム開始時の入力、平面、原点座標、色などの情報の部分です。    この後に「座標データ」「終了データ」で構成されています。    ヘッダ無しにして出力されたデータは、「座標データ」「終了データ」のみになります。  
情報工学基礎演習 3D描画用ツール C言語 ソースコード -------------------------------------------------------------------------------------------------------------------- #include<stdio.h> void box(); void tree1(); void tree2(); void pole(); void texmake(); void texexpo(); int main(){ int t=1; printf("注意 小数座標には対応していません\n"); while(t!=0){ printf("終了:0 直方体:1 円柱:2\n"); printf("木A:3 木B:4\n"); printf("texture maker:10 texture exporter:20\n"); printf("タイプ:"); scanf("%d", &t); if (t==0){} else if(t==1){box();} else if(t==2){pole();} else if(t==3){tree1();} else if(t==4){tree2();} else if(t==10){texmake();} else if(t==20){texexpo();} /*else if()*/ else{} } return 0; } void box(){ int x, y, z, xl, yl, zl; printf("左上座標(x)=");scanf("%d", &x);printf("左上座標(y)=");scanf("%d", &y); printf("左上座標(z)=");scanf("%d", &z);printf("サイズ(x)=");scanf("%d", &xl); printf("サイズ(y)=");scanf("%d", &yl);printf("サイズ(z)=");scanf("%d", &zl); printf("BOX{P %d. %d. %d. C 1. 1. 1. S %d. %d. %d. T 0.}\n", x+xl/2, y+yl/2, z+zl/2, xl, yl, zl); } void pole(){ int v, x, y, z, r, h; printf("向き x:1 y:2 z:3=");scanf("%d", &v); printf("底辺座標(x)=");scanf("%d", &x); printf("底辺座標(y)=");scanf("%d", &y); printf("底辺座標(z)=");scanf("%d", &z); printf("半径=");scanf("%d", &r); printf("長さ=");scanf("%d", &h); if(v==1){printf("POLE_X{P %d. %d. %d. C 1. 1. 1. R %d. H %d. T 0.}\n", x+h/2, y, z, r, h);} else if(v==2){printf("POLE_Y{P %d. %d. %d. C 1. 1. 1. R %d. H %d. T 0.}\n", x, y+h/2, z, r, h);} else if(v==3){printf("POLE_Z{P %d. %d. %d. C 1. 1. 1. R %d. H %d. T 0.}\n", x, y, z+h/2, r, h);} else {} } void tree1(){ int x, z, s; printf("座標(x)=");scanf("%d", &x); printf("座標(z)=");scanf("%d", &z); printf("POLE_Y{P %d. 45. %d. C 0.6 0.2 0.2 R 7. H 90. T 0.}\n", x, z); printf("BALL{P %d. 120. %d. C 0. 0.5 0.1 S 120. 60. 140. T 0.}\n", x, z); } void tree2(){ int x, z, s; printf("座標(x)=");scanf("%d", &x); printf("座標(z)=");scanf("%d", &z); printf("POLE_Y{P %d. 60. %d. C 0.5 0.1 0.1 R 6. H 120. T 0.}\n", x, z); printf("BALL{P %d. 160. %d. C 0. 0.6 0.1 S 18. 60. 18. T 0.}\n", x, z); } void texmake(){ int v, x, y, z, h, i, k, a[100][4]; float c, rad, rx, ry, rz, cr, cg, cb; printf("平面選択 (x-y):[0] (y-z):[1] (z-x):[2]=");scanf("%d", &v); printf("開始座標(x)=");scanf("%d", &x); printf("開始座標(y)=");scanf("%d", &y); printf("開始座標(z)=");scanf("%d", &z); printf("奥行き=");scanf("%d", &h); printf("透過度=");scanf("%f", &c); printf("色(R G B)");scanf("%f %f %f", &cr, &cg, &cb); printf("回転角度=");scanf("%f", &rad); if(rad!=0){printf("回転軸(x y z)=");scanf("%f %f %f", &rx, &ry, &rz);} for(i=0;i<100;i++) { for(k=0;k<4;k++) {printf("a[%d][%d]", i, k);scanf("%d", &a[i][k]); if(k==3&&a[i][0]==0&&a[i][1]==0&&a[i][2]==0&&a[i][3]==0){i=100;} } } printf("\n"); for(i=0;i<100;i++) { if(a[i][0]==0&&a[i][1]==0&&a[i][2]==0&&a[i][3]==0){i=100;} else { if(v==0){printf("BOX{P %d. %d. %d. C %1.1f %1.1f %1.1f S %d. %d. %d. T %1.1f", x+(a[i][2]+a[i][0])/2, y+(a[i][3]+a[i][1])/2, z+h/2, cr, cg, cb, a[i][2]-a[i][0], a[i][3]-a[i][1], h, c);} else if(v==1){printf("BOX{P %d. %d. %d. C %1.1f %1.1f %1.1f S %d. %d. %d. T %1.1f", x+h/2, y+(a[i][3]+a[i][1])/2, z+(a[i][2]+a[i][0])/2, cr, cg, cb, h, a[i][3]-a[i][1], a[i][2]-a[i][0], c);} else if(v==2){printf("BOX{P %d. %d. %d. C %1.1f %1.1f %1.1f S %d. %d. %d. T %1.1f", x+(a[i][2]+a[i][0])/2, y+h/2, z+(a[i][3]+a[i][1])/2, cr, cg, cb, a[i][2]-a[i][0], h, a[i][3]-a[i][1], c);} if(rad!=0){printf(" Ro %1.1f %1.1f %1.1f %1.2f", rx, ry, rz, rad);} printf("}\n"); } } } void texexpo(){ int pa, v, x, y, z, h, i, k, a[200][4], p, q, x1, x2, y1, y2, xmax, ymax; float c, rad, rx, ry, rz, cr, cg, cb; printf("ヘッダ情報を入力しますか? yes[1] no[0]");scanf("%d", &pa); if(pa==1){ printf("平面選択 (x-y):[0] (y-z):[1] (z-x):[2]=");scanf("%d", &v); printf("開始座標(x)=");scanf("%d", &x); printf("開始座標(y)=");scanf("%d", &y); printf("開始座標(z)=");scanf("%d", &z); printf("奥行き=");scanf("%d", &h); printf("透過度=");scanf("%f", &c); printf("色(R G B)");scanf("%f %f %f", &cr, &cg, &cb); printf("回転角度=");scanf("%f", &rad); if(rad!=0){printf("回転軸(x y z)=");scanf("%f %f %f", &rx, &ry, &rz);} } printf("パターンサイズ(横軸)=");scanf("%d", &p); printf("パターンサイズ(縦軸)=");scanf("%d", &q); printf("始点座標(x1:y1)=");scanf("%d %d", &x1, &y1); printf("終点座標(x2:y2)=");scanf("%d %d", &x2, &y2); printf("横方向くり返し回数=");scanf("%d", &xmax); printf("縦方向くり返し回数=");scanf("%d", &ymax); printf("\n**********************"); if(pa==1){printf("\n10\n%d\n%d %d %d\n%d\n%1.1f\n%1.1f %1.1f %1.1f\n%1.2f", v,x,y,z,h,c,cr,cg,cb,rad); if (rad!=0){printf(" %1.1f %1.1f %1.1f", rx, ry, rz);} } for(i=0;i<ymax;i++) { for(k=0;k<xmax;k++) { printf("\n%d %d %d %d", x1+p*k, y1+q*i, x2+p*k, y2+q*i);} } printf("\n0 0 0 0\n0\n**********************\n"); } ------------------------------------------------------------------------------------------------------------------ 「texture maker」「texture exporter」 使用マニュアル <texture maker>   「texture maker」は平面を指定し、相対座標を打ち込むことで簡単に大量の直方体を   作ることの出来るツールです。   1.原点座標 2.奥行き 3.色、透過性、回転   4.範囲の始点座標(原点側) 5.範囲の終点座標(原点の反対側)   4と5は連続で入力し続けることができます。(a[i][o]=x1, a[i][1]=y1, a[i][2]=x2, a[i][3]=y2) 0,0,0,0と打ち込むと終了します。 <texture exporter>   「texture exporter」は「texture maker」用のデータを出力するためのツールです。   1.(x-y)(y-z)(z-x)平面のいずれかを選択し、原点とする座標を選択。   2.平面からの奥行き(残りの軸の正方向)を選択。   3.その他の情報を入力。   4.単位面積の縦横長を入力。   5.作りたい長方形の始点、終点座標(相対)を入力。   6.横方向、縦方向に何回繰り返すかを入力。   出力されたデータ(*******************に挟まれている部分)を拡張子.datで保存してください。   これをプログラム実行時に ./~~~.out<~~~.dat とすると、自動的に変換されて出力されます。      *ヘッダファイルの有無について    ヘッダとはプログラム開始時の入力、平面、原点座標、色などの情報の部分です。    この後に「座標データ」「終了データ」で構成されています。    ヘッダ無しにして出力されたデータは、「座標データ」「終了データ」のみになります。  

表示オプション

横に並べて表示:
変化行の前後のみ表示: