HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2019
1103
HSP 初心者d3moduleの立方体塗りつぶし4解決


HSP 初心者

リンク

2019/11/3(Sun) 11:02:09|NO.88791


;参考:https://wiki.hsp.moe/d3module%EF%BC%8F%E3%83%89%E3%83%A9%E3%83%83%E3%82%B0%E3%81%A7%E3%82%AB%E3%83%A1%E3%83%A9%E3%82%92%E7%A7%BB%E5%8B%95%E3%81%99%E3%82%8B.html #include "d3m.hsp" #const double CAMERA_R 300 // 極座標のr #const double PI 3.1415 // 円周率 camera_theta = 0.0 // 極座標のθ camera_phi = PI / 3.0 // 極座標のφ old_mx = 0 // 前回処理時(約50ミリ秒前)のマウスカーソルの座標 old_my = 0 // 前回処理時(約50ミリ秒前)のマウスカーソルの座標 bgscr 0,1920,1080,0,0,0 *main gosub *move_camera gosub *draw await 1 goto *main *move_camera getkey left_click, 1 ;if left_click { ;if old_click { camera_theta += 0.01 * ( old_mx - ginfo_mx ) camera_phi = limitf( camera_phi + 0.01 * ( old_my - ginfo_my ), 0.01, PI - 0.01 ) // ↑d3setcamの制約により、(x, y) = (0, 0) とならないようにlimitfを使う ; } old_mx = ginfo_mx old_my = ginfo_my ;} old_click = left_click mouse -1 // カメラ位置を変更 // camera_DISTを変数にすれば、ズームイン/ズームアウトの演出が可能 d3vrotate camera_x, camera_y, camera_z, 0, 0, CAMERA_R, 0, 1, 0, camera_phi d3vrotate camera_x, camera_y, camera_z, camera_x, camera_y, camera_z, 0, 0, 1, camera_theta d3setcam camera_x, camera_y, camera_z // ↑この3行は // d3setcam CAMERA_R * cos(camera_theta) * sin(camera_phi), CAMERA_R * sin(camera_theta) * sin(camera_phi), CAMERA_R * cos(camera_phi) // と同等 return *draw redraw 0 color 50,50,50 : boxf gosub *draw_axes // 座標軸を描く gosub *draw_box // 箱を描く redraw 1 title strf( "θ:%f / ", camera_theta ) + strf( "φ:%f", camera_phi ) return *draw_axes /* color ,255,255 repeat 3 d3arrow 100 * ( cnt == 0 ), 100 * ( cnt == 1 ), 100 * ( cnt == 2 ), -100 * ( cnt == 0 ), -100 * ( cnt == 1 ), -100 * ( cnt == 2 ) d3mes strf( "%c", 'X' + cnt ), 120 * ( cnt == 0 ), 120 * ( cnt == 1 ), 120 * ( cnt == 2 ) loop return */ ;↑矢印を表示↑ *draw_box ; 箱 ab = 50 bb = 50 cb = 50 xa = -50 xb = -50 xc = -50 color 255,255 repeat 50 d3box xa, xb, xc, ab, bb, cb loop return

これを実行すると出てくる立方体の中を塗りつぶしたいです。
わかる方いましたらおしえてください!



この記事に返信する


暇人

リンク

2019/11/4(Mon) 11:55:18|NO.88801

一度に立方体を塗りつぶす命令は無いので
3Dの面を塗りつぶす d3square って命令を使って
6面を塗りつぶす。



HSP 初心者

リンク

2019/11/4(Mon) 19:26:16|NO.88806

ありがとうごさいます!! 後で試してみます



ゆうやん

リンク

2019/11/4(Mon) 22:53:16|NO.88808

余談ですが、全画面モードにする際に、モニターの解像度が1920x1080未満だと画面がはみ出てしまうので、

bgscr 0,1920,1080,0,0,0
ではなく、

bgscr 0,ginfo_dispx,ginfo_dispy,0,0,0
にすればいいと思います。



HSP 初心者

リンク

2019/11/5(Tue) 08:24:25|NO.88809


;参考:https://wiki.hsp.moe/d3module%EF%BC%8F%E3%83%89%E3%83%A9%E3%83%83%E3%82%B0%E3%81%A7%E3%82%AB%E3%83%A1%E3%83%A9%E3%82%92%E7%A7%BB%E5%8B%95%E3%81%99%E3%82%8B.html #include "d3m.hsp" #const double CAMERA_R 300 // 極座標のr #const double PI 3.1415 // 円周率 camera_theta = 0.0 // 極座標のθ camera_phi = PI / 3.0 // 極座標のφ old_mx = 0 // 前回処理時(約50ミリ秒前)のマウスカーソルの座標 old_my = 0 // 前回処理時(約50ミリ秒前)のマウスカーソルの座標 bgscr 0,ginfo_dispx,ginfo_dispy,0,0,0 *main gosub *move_camera gosub *draw await 1 goto *main *move_camera getkey left_click, 1 ;if left_click { ;if old_click { camera_theta += 0.01 * ( old_mx - ginfo_mx ) camera_phi = limitf( camera_phi + 0.01 * ( old_my - ginfo_my ), 0.01, PI - 0.01 ) // ↑d3setcamの制約により、(x, y) = (0, 0) とならないようにlimitfを使う ; } old_mx = ginfo_mx old_my = ginfo_my ;} old_click = left_click mouse -1 // カメラ位置を変更 // camera_DISTを変数にすれば、ズームイン/ズームアウトの演出が可能 d3vrotate camera_x, camera_y, camera_z, 0, 0, CAMERA_R, 0, 1, 0, camera_phi d3vrotate camera_x, camera_y, camera_z, camera_x, camera_y, camera_z, 0, 0, 1, camera_theta d3setcam camera_x, camera_y, camera_z // ↑この3行は // d3setcam CAMERA_R * cos(camera_theta) * sin(camera_phi), CAMERA_R * sin(camera_theta) * sin(camera_phi), CAMERA_R * cos(camera_phi) // と同等 return *draw redraw 0 color 255,180,0 : boxf gosub *draw_axes // 座標軸を描く gosub *draw_box // 箱を描く redraw 1 title strf( "θ:%f / ", camera_theta ) + strf( "φ:%f", camera_phi ) return *draw_axes /* color ,255,255 repeat 3 d3arrow 100 * ( cnt == 0 ), 100 * ( cnt == 1 ), 100 * ( cnt == 2 ), -100 * ( cnt == 0 ), -100 * ( cnt == 1 ), -100 * ( cnt == 2 ) d3mes strf( "%c", 'X' + cnt ), 120 * ( cnt == 0 ), 120 * ( cnt == 1 ), 120 * ( cnt == 2 ) loop return */ ;↑矢印を表示↑ *draw_box ; 箱 r = 50 x = -r, r, r, -r y = -r, -r, r, r z = -r, -r, -r, -r s = r, r, r, r color 255,255 ;d3box xa, xb, xc, ab, bb, cb color ,,255 ;箱の面 d3square x, y, z d3square x, y, s color ,,255 ;箱の面 d3square z, x, y d3square s, x, y color ,,255 ;箱の面 d3square y, z, x d3square y, s, x ab = 50 bb = 50 cb = 50 xa = -50 xb = -50 xc = -50 color ; 線の色 d3box xa, xb, xc, ab, bb, cb return


ありがとうございます。解決しました。



ONION software Copyright 1997-2021(c) All rights reserved.