|
![](../images/spacer.gif) |
|
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
これを実行すると出てくる立方体の中を塗りつぶしたいです。
わかる方いましたらおしえてください!
![](../images/bbs/mark_main.gif)
| |
|
2019/11/4(Mon) 11:55:18|NO.88801
一度に立方体を塗りつぶす命令は無いので
3Dの面を塗りつぶす d3square って命令を使って
6面を塗りつぶす。
|
|
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
にすればいいと思います。
|
|
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
ありがとうございます。解決しました。
![](../images/bbs/mark_main_g.gif)
| |
|