|
|
2017/4/10(Mon) 16:50:22|NO.79061
この記事は投稿者により削除されました。
2017/4/11(Tue) 08:03:41
|
|
2017/4/10(Mon) 19:42:57|NO.79062
//幾何学模様を表示するサンプル
sdim buf,8
lpoke buf,0,$BD89F48A
lpoke buf,4,$CD96778A
lpoke buf,8,$6C97
mes buf
|
|
2017/4/10(Mon) 20:57:07|NO.79064
「幾何学模様」とやらがよくわからないですが、「幾何学模様」でGoogle画像検索して最初に出てくるような、
白と黒の四角や円を組み合わせたような模様でしょうか?
裏画面に、黒地に白で図形を描き、それを表画面にxorコピーするというやり方でやってみます。
以下の例では「円を何重にも重ねた」模様を描いていますが、「ここからは描画例」と「ここまで描画例」の
間をいじれば、他の模様もいけると思います。
(VRAMを1バイトずつxorする方法でやっていますが、もっといい方法があるかもしれません)
#const wid 600 //画面の横幅
#const hei 600 //画面の縦幅
//ここから前準備
vram_size=( ((wid*3)+3)&0xfffffffc ) * hei //vramのサイズ
screen 0,wid,hei,0
buffer 1,wid,hei,0 //裏画面
gsel 0
color 0,0,0 : boxf
mref vram0,66 //メイン画面のvramにアクセスできるようにする
gsel 1
mref vram1,66 //裏画面のvramにアクセスできるようにする
gsel 0
//ここまで前準備
//ここからは描画例
#define circle2f(%1,%2,%3) circle (%1)-(%3),(%2)-(%3),(%1)+(%3),(%2)+(%3),1
//(%1,%2)を中心に半径%3の塗りつぶした円を描くマクロ
cent_x=int(wid/2) : cent_y=int(hei/2)
r=double(wid/2)
c_num=30
randomize
redraw 0
repeat c_num
gsel 1 //裏画面に描画する
color 0,0,0 : boxf //裏画面を真っ黒にクリア
color 255,255,255
//color rnd(256),rnd(256),rnd(256) //これのコメントアウトを外すとカラフルに
x=int(r*cos(deg2rad(360/c_num*cnt)))+cent_x
y=int(r*sin(deg2rad(360/c_num*cnt)))+cent_y
circle2f x,y,int(r)
gosub *xor_copy //裏画面に描画したらこれを呼ぶ
loop
gsel 0
redraw 1
//ここまで描画例
stop
*xor_copy
//裏画面の内容をメイン画面にxorコピー
repeat vram_size
poke vram0,cnt,peek(vram0,cnt)^peek(vram1,cnt)
loop
return
| |
|
2017/4/10(Mon) 21:01:24|NO.79065
おっと、これだとc_numに半端な数値を取ったときに描画が変になる。
x=int(r*cos(deg2rad(360/c_num*cnt)))+cent_x
y=int(r*sin(deg2rad(360/c_num*cnt)))+cent_y
の部分を
x=int(r*cos(deg2rad(360.0/c_num*cnt)))+cent_x
y=int(r*sin(deg2rad(360.0/c_num*cnt)))+cent_y
に置き換えてください。
|
|
2017/4/11(Tue) 05:34:23|NO.79076
>無名s>それじゃないです。
幾何学的模様には様々な種類がありますので。
Google画像検索等でヒットしたアドレスを掲載したほうがいいかと思われます。
|
|
2017/4/11(Tue) 09:27:55|NO.79078
うわ、削除かよ( ;´Д`)
ここは「HSPで幾何学模様を描く方法を教えてください」というスレでした。
|
|
2017/4/11(Tue) 09:35:10|NO.79079
ただ、単に幾何学模様と言っている所を見ると、
幾何学模様についてよくわかっていなかったんですかね?
それとも、様々な幾何学模様を書くスクリプトを沢山提示してもらって
ゲームとかの背景に使う的な。
まあ、投稿者削除されたスレなのでそんなことを論じる必要もありませんけれど。
|
|
2017/4/17(Mon) 15:40:39|NO.79132
削除されたスレですが、gdi32のBitBltなる命令を使えばVRAM弄らなくてもxorコピーできると知ったので、
備忘録的に修正。
(参考) http://hsp.tv/play/pforum.php?mode=pastwch&num=13849
#const wid 600 //画面の横幅
#const hei 600 //画面の縦幅
#include "gdi32.as"
#const SRCINVERT $00660046
//ここから前準備
screen 0,wid,hei,0
buffer 1,wid,hei,0 //裏画面
gsel 0
color 0,0,0 : boxf
hdc0=hdc
gsel 1
hdc1=hdc
gsel 0
//ここまで前準備
//ここからは描画例
#define circle2f(%1,%2,%3) circle (%1)-(%3),(%2)-(%3),(%1)+(%3),(%2)+(%3),1
//(%1,%2)を中心に半径%3の塗りつぶした円を描くマクロ
cent_x=int(wid/2) : cent_y=int(hei/2)
r=double(wid/2)
c_num=33
randomize
redraw 0
repeat c_num
gsel 1 //裏画面に描画する
color 0,0,0 : boxf //裏画面を真っ黒にクリア
color 255,255,255
//color rnd(256),rnd(256),rnd(256) //これのコメントアウトを外すとカラフルに
x=int(r*cos(deg2rad(360.0/c_num*cnt)))+cent_x
y=int(r*sin(deg2rad(360.0/c_num*cnt)))+cent_y
circle2f x,y,int(r)
gosub *xor_copy //裏画面に描画したらこれを呼ぶ
loop
gsel 0
redraw 1
//ここまで描画例
stop
*xor_copy
//裏画面の内容をメイン画面にxorコピー
BitBlt hdc0,0,0,wid,hei,hdc1,0,0,SRCINVERT
return
|
|
2017/4/20(Thu) 21:56:52|NO.79163
付け忘れには気付いてましたけど、まさか突っ込まれるとは。
全く同じコード投稿するのは気がひけますが。
#const wid 600 //画面の横幅
#const hei 600 //画面の縦幅
#include "gdi32.as"
#const SRCINVERT $00660046
//ここから前準備
screen 0,wid,hei,0
buffer 1,wid,hei,0 //裏画面
gsel 0
color 0,0,0 : boxf
hdc0=hdc
gsel 1
hdc1=hdc
gsel 0
//ここまで前準備
//ここからは描画例
#define circle2f(%1,%2,%3) circle (%1)-(%3),(%2)-(%3),(%1)+(%3),(%2)+(%3),1
//(%1,%2)を中心に半径%3の塗りつぶした円を描くマクロ
cent_x=int(wid/2) : cent_y=int(hei/2)
r=double(wid/2)
c_num=33
randomize
redraw 0
repeat c_num
gsel 1 //裏画面に描画する
color 0,0,0 : boxf //裏画面を真っ黒にクリア
color 255,255,255
//color rnd(256),rnd(256),rnd(256) //これのコメントアウトを外すとカラフルに
x=int(r*cos(deg2rad(360.0/c_num*cnt)))+cent_x
y=int(r*sin(deg2rad(360.0/c_num*cnt)))+cent_y
circle2f x,y,int(r)
gosub *xor_copy //裏画面に描画したらこれを呼ぶ
loop
gsel 0
redraw 1
//ここまで描画例
stop
*xor_copy
//裏画面の内容をメイン画面にxorコピー
BitBlt hdc0,0,0,wid,hei,hdc1,0,0,SRCINVERT
return
|
|