HSP3で日本語プログラミング

GOTO文

mes "スタート"

goto *あそこ

*ここ
	mes "ここ"

*あそこ
	mes "あそこ"

mes "ゴール"

stop

モジュール

#runtime "hsp3cl"

#module hoge dummy
#modinit
return
    #modfunc local foo
        mes "hoge"
    return
#global

#module huga dummy
#modinit
return
    #modfunc local foo
        mes "huga"
    return
#global
newmod hogex, hoge
newmod hugay, huga
foo@hoge hogex
foo@huga hugay
;https://qiita.com/YSRKEN/items/bbd3cad4cc1c1de9dcbb
#module ライト dummy
#modinit
	mes "ライトを作りました。"
	return
#modfunc 点ける
	mes "ライトを点けました。"
	return
#global

newmod ライト1,ライト
点ける ライト1

stop

モジュール HGIMG4 モデル登録

#module 盆踊りキャラ id, px,py,pz
#modinit str path, double x, double y, double z
	px = x : py = y : pz = z
	gpload id, path		; モデル読み込み
	setpos id, px,py,pz		; カメラ位置を設定
	mes "盆踊りキャラを作りました。"
	return
#modfunc local 置きなおす double x, double y, double z
	setpos id, x,y,z		; カメラ位置を設定
	mes "置きなおしました。"
	return
#modfunc local 踊る
	gpaddanim id,"ondo",0,-1		; "run"クリップを設定
	gpact id,"ondo"			; "run"クリップを再生
	mes "踊ります。"
	return
#modfunc local 当たり判定をつける
	gppbind id, 0
	mes "当たり判定をつけました。"
	return
#global
;newmod v, 盆踊りキャラ, "res/model", 0.0, 0.0, 0.0
;踊る@盆踊りキャラ 盆踊りキャラ1
#module オブジェクト id, px,py,pz
#modinit str path, double x, double y, double z
	px = x : py = y : pz = z
	gpload id, path		; モデル読み込み
	setpos id, px,py,pz		; オブジェクト位置を設定
	mes "オブジェクトを作りました。"
	return
#modfunc local 置きなおす double x, double y, double z
	setpos id, x,y,z		; オブジェクト位置を設定
	mes "置きなおしました。"
	return
#modfunc local 大きさを変える double x, double y, double z
	setscale id, x,y,z		; オブジェクト向きを設定
	mes "大きさを変えました。"
	return
#modfunc local 向きを変える double x, double y, double z
	setang id, x,y,z		; オブジェクト向きを設定
	mes "向きを変えました。"
	return
#modfunc local 当たり判定をつける
	gppbind id, 0
	mes "当たり判定をつけました。"
	return
#global
;newmod v, オブジェクト, "res/model", 0.0, 0.0, 0.0
;向きを変える@オブジェクト 太鼓外側(0), 0.0, 0.7, 0.0
;当たり判定をつける@オブジェクト 太鼓外側(0)

※2021年10月18日現在?ライトは#moduleすると光らない?

blender2.92でリンクされた&マテリアルのついたオブジェクトのテクスチャをベイクで作る

リンクがある.blendで一枚絵のテクスチャを作るのに必要なこと

・ベイクする
 - ベイクしたいモデルのObject Data PropertyウィンドウでUV Mapsを追加してSmart UV Projectしておく。
 - リンクされたオブジェクトもベイクするにはオブジェクトを選択してMake Local(またはF3キーのMenu SearchでMake Local >ALLを選ぶ)して、.blendをまたがないようにする。
 - ベイクされた結果を書き込む新規画像を、テクスチャを貼りたいオブジェクトのシェーダーノードでテクスチャノードを作っておく(テクスチャノードでNew Imageする)
 - ベイク前にテクスチャを貼りたいオブジェクトを3D Viewで選択しておいて、シェーダーノードでベイクされた結果を書き込みたいテクスチャノードを選んだ状態にしておく。
 - ベイクはCyclesを使ってする。プロパティウィンドウでCyclesにしておいて、そこの下にあるBakeボタンを押す

HSP3でライトをおく

#include "hgimg4.as"

	gpreset

	setcls CLSMODE_SOLID, $404040

	;ライト初期化
	gpresetlight 0, 10, 0
	setcolor GPOBJ_LIGHT, 1,1,1		; ライトカラーを設定
	setdir GPOBJ_LIGHT, 0.0,0.0,0.0		; アンビエントカラーを設定

	;カメラ
	gpnull id_camera			; ヌルノードを生成する
	gpcamera id_camera, 45, 1.5, 0.5, 768	; カメラとして設定する
	gpusecamera id_camera			; 使用するカメラを選択する
	setpos id_camera, 0,4,20		; カメラ位置を設定する

	;ライトをおく; 先に地面をおくと地面が光らない
	gpnull id_alight
	gplight id_alight, GPOBJ_LGTOPT_POINT, 5
	gpuselight id_alight,0
	setcolor id_alight, 1,0.9,0.9		; ライトカラーを設定
	setpos id_alight, 0,1,0

	;箱
	gpbox id_box, 1
	setpos id_box, 0,0.5,0

	;地面
	gpfloor id_floor, 100,100, $884400		; 床ノードを追加

repeat
	stick key,15
	if key&128 : end ; ESCキーで終了

	redraw 0			; 描画開始

	gpdraw				; シーンの描画

	redraw 1			; 描画終了
	await 1000/60			; 待ち時間
loop

carrara6からエクスポートしたDirectXのモデル.xファイルをhsp3のhgimg3でアニメーション再生する。

carrara6でオプションはそのまま変えずにエクスポートして、DXライブラリ置き場で配られているDXライブラリのDxLibModelViewerで一度開いて保存し直してから、hgimg3で読み込んで再生するとアニメーションする。そのとき、アニメーション速度をmodelspeedで調整する。※値は「FPS÷モーションがある最後のフレームの秒数(かかってる秒数)」

MetasequoiaからBlenderにアニメなしテクスチャ付きモデルをインポート

Metasequoiaで面にテクスチャを張るとき、モデルを保存するフォルダにテクスチャファイルも入れておく(テクスチャファイルのファイルパスがファイル名だけになるようにする)。それを.daeで保存してBlenderにインポートするとテクスチャがシェーダーノードでテクスチャノードになって付いている。

blender script tips

blender script

bpy.context.scene.frame_current # いまのフレーム数
bpy.context.view_layer.objects.selected # いまの選択オブジェクト

import bpy
for key in bpy.__dict__.items():
  print(key)

コレクションのオブジェクトの名前を列挙
for obj in bpy.data.objects:
  print(obj.name)

オブジェクトのアトリビュートを列挙
dir(bpy.data.objects['Cube'])

オブジェクトのカスタムプロパティへのアクセス
bpy.data.objects['Cube']['prop']

bpy.data.objects['オブジェクト数:'].data.body = str(bpy.context.scene.frame_current)
"blender script tips" の続きを読む

windowsで仮想カメラを使ってデスクトップをストリーミング

Windows上でリモートX11アプリケーションを動かす+ffmpegでアプリケーションウィンドウキャプチャをする+コマンドプロンプトでパイプする+akvirtualcameraを使って仮想カメラを動かす+ffmpegの出力ストリーミングをakvirtualcameraにつなぐ。

akvirtualcameraをインストール。ffmpegをインストール。

akvirtualcameraとffmpegにパスを通す。

コマンドプロンプトを管理者で実行で開いて、以下を実行。

AkVCamManager add-device "Virtual Camera"
AkVCamManager add-format AkVCamVideoDevice0 RGB24 640 480 30
AkVCamManager update

OBSなどで映像キャプチャのリストにVirtual Cameraが出てくれば仮想カメラの登録は成功。

※もし、Webカムがパソコンに付いていて、映像キャプチャのソースを選べないアプリケーションに仮想カメラの映像を映すのであれば、デバイスマネージャーでWebカムを無効化しておくことでVirtual Cameraがデフォルトになる。

アプリケーションウィンドウの映像をさっき作成した仮想カメラを通してストリーミングするには以下のコマンドを実行。ここではglxgearsの実行ウィンドウをキャプチャしている。

ffmpeg -f gdigrab -i title="glxgears" -pix_fmt rgb24 -f rawvideo - | AkVCamManager stream AkVCamVideoDevice0 RGB24 624 556

※624 556はffmpegが検出しているfps
※もしカクついているようであれば、"AkVCamManager stream"のあとに--fpsオプションをつけるとカクつきが直るかもしれない(fpsの数は例えば29.97)。
※macだとgdigrabはavfoundation参考ページ

Mac(BigSur)でブックに追加したPDFをiPhoneのブックで読む

  • Macの「設定」の「Apple ID」で「iCloud Drive」のブックにチェックを入れる。
  • iPhoneの「設定」の「ブック」で「同期」の「iCloud Drive」をオンにする。

MacのFinderのブックタブにpdfが出てこないのがわからない。