mieki256's diary



2024/01/23(火) [n年前の日記]

#1 [basic] FreeBASICでゲームのメインループ相当を書きたい

Windows10 x64 22H2 + FreeBASIC 1.10.1 で実験中。

FreeBASIC で、リアルタイムゲームのメインループっぽいものを書きたい。

リアルタイムゲームを作る場合は、例えば1秒間に60回ほど処理される無限ループのようなもの(メインループ)を書いて、その中に1フレーム分の処理を書いたりする。

そのためには、1ループにつき、1.0秒 / 60回 ≒ 0.016666666667 sec(秒) ≒ 16.67 msec(ミリ秒) ぐらいで処理してくれる作りにしないといけない。大体は、ゲームの内部処理のほうが早く処理を終えてしまうので、ループの最後のほうで 16.67 msec が経過するように時間待ちの処理を入れることになるのだけど…。

about_mainloop.png

こういった処理を書くためには、そのプログラミング言語に、以下の機能が必要になる。
ということで、FreeBASIC で経過時間を調べたり、時間待ちをする機能があるのかどうかを調べた。

時間の取得と時間待ち :

時間の取得には、Timer という関数が使える。

_Timer

特定の時間からの経過時間を秒(sec)で返す。小数点以下の値も返してくるので、ミリ秒(msec)やマイクロ秒も測定できる。もっとも、精度についてはどこまで正確なのか分からんけど…。

Windowsの場合はPCが起動してからの経過時間を返してくるようだけど、プラットフォームによっては真夜中からの時間を返してくるものもある、と書いてある…。前フレームの測定時間が、現在フレームの測定時間より過去にあるとは限らない、という前提で処理を書いておかないといかんのだろうな…。


時間待ちについては、Sleep という関数が使える。

_Sleep

ミリ秒(msec)単位で待ち時間を指定する模様。

ちなみに、値を指定しないで呼ぶと、キー入力があるまで待つ、という処理になるらしい。

ループを書いてみた :

そんなわけで、Timer と Sleep を使って、メインループっぽいものを書いてみた。1秒間ループさせてみて、何回処理が通ったかをカウントする。また、ループ1回あたりに何秒かかっているかを出力する。

_timer.bas
Dim As Double start_time, prev_time, now_time, diff_time
Dim As Integer frame_count

frame_count = 0
start_time = Timer
prev_time = start_time

' 1秒間ループする
Do
    now_time = Timer
    diff_time = now_time - prev_time
    prev_time = now_time
    Print "Diff: "; diff_time
    
    sleep 10.0
    frame_count += 1
Loop until (now_time - start_time) > 1.0

Print "frame_count=" & frame_count

Print "Push Any Key"

sleep

fbc timer.bas と打てば、timer.exe ができる。実行してみる。

> timer.exe
Diff:  1.00000761449337e-007
Diff:  0.01270929999918735
...
Diff:  0.01561659999970289
Diff:  0.01563919999898644
frame_count=62
Push Any Key

一見それらしく動いてるようだけど、実はおかしい。ループの最後で Sleep を使って、問答無用で 10.0ミリ秒時間待ちせよ、と書いているのだから、1秒間処理させたらフレームカウントは100前後になるはずでは…?

このあたり、各OSのタイマー精度が関係してる。Windows10 の場合、15msec程度の精度しかないらしい。 *1 だから、Slepp 10.0 を指定しても、15msec ぐらい Sleep していて、こういう結果になる模様。これがLinuxなら1msecの精度があるらしいのだけど…。

_Timer (Win32 and Win64) - freebasic.net
_Speed - freebasic.net
_Constant Framerate - freebasic.net

※ 2024/01/24追記。Ubuntu Linux 20.04 LTS上で上記のサンプルを動かしてみたところ、フレームカウントが 96 になった。100前後の値が出ているので、Sleep はちゃんとミリ秒単位で動いてくれている模様。

改良版のループを書いてみた :

前述の問題の解決策として、一時的にタイマー精度を1msecに細かくしてしまうことができるらしい。マルチメディア関係の機能を使うのだとか。この時点で Windows に特化したプログラムになってしまうけど、背に腹は代えられない…。
  • timeBeginPeriod(1) ... タイマー精度を1msecに向上させる
  • timeEndPeriod(1) ... タイマー精度を本来のスペックに戻す。

FreeBASIC で上記の機能を使うためには、以下のヘッダーファイルを include しておく必要がある。
#include "windows.bi"
#include "win/mmsystem.bi"

また、必要な処理が終わったら、元の精度に戻しておかないといけない。この点はちょっと忘れがちなので注意。

そんなわけで、手直ししたのが以下。

_timer2.bas
' mmsystem(マルチメディア関連ライブラリ)を利用して、
' Windows上のタイマー精度を一時的に 1msec に向上させる。
' 処理が終わったら本来のタイマー精度に戻すこと。

' mmsystemを利用
#include "windows.bi"
#include "win/mmsystem.bi"

Dim As Double start_time, prev_time, now_time, diff_time, one_frame
Dim frame_count As Integer 

' タイマー精度を1msecに向上
timeBeginPeriod(1)

' 1フレームあたりの本来の時間
one_frame = 1.0 / 60.0

frame_count = 0
start_time = Timer
prev_time = start_time

' 1秒間ループさせる
Do
    now_time = Timer
    diff_time = now_time - prev_time
    prev_time = now_time
    Print "Diff: "; diff_time

    If Timer < (now_time + one_frame) Then
        ' 本来のフレーム時間がまだ経過してないので sleep させる
        sleep ((now_time + one_frame) - Timer) * 1000.0
    End If
    frame_count += 1
Loop until (now_time - start_time) >= 1.0

' タイマー精度を本来のスペックに戻す
timeEndPeriod(1)

Print "frame_count=" & frame_count

Print "Push Any Key"

sleep

fbc timer2.bas と打てば、timer2.exe が生成される。実行してみる。

> timer2.exe
Diff:  1.00000761449337e-007
Diff:  0.01655399999981455
Diff:  0.01653780000015104
...
Diff:  0.01651980000133335
Diff:  0.01651969999875291
Diff:  0.01650789999985136
Diff:  0.01652210000065679
frame_count=62
Push Any Key

16msec前後でループが回っているように見える。これでどうにかなりそう。

ゲームのメインループっぽい処理を書いてみる :

画像を何かしら描画して、ゲームのメインループっぽい感じに見える処理を書いてみる。

png画像の読み込みには FBImage というライブラリを使った。導入の仕方は、昨日の日記にメモしてある。

_FreeBASICで画像描画 - mieki256's diary

さておき、サンプルソースは以下。

_mainloop.bas
' mmsystemを利用
#include "windows.bi"
#include "win/mmsystem.bi"

' fbgfxモードを使う
#Include "fbgfx.bi"
Using fb

' 画像読み込み用ライブラリ FBImage を使う
#include once "FBImage.bi"

' 円周率を定義
Const PI As Double = 3.1415926535897932

Dim As Double start_time, prev_time, now_time, diff_time, one_frame
Dim As Integer frame_count
Dim As String fps_text = "FPS"
Dim As Integer scrw, scrh, imgw, imgh

' カレントディレクトリを exeファイルのある場所にする
chdir exepath()

' ウインドウサイズと色深度を指定
scrw = 1280
scrh = 720
Screenres scrw, scrh, 32

' 画像読み込み
var img = LoadRGBAFile("image_circle_96x96.png")

' 画像の幅と高さを取得
imageinfo img, imgw, imgh

' タイマー精度を1msecに向上
timeBeginPeriod(1)

' 1フレームあたりの本来の時間
Dim As Double MAX_FPS = 60.0
one_frame = 1.0 / MAX_FPS

start_time = Timer
prev_time = start_time
frame_count = 0

Dim As Boolean running = True
Dim As Double angle = 0.0

' メインループ
While (running)

    ' 前回のフレームから何秒経過しているのかを取得。単位は秒(小数点以下有り)
    now_time = Timer
    If now_time >= prev_time Then
        diff_time = now_time - prev_time
    Else
        diff_time = one_frame
    End If
    prev_time = now_time

    If now_time >= start_time Then
        If (now_time - start_time) >= 1.0 Then
            ' FPSを取得
            fps_text = "FPS: " & frame_count
            start_time += 1.0
            frame_count = 0
        End If
    Else
        start_time = now_time
    End If

    If inkey() <> "" Then
        ' 何かのキーが押されたのでループ終了
        running = False
    End If

    angle += (1.0 * MAX_FPS) * diff_time

    ' 描画開始
    ScreenLock

    ' 画面クリア
    color RGB(255, 255, 255), RGB(30, 60, 120)
    cls

    ' 画像群を描画
    Dim As Integer x, y
    For i As Integer = 0 To 48
        Dim As Double ang = (angle + (i * 5.0)) * PI / 180.0
        x = (scrh * 0.4) * Cos(ang) + (scrw / 2) - (imgw / 2)
        y = (scrh * 0.4) * sin(ang) + (scrh / 2) - (imgh / 2)

        Put (x, y), img, TRANS  ' 画像を描画
    Next i

    ' 文字列を描画
    Draw String (10, 10), fps_text

    ' 描画終了
    ScreenUnlock

    If Timer < (now_time + one_frame) Then
        ' 本来のフレーム時間がまだ経過してないので sleep させる
        sleep ((now_time + one_frame) - Timer) * 1000.0
    End If

    frame_count += 1
Wend

' タイマー精度を本来のスペックに戻す
timeEndPeriod(1)

' 画像を使い終わったので破棄
ImageDestroy img

' 最後まで処理が来たのか確認するためにメッセージボックスを表示してみる
' MB_TOPMOST Or MB_SETFOREGROUND を指定しないと、メインウインドウの後ろに隠れてしまう
' MessageBox(NULL, "Cleanup", "Message", MB_OK Or MB_TOPMOST Or MB_SETFOREGROUND)

使用画像ファイルは以下。

_image_circle_96x96.png

fbc mainloop.bas と打てば、mainloop.exe が生成される。実行結果は以下。




一応、60FPS前後で動いてくれた。なんだか動きがガクガクしているような気もするけれど…。でもまあ、一応それっぽい処理を書けそうではあるかな…。

ダブルバッファについて :

ウインドウ内に色々描画する際にチラついたら嫌なのでダブルバッファ処理をしてみたいと思ったのだけど。ググってみたら FreeBASIC は、 fbgfx なるソレを使っている場合、デフォルトでダブルバッファに対応しているそうで。

描画開始時に ScreenLock を呼んで、描画終了時に ScreenUnlock を呼べば、ダブルバッファになってくれるよ、という話を目にした。

_Double Buffered window? - freebasic.net
_Double buffer for grpahics. - freebasic.net

ちなみに、OpenGL で描画してる場合は、flip を呼ぶことでダブルバッファの切り替えになるらしい。

ウインドウの閉じるボタンを押したらどうなるのか :

ところで、このプログラムは、何かのキーを押したら終了するように作ってあるのだけど。ウインドウの右上の閉じるボタンを押したときは、プログラムの最後のあたりの終了処理を ―― 画像を破棄したり、タイマー精度を元に戻したりするあたりを通ってくれるのだろうか、という不安が湧いてきた。

ググったところ、FreeBASIC においては、ウインドウの閉じるボタンを押した際、特定のキー入力として入ってくるようになっているらしい。

_The close button in windowed-mode - freebasic.net
_Windows 10 Window Close - freebasic.net
_Close window - freebasic.net

chr(255) & "k"、もしくは、chr(255, 107)、あるいはもしかすると、chr(0) & "k" が Inkey() で検知された場合、それはウインドウの閉じるボタンが押された状態だよ、ということになっているそうで。

実際、前述プログラムの一番最後の行、MessageBox の行のコメントアウトを外して動作確認したところ、ウインドウの閉じるボタンを押した時も MessageBox が表示された。

メインループを抜ける条件の一つとして、件のキーが入ったかどうかをチェックするようにしておけば、問題は無さそうだなと…。

*1: Windows の種類・バージョンによって、精度は異なる。

2023/01/23(月) [n年前の日記]

#1 [pc] SSDを立てて固定したいのだけど

メインPCが時々BSOD(ブルースクリーン)になるのが気になる。たぶん使ってる2.5インチSSDが熱を持ってしまってファイルアクセスができなくなるとBSODになるのではないかと想像してるけど…。1つの3.5インチベイに2つのSSDを入れているから、排熱が全然できてない気がする…。

ケース前面の12cmファンのすぐ後ろにSSDを置くことができたら冷却できるのではないか。でも、そんなところに固定する方法が思いつかなくて…。12cmファンのすぐ後ろに3.5インチシャドウベイをずらりと並べるパーツがケースに付属してた気もするけれど、それを入れてしまうとビデオカードがぶつかってしまって装着できなくなるだろうし…。何かいい手はないものか…。

Googleで画像検索してアイデアを探してみたけれど、これといったものが見つからない…。

ケースの底面にマジックテープを貼って、マウンタの類を貼り付けてしまえば、取り外しができて良さそうかもしれない。PPシートでマウンタっぽいものを作れないものか…。

#2 [nitijyou] 冷凍庫を注文したらしい

妹が冷凍庫をヨドバシカメラで注文したらしい。とメモ。型番は聞いてないけど、たぶん Panasonic NR-FZ120D-SS ではなかろうか。容量が121Lだし。

ヨドバシ上では「お取り寄せ」になっていたけれど、妹の話では今週末ぐらいに届く予定らしい。

ちなみに、ヨドバシなら注文時にリサイクル回収も申し込めるようになってる。リサイクル料金が 3,740円、搬送費が550円。例えばこれがケーズデンキだと、収集・運搬料金が2,200円かかる。新品購入と同時に申し込む場合はこのコストで済むけれど、リサイクルだけを申し込む場合は出張費として3,300円以上が追加されるらしい。

2022/01/23() [n年前の日記]

#1 [nitijou] USBメモリについてググってる

某所で使ってるファイル群をバックアップする際にUSBメモリを使うことになるだろうけど、某所の方はUSBメモリを持ってないはずなので、そのあたりどうしようかなと。どこそこで売ってますよと伝えることになるだろうけど…。ケーズデンキやヤマダ電機で買えるけど、ちょっと距離的に遠いよな…。コンビニや100円ショップでは売ってないのかなと。

そんな流れでググっているところ。今時はコンビニでも売ってるらしいけど、店によっては置いてなかったりするらしい。価格は、一般的にはちょっと高めなのだろうか。

100円ショップで売っているUSBメモリも気になる。500円商品らしいけど、速度はどんな感じなのか…。

2021/01/23() [n年前の日記]

#1 [anime][neta] 7つの表情と0.2秒の本音とアニメ

思考メモというか妄想メモ。

NHK総合で放送されてる「チコちゃんに叱られる」という番組を眺めていたら、人間には「7つの表情」がある、という考え方だか捉え方だかそういう話が流れてて。「喜び」「怒り」「悲しみ」「驚き」「嫌悪」「軽蔑」「恐怖」がありますよ、とかなんとか。

「喜怒哀楽」という言葉はよく目にするわけだけど、それより3つ多いなと…。いや、よく見ると、その「7つの表情」とやらには「楽」が無いな…。

それはさておき。もしかすると、例えばCGアニメを作る際にも、事前にその7つの表情パターンを用意しておけば楽になるところもあるのかなーと思えてきたわけで。「EX-ARM」だって、そういう表情パターンを用意しておいてカット毎に変えていけば、かなり印象が変わったのではないかと…。

いや。これはCGアニメに限った話では無さそうだな…。手描きアニメだって、キャラデザ表を作る際に、最低限いくらなんでもせめて7つの表情パターンは描いておかねばならない、みたいなルールを決めて作業しておけば楽になりそうな予感。

まあ、100年以上もアニメを作り続けてきた日本のアニメ業界のことだから、「7つじゃ全然足りねえ。それじゃ話にならねえな」「実際は○○種類の表情パターンをキャラデザ表に描いておくのが当たり前」みたいなことを言われてしまいそう。延々アニメを作ってきた業界なのだから、経験則(?)でそういうノウハウを持ってなきゃおかしいよな…。

それとは別に。「チコちゃん」内では、人間は0.2〜0.5秒ほど本音の感情が、うっかり反射的に表情に出てしまう、という話も流れてて。あくまでそういう説がありますよ、程度の話だろうとは思うけど。

それがもし本当なら、映像作品でも使えそうなテクニックかもしれないなと思えてきたりもして。アニメキャラが0.2〜0.5秒ほど ―― 1秒間24コマ・3コマベースで動かしてるなら、動画を2〜4枚 = 6〜12コマ分 = 0.25〜0.5秒ほどの一瞬の表情を挿入しておくことで、現実の人間のような複雑な表情の変化を見る側に感じさせることができる、かもしれないと。

まあ、それぞれ、諸説あります系の話だろうから、どこまで本当なのかは分からんけれど…。映像作品内でも応用できそうな話ではあるなー、と思った次第です。

既に使われてるのではないかとググってみたり。 :

このあたり、テクニックとして紹介されてたりしないのかなとググってみたら、やはりフツーにノウハウとして存在してるっぽい感じで。

_ディズニーで学んだ映画制作&キャラクターモデリングとは?「糸数弘樹ハリウッド式CGモデリングセミナー」レポート | 特集 | CGWORLD.jp

上記ページではCGアニメの制作について語ってるけど、喜怒哀楽+「恐れ」「嫌気」の6種類を上げていた。更に、50種類の顔の筋肉で制御されてる、というところまで意識してディズニー(ピクサー?)はCGアニメを作ってますよ、と…。

_感情の数だけ表情がある!作例と図解で豊かな表情をマスターしよう | イラスト・マンガ描き方ナビ
_プルチックの感情の輪|人間の感情は色で分類すると関連性がわかる? - Web活用術。

上記ページでも6種類の表情がある、と書いてある。更に、「信頼」「期待」を追加して、度合いまで考えて図にする考え方もあるようで。

何にせよ、その手の説をアニメや漫画に取り込もうと試みる事例はフツーにあるのだなと。当たり前か。歴史があるもんな…。

手描きアニメのキャラデザの表情パターンについても何か文章化されたものがあるのかなとググってみたけど、それについては見つからなかった。もしかすると、スタジオやアニメーターにとっての門外不出の秘伝だったりするのだろうか…? 師匠から教えてもらってない or 盗めていないアニメーターは、ずっと使い物にならないキャラデザ表を描き続けているのだろうか…。でもまあ、上手い原画マンが居てくれたらアドリブで描いてくれて結局なんとかなっちゃいそう。いや、でも、上手い原画マンが居なかったら、どうなるんだ…?

コンテでも使えるのだろうか。 :

コンテを描くときも、こういうソレは使えたりするのだろうか。マルチョンであっても、6種類だか7種類だかの表情パターンのうちのコレですよ、程度でも後工程に伝えることができれば、見ていて飽きない映像になるのかもしれない。みたいな。

まあ、本来、コンテというものはカットの繋がりを設計するもので、表情まで指定するのはコンテを逸脱してるのかもしれないけど、昨今はきっちり描いてあるコンテが喜ばれると聞いた記憶もあるし…。

そのカット内の表情を決めるのは、本来は誰の役目なんだろう。大昔は原画マンがその役をしていて、だからこそ、アニメーターは役者でもあるし演出家でもある、みたいなことを言われていたわけだけど…。今はちょっと違うのかもしれないなと想像したりもして。海外にカット単位で原画を発注したら、コンテを見て表情を決めるとかできないよな。コンテに書かれた日本語の台詞も読めないだろうし、どういうシーンか分からないまま描いてたりして。いや、わかんないけど。知らんけど。

2020/01/23(木) [n年前の日記]

#1 [cg_tools] ボールが弾むだけの簡単な2Dアニメをいくつかのツールで作ってみた

ボールが弾むだけの簡単な2Dアニメを ―― 要するにカットアウトアニメ(切り絵アニメ)の類を、AviUtl、NiVE2、DragonBones を使って作れそうか試してみた。環境は Windows10 x64 1909。

ここ数日、作業してみて思ったのだけど。ボールが弾むだけのアニメを作ると、以下のことが分かるなと。


なので、最初にコレを作ってみるのは結構いいのかもしれないなと思えてきたというか。

何でもそうだけど、新しい道具を入手したら、まずはいつものコレをやってみる・作ってみる、てのはアリと言うか…。日頃からお題を決めておくと、そのへん楽になるよね。みたいな。

AviUtlを使用。 :

AviUtl 1.10 + 拡張編集プラグインを使って作業してみた。

_AviUtlのお部屋



AviUtl は動画編集ソフトだけど、拡張編集プラグインを追加することで、モーショングラフィックス(?)っぽい動画を作ることもできる。

とりあえず、画像を読み込んで、キーフレーム相当を指定して、キーフレーム間を補間で動かす、ということはフツーにできるなと…。

ただ、ボールの上昇、下降で、オブジェクト(クリップ?)を分割して作業しないといけないあたりでハマった。1つのオブジェクトに対して加減速運動を指定した際、前半は減速、後半は加速、という動きは指定できなくて、最初から終わりまで減速のみ、あるいは加速のみ、という指定になってしまうので…。ボールが一番上まで移動したあたりでオブジェクトを分割して作業しないと、期待した動きを作れない。

また、標準の加減速運動は、動き方がちょっとアレで…。ユーザさんが作ったスクリプトを ―― 加減速TRA(トラックバー変化方法スクリプト)を追加させてもらって、そちらを指定した場合はそれらしく動いた。

_【AviUtl】イージング(加減速)まとめ:さつきのブロマガ - ブロマガ

それと、作業中にループ再生させる方法が分からなくて、ちょっと作業効率が…。何か解決方法がありそうな気もするのだけど。

NiVE2を使用。 :

NiVE2 (NicoVisualEffects2) 2.14 を使用。

_NiVE2 Wiki - NiVE2 Wiki



補間で動かすだけなら、それらしくできた。しかし、加減速のさせ方が分からない…。そんなこと、できるのかな。

※ 2020/01/24追記。エクスプレッションとやらを使えば加減速運動もつけられるらしい。

DragonBonesを使用。 :

DragonBones 5.6 を使用。

_DragonBones Offical Website



DragonBones は、本来はスプライトエディタとして分類されるのかもしれないけれど。新規プロジェクト作成時に「MovieClip」を選べば、画像の位置・大きさ・角度をキーフレームで指定して、補間で動かせるモードになる。もちろん、ボーンを仕込んで動かすやり方で作業しちゃってもいいと思うけど。

ただ、MovieClip 作成モード時は、ソフトの本体側にプレビュー再生機能が見当たらず。一応、ツールバー上の Preview アイコンをクリックすると、Webブラウザが起動して、そちらでプレビュー再生されるけど…。まあ、タイムライン上で現在フレームを変更すれば、位置その他の確認はできるので、さほど困らないかもしれない。

また、MovieClip は、24FPSで固定されているように見えた。タイムラインの一番下の「Event」を選べば、プロパティウインドウにFPS値が表示されるのだけど、変更方法が分からない…。

#2 [cg_tools][neta] アニメ制作ソフトについてなんとなく思ってることをメモ

思考メモ。

昨日、blender 2.81a を使って、ボールが弾むだけの2Dアニメを作ってみたのだけれど。

考えてみたら、画像の位置・大きさ・角度を変えてキーフレームを打って、補間でアニメを作れて、しかも無料で使える系のツール・アプリって、それほど思いつかないなと…。

もちろん、 _OpenToonz_Synfig Studio_AnimeEffects 等が思い浮かんだりもするのだけど。機能豊富な分、操作はちと複雑な印象もあって。例えば、子供さんがちょっと試しに、というノリで使えるだろうかと想像すると…。

ということで、そういうことができるツールって他に何があったかな、そういえば AviUtl 等はどうだろう、簡単に作業できたりするのかな、と気になり始めて、試してみた次第で…。

これが、1コマずつ手で描いていく系のツールなら色々思いつくのだけど…。 _Krita_GIMP_Pencil2D_FireAlpaca_AzDrawing2_EasyToon 等々。先日試用した _Clipnote Studio もそうだし。

でも、せっかくコンピュータを使ってアニメを作るなら、補間機能が欲しいよなと…。

有償ソフトなら、いくつか思いつくのだけど。 _Adobe Animate (旧称 Adobe Flash)_Moho_OPTPiX SpriteStudio 等々。 _Adobe After Effects も該当するのかな…。

ただ、そういったソフトは、子供さんがお小遣いで買えるお値段ではないわけで。そもそも、最初は何ができるのかも分からないだろうから購入意欲も湧くはずないし。

まずは、ちょっとぐらい低機能だとしても、無料で気軽に使えるツールを触ってみて、「一枚絵を動かすのって楽しいな」と感じてもらって…。その体験をキッカケにして本格的にやりたくなった人は、有償ソフトを購入して作業効率改善と高機能を得てその道に、という流れが妥当では、と。

だから、例えば、「カットアウトアニメ、楽しいよ」「みんなもやってみようよ」と宣伝(?)するには、まずは気軽に試せるツールがあるかどうかが大事だろうなと。未体験の人に、いきなり、「毎月 Adobe にお布施を払って After Effects を使え。覚悟を決めろ」とか言えないし…。 *1 入口のハードルは、低ければ低いほど良いのだろうなあ。みたいな。

てなわけで、アニメ制作だの、ゲーム制作だの、DTMだの、何でもそうなんだけど、お試し感覚で触れて、楽しさをなんとなく体験できるツールって一体何があるのだろう、どのへんが入門ソフトとしてオススメできるのかな ―― てなあたりを自分はずっと気にしているのでした。

もっとも、アニメに関しては、今なら、まずは blender で、というのは全然アリかもしれない…。

blenderなら、3Dアニメも作れるから、そっち方向で目覚める人だって居るかもしれないし…。3次元的にカメラをグリグリ動かせるあたりも、セル+フィルム時代のPANとズームしか思いつきません的感覚から脱する機会にもなりそうな。UIも劇的に変わって、以前と比べたら分かり易くなったし。絵描きさんなら、グリースペンシルでガリガリ描いて動かす使い方もできるし。自分は使い方を把握できてないけれど、 _AEっぽい使い方もできる とも聞くし。チュートリアル動画もたくさんあるから、ゆっくりじっくりと、投げ出さずに真似すれば、ほぼ間違いなく、「ぼくにもできた!」と思ってもらえるだろうし。

改めて列挙してみると、blenderってスゴイな…。現状では、これほどまでに入門向けとしてバッチリなソフトは無いような気がしてきた。まあ、だからこそ、解説記事・動画が結構な勢いで増えているのだろうけど。
*1: もちろん、相手がプロ or プロ志望なら、最終的には使うことになるのだろうし、だったら最初から使ってみるのが近道なのだろうけど。

2019/01/23(水) [n年前の日記]

#1 [cg_tools] 2D CADをいくつか試用

自分は普段、2D CAD として AR_CAD を使わせてもらっているのだけど。他のフリーの 2D CAD って、使い勝手等はどうなんだろうと気になってきたので、いくつか試用してみたり。環境は Windows10 x64。

LilliCad :

_LilliCad

Windowsアプリの標準的なUIスタイルで作ってあるので、操作が分かりやすかった。Windows95時代から作られてたソフトのせいか、ファイルサイズが圧倒的に小さい。それでいて、機能がかなり実装されてるように見えた。

マウスホイール操作で拡大縮小ができなかったり、中ボタンドラッグでPANができなかったりするあたりはアレだけど。前者は、Office製品と同様、Ctrl+ホイール操作で拡大縮小できるし、後者は、Windowsアプリでは一般的ではないので、実装されてるほうが珍しいし。そんな感じで、Windowsアプリに慣れた人なら、選択肢としてはヨサゲ、かもしれない。

SakraCad :

_SakraCad

LilliCad の作者さんが作ったCAD。まだテストバージョンとの記述があったけど、LilliCad並みに機能は実装済みのように見えた。全体図を常時サムネイルでプレビュー表示できたり、ツールバーが整理整頓されている等、LilliCad より使いやすくなっている印象。

PC定規5フリーウェア :

_(株)オー・エム・エス PC定規5

少し触った感じでは、Jw_cad のUIをアイコン表示にして、CAD初心者でも分かりやすいUIにしてあるように見えた。もっとも、レイヤー情報の表示等は、Jw_cad のソレを踏襲していたり等、今時の一般的なCGソフトとはちょっと乖離した見た目なので、Jw_cad よりは全然分かりやすいけど、今時のCGソフトに慣れているとビミョーにほんのちょっとだけ分かりづらい、そんな印象も受けたりもして。

全体的な感想。 :

どれも 2D CAD としての基本的な機能は実装されてるように見えた。後は、見た目の分かりやすさ等で選べば良さそうな気もしたり。

と思ったけれど。どんな DXF が出力されるか、他で作った DXF を読み込めるか等の確認はしてないので、そのあたり、罠に遭遇する可能性もあるかもしれず…。

他の2D CADも一応メモ。 :


2018/01/23(火) [n年前の日記]

#1 [cg_tools] Pencil2D 0.6を試用

手描きアニメが作成できるフリーソフト、Pencil2D の現行安定版が 0.6 になってることに今頃気づいて。インストールして試用してみたり。環境は Windows10 x64。

_Pencil2D Animation
_Pencil2D - Download

pencil2d-win64-0.6.0-ffmpeg341.zip をDLして解凍。任意のフォルダに置いて、Pencil2D.exe を実行すれば起動する。

昔試用した時は、結構不安定で参ってしまった記憶があるけれど、以前と比べたらかなり安定してるように感じた。サクサクと手描きでアニメを作れるあたりはイイ感じ。

ただ、ビットマップレイヤー上では作業ができるけど、ベクターレイヤー上ではほとんど作業ができない。ちゃんとその場に描けているのにキャンバス上に表示されなかったり、消しゴムツールを使うとかなりとんでもないことになったりで。公式サイトの紹介文には、「ベクターレイヤー機能は…まだ全然未実装ッス…」と書いてあった。

試しにちょこちょこ作業して、動画(mp4)でエクスポートしてみたり。



動画エクスポート時に圧縮率等を指定できないのが気になる…。おそらくは ffmpeg のデフォルト値そのまま、なのかな。分からんけど。

ちなみに、開発版の pencil2d-win64-2018-01-17.zip も試用してみたけど、そちらもベクターレイヤーについては鋭意開発中状態だった。

気が付いた点をメモ。 :

起動直後はメニュー等が英語表示だけど、日本語表示にもできる。Edit → Preferences を選んで、Language で Japanese を選んで、再起動すればいい。

pencil2d_ss01.png

pencil2d_ss02.png

ただ、日本語表示にすると、一部の項目がちょっとおかしくなるようで。気づいた範囲では、鉛筆ツールやペンツールの補間の強さが、妙な文字列になっていた。

pencil2d_ss03.png

pencil2d_ss04.png

「No」「Simple」「Strong」が、「No」「軽」「使用しない」になってる…。まあ、この補間機能は、ベクターレイヤー上でしか働かないみたいなので、ビットマップレイヤー上で作業する分には関係ないっぽいけど。

キャンバスサイズの変更方法が分からなくて悩んだけど、どうやらカメラレイヤーで設定するらしい。カメラレイヤーのアイコンをダブルクリックすると、キャンバスサイズ(フレームサイズ)の変更ダイアログが開く。

pencil2d_ss05.png

アニメ制作ソフトなら実装されてないと結構困る、オニオンスキン機能(前後のフレームをうっすらと表示してくれる。要はトレスボックスみたいなもの)もちゃんとついていた。表示オプションウインドウのアイコンをクリックして有効無効を切り替えたり、タイムラインウインドウ上の「オニオンスキンモード」と書いてあるところのアイコンを何度かクリックすれば、オニオンスキンで表示されるフレームが切り替わる。

pencil2d_ss06.png

他には…。
  • キーフレームはドラッグして位置を変えられる。
  • タイムラインウインドウ上のループボタンをクリックして有効に、かつ、「範囲」にチェックを入れれば、指定したフレーム間をループ再生できる。
  • 鉛筆ツールはアンチエイリアスがかかってしまう。
  • アンチエイリアスがかかった線を塗り分け線にして、バケツツールで色を塗ると、境界がぼそぼそした見た目になる。
  • ペンツール、ブラシツールは、アンチエイリアスを無効にできる。
  • アンチエイリアスを無効にした線+バケツツールを使えば奇麗に塗れる。その代わり、ジャギだらけ。
2値化で仕上げられた連番画像にアンチエイリアスをかけられるツールがあればいいのだろうけど…。その手のツールってAfterEffectsのプラグインばかりだし…。

#2 [cg_tools][opentoonz] OpenToonz 1.2.0をインストール

手元の環境にインストールしてあった アニメ制作ソフト OpenToonz を、1.1.2 から 1.2.0 にアップデートしてみた。

久々に少し触ってみたけど、Pencil2D と違ってベクターでの描画もちゃんとしっかり実装されてるし、こっちを使ったほうがいいのかもしれない…。もっとも、OpenToonz は機能が豊富過ぎというかUIがアレだから、使い方がさっぱり分からんのがちょっとアレだけど…。まあ、気軽に遊びたいなら、機能が少なくい分悩まずに済む Pencil2D を使ってガリガリ描くのもアリ、みたいな印象も。

使い方を忘れていたので、昔の日記を眺めながら少し試用。

_mieki256's diary - OpenToonzを試用してみたり
_mieki256's diary - OpenToonzをまだ試用中
_mieki256's diary - OpenToonzでエフェクト(フィルタ)をかける手順をメモ
_mieki256's diary - OpenToonzをまだ触っていたり
_mieki256's diary - OpenToonzで色塗りする時の塗り分け線で悩んだり
_mieki256's diary - OpenToonzを少し触ってたり

チュートリアル系のメモは書き残しておくものだなと…。

1.2.0の更新内容。 :

1.2.0 の更新内容を眺めたけど、なんだかスゴイ…。

_OpenToonz v1.2 をリリースしました - Google グループ
新機能

・ 横方向にフレームが進み縦方向にセルを重ねる「タイムライン表示」。
・ オープンソースのペイントツール「MyPaint」の機能が盛り込まれ、ラスターレベル上で水彩や鉛筆などの多彩なブラシが使用できるようになりました。
・ ベクターブラシに「スナップ:他の線や頂点に端点の位置を合わせる」「フレーム範囲:2つの描線をフレーム間で自動中割りする」オプション。
・ ベクターブラシで自動中割りを行うための描き順のガイド表示。
・ コマンドを自由にカスタマイズできる「コマンドバー」ウィンドウ。
・ リップシンクソフト「Papagayo」などで作成したリップシンクデータを用いて口パクのシート打ちを自動で行う機能。

OpenToonz v1.2 をリリースしました - Google グループ より

有償ソフトどころか、無料で利用できるアニメ制作ソフトですら、自動で口パクのタイミング合わせができるとは…。もう演出家さんが紙のタイムシート相手に口パクのタイミングを修正する光景は過去のものに…なってないとおかしいなあ。

Papagyaoって何だろう。 :

リップシンクができるソフト・ツールらしいけど…。

_Papagayo (software) - Wikipedia
_Papagayo
_LostMoho/Papagayo: Lipsync tool for animators
_あにくりPro サウンド | Anime Creator 公式サイト
_Pro: サウンドと効果 | イーフロンティア
_水星工房 - ツール&Tips

GPLソフトらしい。元々は、Moho用に作られたけど、blender や Synfig Studio でも使える、と書いてあるな…。

MyPaintブラシの使い方。 :

MyPaintのブラシはどう操作したら使えるようになるのだろう。ググってみたら以下の記事が。

_【OpenToonz】横方向タイムラインと多彩なカスタムブラシ : あいるクリエイト
_OpenToonz with MyPaint brushes available for download - Morevna Project
_MyPaint brushes in OpenToonz - YouTube

レベルを新規作成(タイムシート上で右クリック → 新規レベル、または Alt + N)する際に、Raster level を選ばないと使えないらしい。かつ、スタイルエディタで、「ラスター」タブを選んで、一覧の中からブラシを選ぶ、と。

なんだか Krita っぽいな…。いや、Krita が MyPaint を参考にして作られてるから、似てくるのも当たり前だろうけど。少なくとも、OpenToonz だけで、Krita や MyPaint並みにアナログ感のある素材が描けそうな予感。もっとも、Krita もアニメ制作機能があるからアレだけど。

#3 [cg_tools] Synfig Studio 1.2.1 をインストール

Synfig Studio を、1.0.2 から 1.2.1 にアップデート。

相変わらず使い方が分からない…。OpenToonzでいいんじゃないかな…。

2017/01/23(月) [n年前の日記]

#1 [zatta] NEOGEOのスペックについて少し調べてたり

昔のSTGについて調べているうちにNEOGEO向けのタイトルに辿り着いて、NEOGEOのスペックが気になり始めたり。何色ぐらい出せるハードウェアだったのだろう。

調べてみたら、各スプライトは16色まで利用可能で。そのあたりは当時よく見かけるスペック、ではあるけれど。それより気になったのがBG関連のスペック。

NEOGEOって、BGが無いに等しいハードウェアだったのか…。BGは1枚あるけどスクロールはできなくて、スプライトを横にびっしり並べることでスクロール可能なBGっぽく見せていたらしい…。そのせいかスプライトの最大サイズが16x512と縦長で。32x32や64x64にできなかったのか…。

となるとスプライトの最大表示枚数はかなり多くないといけないはず。であれば、スプライトをフレームバッファに描くタイプかな、かと思いきや、ラインバッファで表示していたから表示枚数の制限があって、BG相当を表示しているだけでもスプライトとして使える枚数が減ってしまうという。

そんな変態仕様で、アレだけのタイトルを出してたのか…。NEOGEO向けタイトルを作ってた方々は凄いなあ…。

VRAMの量もそれほど多くなかったようで…。その代わりROMからの転送速度は爆速で、格ゲーなんかはROM内のキャラパターンを次から次へとVRAMに転送して表示してたっぽい。キャラパターンを圧縮なんかしてたら解凍処理で時間がかかってしまうから、きっとベタでROM内に入れておいてガンガン転送、だったのだろう。実にアーケードゲームっぽい豪快な発想。湯水のようにROM容量を使う…。

転送速度だけはしっかり用意してどうにかするあたりは、なんとなくPS1を思い出したりもして。アレも、VRAM内のメモリ転送だけは爆速にしてポリゴンをガンガン描く、という設計思想だったような。もしかするとNEOGEOは、もうちょっとでPS1と似た仕組みに辿り着いていたかもしれないハードウェア、だったのだろうか。

まあ、スプライトをたくさん並べたらBGに見えるやん、てのはよくある発想、なのだろうか。結局、どのハードウェアもそういう設計になったし。なんにせよ、今頃になって色々と感心。NEOGEOって恐ろしいな…。

2017/01/25追記。 :

_NEOGEO、誕生から20周年 | スラド を眺めてたら、転送処理も一筋縄では行かなかったらしい…。縦スクロールゲームでは縦長スプライトは使い物にならない、というのも、たしかに…。いやはや、大変だ…。

2016/01/23() [n年前の日記]

#1 [nitijyou] 犬小屋に少し手を入れた

真夜中に犬が悲鳴のような鳴き声を上げて、その後もワンワンと吠えてうるさくて。鳴くのは何か理由があるのだろうけど…。もしかして、寒さが厳し過ぎて、なのだろうか。

てなわけで、午前中に犬小屋を少し改良。になってるかどうかはわからんけど。風が吹き込まないように、100円ショップで買ったアルミシートっぽい何かを2枚、犬小屋を巻いてとりあえず養生テープで止めていって。これで西風に対しては多少効果が期待できる…はず…。

一応、犬小屋の中に毛布やバスタオルっぽいものは入れてあるのだけど。犬が必ず犬小屋の外に押し出してしまうわけで…。毛布等をチェックしたら、どうも犬の血が付いている。これはもしかすると、毛布等に凶悪なダニがついてて、血を吸いまくって、それで犬が嫌がって外に出してしまう、ということなのだろうか。だとしたら、犬小屋にこの毛布等を入れておくわけにはいかないな…。代わりに、ダンボールを何枚か犬小屋の床に敷いてみたり。直接板張りの上に居るよりはマシだろう…。

さすがにダンボールではアレなので、夕方頃、近所のseriaに行って、ジョイントマットの類を購入。アルミシートが貼ってあるモノを2枚、コルクが貼ってあるモノを2枚、プラス、滑り止めの網っぽい何か。アルミシートのマットの上にコルクマットを両面テープで貼り付けて、一番下には滑り止めの網っぽいソレを両面テープで仮止めして、30cm x 60cm の敷物っぽい形にして。薄いとは言え、四層構造、2cm近い厚みになってるから、ちょっとは違うだろう…。手で触ってる分にはなんだかちょっと暖かさが違う、ような気はするのだけど、実際はどうかなあ…。

犬小屋の床の大きさを測ってみたら、40cm x 60cm だった。ジョイントマットを敷き詰めるとしたら、あと2枚 x 2種類を買ってきて、切り刻まないとダメだな…。

2015/01/23(金) [n年前の日記]

#1 [nitijyou] 某所に行ってきた

たしかAM09:10-09:40の間、お邪魔してきた。ちゃんと時間をチェックしてなかったから怪しいけど。詳細はGRPでメモ。

Windows8.1機のセットアップ作業をしてほしいとの要望も。明日の午後、またお邪魔するという話に。

帰りに買い物。 :

ケーズデンキで、LR44電池、プリンタインク、USB接続無線LAN子機を購入。

ホームセンターのほうが電池は安いのかなと思ってたけど、ケーズデンキのほうが安いのだな…。知らなかった。

#2 [pc] USB接続の無線LAN子機を購入

手持ちのネットブック、Lenovo IdeaPad S10-2 の本体内蔵無線LANが遅くて遅くて。IEEE 802.11b/g にしか対応してないので仕方ないのだけど、我慢できなくなったので、USB接続無線LAN子機を購入。 _ELECOM WDC-300SU2SWH 。ケーズデンキで税別1,980円。IEEE802.11b/g/n に対応。11n対応品には150Mbps対応と300Mbps対応の品があるけれど、これは300Mbpsまで対応。

ドライバCD-ROMはついてなくて、ELECOMのサイトで入手する。故に別途ネット接続できる環境が必要。そういう環境を持ってない人のために、連絡してもらえればドライバ入りCDも売りますよ、と同梱の説明書には書いてあった。

帰宅してから気がついた。IdeaPad S10-2 は元々 Windows XPが入ってたけど、今は Ubuntu Linux機(Xubuntu) にしてしまっているから、Linux対応の無線LAN子機じゃないと使えない。そして、この無線LAN子機は、Linux用ドライバが見当たらない。何やってんだ自分。失敗した。うっかりして使えない周辺機器を買ってしまった…。

調べてみたら、親父さん用PCで使ってる無線LAN子機、 _BUFFALO WLI-UC-GNM なら、Ubuntu 14.04LTS でスンナリ使えるらしい。 *1

なので、親父さんに頼んで無線LAN子機を交換してもらうことに。今回買った WDC-300SU2S は 300Mbps対応で、今まで使ってた WLI-UC-GNM は 150Mbps対応だから、親父さん用PCはスペックアップになるし、自分は Ubuntu で使える機器が入手できるしで、怪我の功名。

親父さんPC上で作業。
  1. WDC-300SU2SWH用のドライバと、WLI-UC-GNMセットアップ用ファイルをDL。
  2. WLI-UC-GNM関連のソフトとドライバをアンインストール。セットアッププログラムを実行して、ソフトをアンインストール後、ドライバをアンインストール。
  3. WLI-UC-GNM を取り外し。
  4. WDC-300SU2SWH を接続しない状態で、WDC-300SU2SWH用ドライバをインストール。
  5. WDC-300SU2SWH を接続。ドライバがインストール済みなので、認識される。
  6. 無線LANルータと接続するように設定。ウチの場合はMACアドレスで接続機器をフィルタリングしてるので、WDC-300SU2SWHのMACアドレスをメモしてルータ側に登録。その後、WDC-300SU2SWH の設定プログラムで、プロファイルを登録。
これで使えるようになった。一応300Mbpsで接続されてるっぽい。あくまで理論値で、実際にはそんな速度は出ないだろうけど。そもそもプロバイダが遅いし。

IdeaPad S10-2 (Ubuntu機)で作業。
  1. Ubuntu を起動。
  2. WLI-UC-GNM をUSB端子に差す。LEDがチカチカと光る。
  3. ターミナル上で lsusb を入力。USB接続されてる機器の一覧が表示される。WLI-UC-GNM の名前が出てくれば認識されてる。
  4. Xubuntu を使ってるので、デスクトップの上の方の無線LANのアイコンを右クリックして色々設定。
おそらく使えるようになったと思うけど、本体内蔵の無線LANを無効にする方法が全然分かってないので、これから調べないと…。

さておき、ググってたら Windows用のドライバを Linux 上でも使えるようにするツールっぽいものが存在するようで。

_Ubuntu入門 -素人による素人のためのサイト-
_古いnotePCでubuntu 無線LAN
_思い立ったら弄る! : ubuntuで認識してくれないUSB無線LANアダプタをWindows用ドライバを用いて使用する方法 (GUIのみで設定) - livedoor Blog(ブログ)

ndiswrapper(Windows Wireless Drivers) なるものらしい。ただ、 CardBus が云々と書いてあるので、USB接続機器にまで使えるかどうかは分からなかった。
*1: 昔の Ubuntu ではハマることもあったらしい。

2014/01/23(木) [n年前の日記]

#1 [dxruby] 砲台はなんとかなってきた

とりあえず、砲台を動かすために書いた処理を、別ファイルにまとめたり。

_gamemath.rb
# ゲーム関係の計算用メソッド
#
# ruby gamemath.rb 1 といった指定で、テスト種類を変えられる

require 'dxruby'

# 計算用メソッド
class GameMath

  class << self

    #
    # 度からラジアンへの変換
    #
    # @param [float] deg 角度。単位は度
    # @retrun [float] 角度。単位はラジアン
    #
    def deg2rad(deg)
      return (deg * Math::PI / 180.0)
    end

    #
    # ラジアンから度への変換
    #
    # @param [float] rad 角度。単位はラジアン
    # @retrun [float] 角度。単位は度
    #
    def rad2deg(rad)
      return (rad * 180.0 / Math::PI)
    end

    #
    # 基準座標から目標座標への角度を返す
    #
    # @param [int] tgt_x 目標座標x
    # @param [int] tgt_y 目標座標y
    # @param [int] base_x 基準座標x
    # @param [int] base_y 基準座標y
    # @return [float] 目標座標までの角度。単位はラジアン
    #
    def get_dir_rad(tgt_x, tgt_y, base_x, base_y)
      tx = tgt_x - base_x
      ty = tgt_y - base_y
      return Math.atan2(ty, tx)
    end

    #
    # 角度をn方向に制限して返す
    #
    # @param [float] ang 元の角度
    # @param [float] rest 何方向にするか。デフォルトは16
    # @return [float] rest方向に制限した角度
    #
    def get_dir_rest(ang, rest=16)
      d = 360.0 / rest
      dir = ((ang + (d / 2)) % 360.0).div(d)
      return dir * d
    end

    #
    # 角度と速度(距離)からx,y方向の移動量を求める(度を与える版)
    #
    # @param [float] ang 角度。単位は度
    # @param [float] spd 速度(距離)
    # @param [float] bx  原点となる座標x。省略時は0
    # @param [float] by  原点となる座標y。省略時は0
    # @return [Array] 移動量x,y
    #
    def get_vec(ang, spd, bx=0, by=0)
      return GameMath.get_vec_rad(GameMath.deg2rad(ang), spd, bx, by)
    end

    #
    # 角度と速度(距離)からx,y方向の移動量を求める(ラジアンを与える版)
    #
    # @param [float] ang 角度。単位はラジアン
    # @param [float] spd 速度(距離)
    # @param [float] bx  原点となる座標x。省略時は0
    # @param [float] by  原点となる座標y。省略時は0
    # @return [Array] 移動量x,y
    #
    def get_vec_rad(rad, spd, bx=0, by=0)
      x = spd * Math.cos(rad) + bx
      y = spd * Math.sin(rad) + by
      return x, y
    end

    #
    # 外積を返す
    #
    # @param [int] tgt_x 目標ベクトルx
    # @param [int] tgt_y 目標ベクトルy
    # @param [int] base_x 基準ベクトルx
    # @param [int] base_y 基準ベクトルy
    # @return [float] 外積。
    #                 外積 > 0 なら、目標は右にあり、
    #                 外積 < 0 なら、目標は左にある
    #                 外積 = 0 なら、同じ方向
    #
    def get_cross_product(tgt_x, tgt_y, base_x, base_y)
      return base_x * tgt_y - base_y * tgt_x
    end

    #
    # 徐々に目標方向を向く角度を求める
    #
    # @param [float] ang 現在の角度。単位は度
    # @param [float] ang_spd 角度変化量。単位は度
    # @param [float] tgt_x 目標座標x
    # @param [float] tgt_y 目標座標y
    # @param [float] base_x 基準座標x
    # @param [float] base_y 基準座標y
    # @return [float] 新しい角度。単位は度
    #
    def get_chase_angle(ang, ang_spd, tgt_x, tgt_y, base_x, base_y)
      ang %= 360
      tgt_ang = GameMath.rad2deg(GameMath.get_dir_rad(tgt_x, tgt_y, base_x, base_y))
      tgt_ang %= 360
      d = tgt_ang - ang
      d += 360 if d < -180
      d -= 360 if d > 180
      if d > ang_spd
        ang += ang_spd
      elsif d < -ang_spd
        ang -= ang_spd
      else
        ang = tgt_ang
      end
      return ang
    end

    #
    # 指定範囲に収まった角度を返す
    #
    # @param [float] now_ang 現在の角度。単位は度
    # @param [float] base_ang 基準角度。単位は度
    # @param [float] min_d 角度範囲の最小値算出用。基準角度に加算する値
    # @param [float] max_d 角度範囲の最大値算出用。基準角度に加算する値
    # @return [float] 範囲に収まった角度。単位は度
    #
    def get_dir_range(now_ang, base_ang, min_d, max_d)
      base_ang %= 360
      now_ang %= 360

      # 現在角度が、基準角度の正反対の角度を超える角度だったら補正する
      if now_ang > base_ang + 180
        now_ang -= 360
      elsif now_ang <= base_ang - 180
        now_ang += 360
      end

      min_ang = base_ang + min_d
      max_ang = base_ang + max_d
      now_ang = min_ang if now_ang < min_ang
      now_ang = max_ang if now_ang > max_ang
      return now_ang
    end

    #
    # 2点の座標間の距離が指定距離より小さいかを返す
    #
    # @param [int] tx 目標座標x
    # @param [int] ty 目標座標y
    # @param [int] bx 基準座標x
    # @param [int] by 基準座標y
    # @param [int] dist 判定距離
    # @return {Boolean] trueなら、判定距離内に入ってる。falseなら、判定距離外
    #
    def check_dist(tx, ty, bx, by, dist)
      w = tx - bx
      h = ty - by
      return (w * w + h * h <= dist * dist)? true : false
    end

  end
end

if $0 == __FILE__
  # 動作確認

  # 動作種類を変える
  if ARGV.length >= 1
    test_kind = ARGV[0].to_i
  else
    test_kind = 0
  end

  font = Font.new(16)
  fh = 20

  bx = 320
  by = 240
  ang = 0
  base_ang = 0

  Window.loop do
    break if Input.keyPush?(K_ESCAPE)
    px, py = Input.mousePosX, Input.mousePosY

    case test_kind
    when 0
      # 方向(角度)に制限を加えるテスト
      # n方向に制限する

      n = 12
      rad = GameMath.get_dir_rad(px, py, bx, by) # 本来の角度
      new_deg = GameMath.get_dir_rest(GameMath.rad2deg(rad), n) # 制限した角度

      # 描画
      d = 360 / n
      s = d / 2
      n.times do |i|
        nx, ny = GameMath.get_vec(s + d * i, 80, bx, by)
        Window.drawLine(bx, by, nx, ny, C_RED)
      end

      nx, ny = GameMath.get_vec(GameMath.rad2deg(rad), 200, bx, by)
      Window.drawLine(bx, by, nx, ny, C_CYAN)

      rad = GameMath.deg2rad(new_deg)
      nx, ny = GameMath.get_vec(GameMath.rad2deg(rad), 150, bx, by)
      Window.drawLine(bx, by, nx, ny, C_YELLOW)

      Window.drawFont(0, 0, "#{n}方向にする制限を加える例", font)

    when 1
      # 外積を使って目標を追尾するように角度を変えるテスト
      # プルプル震えてしまう

      ang_spd = 3

      # 目標ベクトル
      tx = px - bx
      ty = py - by

      # 基準ベクトル
      vx = Math.cos(GameMath.deg2rad(ang))
      vy = Math.sin(GameMath.deg2rad(ang))

      # 外積を求める
      cp = GameMath.get_cross_product(tx, ty, vx, vy)

      # 外積の符号を見て、目標が右にあるか左にあるか判別
      ang += ang_spd if cp > 0
      ang -= ang_spd if cp < 0
      ang %= 360

      # 描画
      nx, ny = GameMath.get_vec(ang, 200, bx, by)
      Window.drawLine(bx, by, nx, ny, C_CYAN)

      Window.drawFont(0, 0, "外積の符号で追尾する例", font)

    when 2
      # 目標への角度を求めて、追尾するように角度を変えるテスト

      ang = GameMath.get_chase_angle(ang, 2, px, py, bx, by)

      # 描画
      nx, ny = GameMath.get_vec(ang, 200, bx, by)
      Window.drawLine(bx, by, nx, ny, C_CYAN)

      Window.drawFont(0, 0, "角度を見て追尾する例", font)

    when 3
      # 角度に制限を加える例

      base_ang += Input.x * 2 # 基準角度を左右キーで変更

      rad = GameMath.get_dir_rad(px, py, bx, by) # 本来の角度
      ang = GameMath.rad2deg(rad)

      # 基準角度からプラスマイナス aw の範囲に角度を制限する
      aw = 90
      ang = GameMath.get_dir_range(ang, base_ang, -aw, aw)

      # 描画
      nx, ny = GameMath.get_vec(base_ang, 250, bx, by)
      Window.drawLine(bx, by, nx, ny, C_RED)
      nx, ny = GameMath.get_vec(base_ang - aw, 150, bx, by)
      Window.drawLine(bx, by, nx, ny, C_YELLOW)
      nx, ny = GameMath.get_vec(base_ang + aw, 150, bx, by)
      Window.drawLine(bx, by, nx, ny, C_YELLOW)

      nx, ny = GameMath.get_vec(ang, 200, bx, by)
      Window.drawLine(bx, by, nx, ny, C_CYAN)

      Window.drawFont(0, 0, "角度に制限を加える例 : 左右キーで角度変更", font)
    end
  end
end
各スクリプトに直接書いてしまってもいいぐらいのソレばかりですが…。

単体でも動くけど、他のファイルから呼んで使うこともできるはず。Public Domain ってことで。

ruby gamemath.rb 0 とか ruby gamemath.rb 3 とか打てば、下のような画面が出るので、マウスカーソルを動かして動作確認できるかと。0〜3 まで指定可能。

動作確認その1

動作確認その2

動作確認その3

動作確認その4

以下のページが参考になりました。ありがたや。

_[ Azure Contrail ] アズールコントレイル - Tips
_Flashゲーム講座&ASサンプル集【狙撃の計算方法について】

ちなみに。DXRuby開発版なら、外積とか内積とかそのへん求めるメソッドもあるのですが…。開発版は、常時最新版しか公開されてなくて、入手にちょっと難があるので、そのあたり、DXRuby 1.4.1 に取り込まれることを期待。

DXRubyの便利なところ。 :

ここ数日、DXRubyを触っていて「便利だなー」と思った点が。メインループが数行で済む点は、ありがたい。おかげで、各ファイルの動作テストが書きやすいなと。

フツー、スクロールゲーム用のアレコレを書く場合は…。
  1. ゲーム本体のプログラムを動かして、
  2. 目的の場所までスクロールさせて、
  3. そこで出てくる敵その他の動きを確認して、
  4. 敵のプログラムを調整して、
みたいな流れになるのですが。

DXRubyなら、敵のプログラムが書いてあるスクリプトファイルに、ちょこっと動作確認用のメインループを書いちゃえば、そのスクリプトだけで動きの確認がそこそこできるわけで。

特に Ruby の場合、以下のような書き方が可能で。
if $0 == __FILE__

  # このスクリプトを単体で動かした時だけ、この部分を通る

end
まあ、Python なども、同じことができますけど…。何にせよ、この部分に動作確認用のソレを書いとけば、そのスクリプトファイルをそっくりそのまま、本体プログラム側で使うこともできてしまう。

ということで、Ruby + DXRuby は、プロトタイプ作成に便利だなと再認識。

2013/01/23(水) [n年前の日記]

#1 [zatta] Rubyスクリプトでエラーが出る

incompatible character encodings がどうとか。今までフツーに動いてたスクリプトなんだけどな…。

スクリプト中で puts "日本語文字列" としてた部分を、全部英数字に置き換えて誤魔化すことに。本当はどういう記述をすべきなんだろう。

2012/01/23(月) [n年前の日記]

#1 [nitijyou] また地震

夜9:00ちょっと前頃に、前触れもなくいきなりドドドと来た。震源地は、福島県浜通りに近い福島県沖。中通りは震度4〜3。

#2 [ruby] Rubyでcairoなるものを使おうとしたが上手く行かず

ストップウォッチの時計盤?のような画像を描きたいわけだけど、今時手作業で描いていくなんて冗談じゃない、みたいな。最初のうちは DXRubyで描こうとしてみたけれど、線がギザギザして見れたものではなく。どうせならアンチエイリアスのかかった線を引いて画像を作成したい。

検索してみたら、rcairoなるものがあると知る。Ruby と cairo を繋ぐものらしい。

Windows7 x64 + Ruby 1.8.7 p330 [i386-mswin32] 上で、
gem install cairo
としてみたが、エラーが出た。
gem install cairo --platform x86-mswin32
をしてみてもダメ。

諦めた。別の何かを探すことにする。

…後になってどうにかなった。それについては後述する。

#3 [pc] gnuplotなるものを試してみたり

rcairo が導入できなかったので、別の何かを探す。

gnuplot なるツールがグラフを描くなら定番らしい。 _gnuplot download から辿って、gp444win32.zip をDL、解凍。binary/wgnuplot.exe を実行。

文字が出ない。ウインドウ内で右クリックしてフォントを選択。右クリックして Update 〜wgnuplot.ini を選択。

plot sin(x) を打ったらsinカーブが描かれた。面白いな…。

軸や目盛や凡例?ラベル?を消したい。
set border 0
unset xtics
unset ytics
unset key
で消せるらしい。上から順に、軸線をどれも描かない、x方向、y方向、凡例を描かない、ということだと思う。昔は set noxtics と書いたらしいけど、今は unset xtics と書くことが推奨されてる模様。

描画ウインドウの周りに隙間が出来るが、ソレを無くしたい。
set lmargin 0
set rmargin 0
set tmargin 0
set bmargin 0

円を描く時は。
set parametric
set size square
plot cos(t),sin(t),0.9*cos(t),0.9*sin(t),0.8*cos(t),0.8*sin(t)
直交座標モード?に設定、縦横比を正方形?に、3つの円を描画、らしい。

ここまでやってはみたけれど。これは何か違うだろうという気がしてきた。グラフを描くならたしかに使えそうだけど…。

#4 [python] Python + PyCairo を試してみたり

Gimp-Pythonを使えるようにする際に、PyCairoなるモジュールをインストールしていたことを思い出した。もしかしてソレを使えば、アンチエイリアスがかかった図形がプログラムで描けるかもしれない。

PyScripter をまだインストールしてないことに気付いた。 _pyscripter から、PyScripter-v2.4.3-Setup.exe をDLしてインストール。自分の環境では Python 2.6.6 が標準で動いているので、PyScripter for Python 2.6 を起動。

ソースコードをUTF-8で書きたいので、編集 → ファイルフォーマット → UTF-8 (No BOM)に。

PyCairo でどうにか描いてみた。一応動いてくれたっぽい。

それはそれとして、PyScripter が使いづらい。PyCairo についてはコード補完してくれないようだが…どうすればいいのだ。

#5 [ruby] rcairoがどうにかなった

Rubyがmswin32版だろうとmingw32版だろうと、mingw32版のrcairoをインストールすればよかったらしい。 _Japanese user list of the Ruby programming language () の中で、「拡張ライブラリは mingw32のバイナリでも問題はない」と書かれていた。

参考ページ。
_[ruby-list:47400] [ANN] rcairo 1.10.0
_脱カルマ研究 : gemが上手く動かない件

Windows7 x64 + Ruby 1.8.7 p330 [i386-mswin32] 上で、
gem install cairo --platform x86-mingw32
と打ってみた。今度はエラーが出ずに入ってくれた。
C:\Users\hoge>gem list

*** LOCAL GEMS ***

bluefeather (0.40)
cairo (1.10.2 x86-mingw32)
columnize (0.3.4)
linecache (0.43 mswin32)
pkg-config (1.1.2)
rbx-require-relative (0.0.5)
ruby-debug (0.10.3)
ruby-debug-base (0.10.3 mswin32)
ruby-debug-ide (0.4.6)
リストにも出てきた。

_Rubyist Magazine - cairo: 2 次元画像描画ライブラリ を参考にサンプルをコピペして動かそうとしたところ、エラーが出た。RubyGems でインストールしたので、スクリプトの最初のほうで、
require 'rubygems'
が必要だったらしい。

サンプルを眺めていたら Ruby-GNOME2 なるものも使っていた。ついでに入れてみた。
gem install gtk2 --platform x86-mingw32
サンプルを動かしてみたが、 Ruby 1.8.7 mswin32 上ではエラーダイアログが表示された。
ruby.exe - エントリポイントが見つかりません

プロシージャエントリポイント deflateSetHeader がダイナミックリンクライブラリ zlib1.dll から見つかりませんでした。
なるメッセージ。Ruby 1.9.2 mingw32 版で gem install したら動いたのだが…。1.8.7 mswin32 ではダメなのか?

_zlib.dllのダウンロード - RubyGemsのインストール - Railsインストール が気になった。 _zlib Home Site から zlib125-dll.zip をDLして、中に入っていた zlib1.dll を zlib.dll として ruby.exe の入っているフォルダにコピーしてみた。…元々 zlib1.dll が入っているようではある。元々あったソレは、zlib1.dll.old.org にリネームして残しておく。この作業をしたら、Ruby-GNOME2? gtk2? なるもののサンプルが動いた。何が何やら。

2011/01/23() [n年前の日記]

#1 [digital] 妹の手元にRD-X8が届いたらしい

弟が購入・使っていたRD-X8を、妹にプレゼントするという話があったのだけど。弟から妹のところに宅急便で送られてきたとの話で。とりあえずデジタル放送の受信はできたらしい。録画はまだ試してないらしいけど。

これで、デジタル放送未対応は自分の部屋だけに。

親父さんが、茶の間のREGZAで録画した番組をDVD等に焼きたがっているわけで。妹がRD-X8をウチのLANに接続すれば、REGZAからRD-X8に録画データをムーブして、そこからDVDに焼けるのだけど。妹は、そんな面倒くさいことしたくないとゴネている状態だったり。

となると、自分がDVD等に焼くための何かを導入するしか、という話になるのだけど。 つまり、選択肢は3つ。 実に悩む…。

それもこれも、東芝がバグだらけの製品を出すからこんなことに。ハードウェア設計に起因するバグなのか、ファームウェアのアップデートで解決するバグなのか、そこが全然見えないあたりも厳しい。ファームウェア更新でどうにかなりそうならアレなのだけど。ハードウェア設計に起因していた場合は、入手しても、この先どうしようもない。実際のところどうなのか。わからん。全然読めない。

2010/01/23() [n年前の日記]

#1 [pc] WD10EADSを外付けHDDケースに入れた

SATA接続HDD対応の、USB2.0接続外付けHDDケース、Corega CG-HDCU3000F に入れて、NTFSでフォーマット。念のためにクイックフォーマットではなく、全部フォーマットしてみることに。DLGDIAG5.exe でチェックはしてあるから、クイックフォーマットで充分では、という気もするのだけど、接続し直したことだし…。

既にある250GBの外付けHDDの中身を、CG-HDCU3000F + 1TB のHDDに、Fire File Copy でコピー。めちゃくちゃ時間がかかる。しかも途中でエラーが。元々CD-Rに入ってたファイルを、250GBのHDDにコピーした際に、壊れてしまったのだろうな。たぶん。

#2 [nitijyou] 自転車であちこちに

雷ガードを封筒に入れて、市内中央近くの郵便局本局まで自転車で行って送ってきた。ゆうゆう窓口ってなんだろうと思ったら、時間外窓口をリネームしたのだな。知らなかった。

もう少し先まで走って、銀行で通帳記入。

更に先まで走って、ダイユーエイト、ダイソー、ヤマダ電機を覗く。

ダイソーで、コードを巻くマジックテープのやつと、T731を梱包?するために120リットルのポリ袋(2枚入り)を入手。似たようなポリ袋をダイユーエイトで買うと10枚入り1,000円ぐらいになるけれど、10枚も要らないわけで。

ダイユーエイトで、398円のクッションを2つ入手。今使ってるクッションがもう黄色くなってきてしまっているわけで。<オイ。中がスポンジだから洗うに洗えないので、汚れたら捨てて新しいモノを買ったほうが、みたいな。…クッションカバーとかあればいいのだけど、えてしてピタリと入るものが無いし。

ヤマダ電機で、三菱化学ブランドのCD-RWやDVD-RWを探すも、見つからず。1GB程度の安いUSBメモリやmicroSDを探すも、これもお値段が高く。何も買わずに店を出た。

ケーズデンキにもよって、やはりCD-RWやDVD-RWを探すも、見つからず。しかし新自宅サーバの各種インストール作業をするには、CD-RなりDVD-Rなりが必要。ということで、邪魔になりがちなのであまり買いたくないのだけど、太陽誘電のCD-RとDVD-Rを購入。

家に着いたのは夜。

2009/01/23(金) [n年前の日記]

#1 [pc] 今のINtelliMouse Opticalはホイール回転時のガキガキ感を自分で調整できるのかと勘違い

調子の悪い Microsoft IntelliMouse Optical に腹を立て、どうせ壊れかけているならと、ホイールボタンを力一杯押し下げてみたり。 _マウスを分解してホイールを調節 というページを見て、この構造からするとひょっとして、と思ってやってみたのだけど。すると、ホイール回転時のガキガキ感が、モコモコ感になった。ホイール回転時にほとんど抵抗を感じない状態。なるほど。今のMSマウスは、各人が自分にとって使いやすい抵抗感に調整できるよう、若干の工夫をしてあったのか。どのくらい押し込むかで、部品の位置がずれこんで、ガキガキ→カチカチ→モコモコに調整できるのだろう。知らなかった。凄いぞ、MS。

と喜んでいたら、ホイールを回してる間に「カクン」と抵抗を感じて、元のガキガキ感に戻ってしまった。自分、完全にぬか喜び。

ユーザ自身が好きなように各種調整できるマウスを開発してくれないものか。 :

マウスホイール回転時の抵抗感を調整できるといえば、せいぜいロジクールのMX-R、VX-R等の製品ぐらい。それも、カチカチか、スルスルかの二択。つまりは、メーカが強制してくる使用感のどちらを選ぶかという話でしかない。メーカにとっては、平均的な使用感を提供してるつもりだろうが、平均はあくまで平均。そこにしておけば万人が満足するわけではなく。

100円ライターですら火力の調整はできるのに。何千円もする値段で、しかも100円ライターよりよほど長時間使い続けるマウスという入力機器が、ハードウェア的な調整を未だに何一つ受け付けない作りになっている現状に、若干奇妙なモノを感じる。メーカが、ユーザにとっての使いやすさをアレコレ想像して固定する必要など最初から無いのではないか。ネジを回したり、プラスチックのパーツを押し込んだりして、ユーザ自身に好きなように調整させてしまえばいいのではないか。光学センサだの、レーザー方式だの、2.4GHz帯だの、そんなことを追求する前に、せめて100円ライター程度の調整機能をつけて、「これなら絶対にお客様は気に入るはずです。何せ、お客様自身が、お客様のの気に入るように調整していただけばいいのですから」と売り込んだほうが、より優れたマウスの進化、だったりはしないだろうか。

まあ、下手に調整機能をつけると、やり過ぎて壊して文句を言ってくるユーザが出てきちゃって面倒なのかもしれないのだけど。とはいえ、ハードウェア的に調整できるか否かという点では、今のマウスは100円ライター以下の出来栄え、と言ってしまってもいいのではないか。あくまで、ハードウェア的に調整できるか否か、という点で見た場合の話に過ぎないけれど。

そのあたりを言い始めたら、ゲームパッドもそうだろうし、キーボードもそうだろうけど。

#2 [nitijyou] 歯医者に行ってきた

午前中雨が降ってたけど、午後から晴れたので、自転車で。

上の前歯が虫歯なので、それを治療しなきゃいけないのだけど。その前に歯石を全部取るとかで、あと3回ぐらい通うことになりそう。

診察が終わって帰ろうとしたら靴がない。受付の方に言ったところ、おそらく前の患者さんが間違えて履いて帰ってしまったのだろうと。残ってる靴を見る限り、たしかに靴の色は同じ茶色だけど…。残ってる靴は、踵を踏みつぶしてサンダル形状になってる汚いスニーカー。自分のスニーカーは、まだまともなスニーカーの形をしているわけで。何をどうしたら間違えることができるのか。いや、その患者さんはたぶんお爺さんで、ボケが始まってるのかもしれんからアレだけど。ひとまず、受付の方がその患者さん宅に電話で連絡を取ろうとしたが、まだ帰ってないと言う。スリッパを貸し出すからそれで帰りますかと問われたが、徒歩40分のところから自転車で来てるのに、病院内用のスリッパで帰るのは厳し過ぎる。仕方なく、前の患者さんが自宅に帰って連絡が取れるまで、待合室で時間を潰すことに。幸い、前の患者さんが自宅に帰ったようで、しばらくしたら40〜50歳ほどに見える男性が靴を届けに来た。待合室で見た顔ではないので、おそらく息子さんなのかしら。何にせよ、助かった。…って靴の紐がずいぶん緩んでるし。自分用に勝手に調整してんじゃねえよ。>ジジイ。いやまあ、あと20年もすれば、この地域も完全に爺さんだらけになるだろうから、この手のイベント?トラップ?なんてたいして珍しくない話になるんだろうな。

#3 [nitijyou] ヤマダ電機まで行って買い物

マウスを探しに行ったのだけど、店頭の値段を見たらAmazonで注文したほうが数千円安く。マウスは買わなかった。直に触ることができる展示品もなく、値段も高いのでは、店がそこにある意味がないような。まあ、お目当てのモノを当日その場で入手できるメリットはあるのか。…マウスという製品は、長時間ユーザの手に直接触れるモノだから、形状なりボタンの押し具合を触って確認できないのでは、製品選択にも躊躇する・その場で買う気がしなくなるわけで。本気で商売してないなと思えてしまうのは気のせいかしら。

ELECOM製ゲームパッド購入。 :

USB接続ゲームパッド ELECOM JC-U2410TWH が店頭にあったので購入。少し前に Logicool GPX-500 を購入してはいるのだけど。そちらはあくまでアナログ入力を使う際にマシとされるゲームパッドで、デジタル入力=十字ボタンの使い勝手は非常によろしくないわけで。なので今回、ネット上でほんの少し評価の高い ―― 980円程度で買えるわりにはマシという評を見かける ―― ELECOM のソレを選択。耐久性は無いらしいけど、自分の場合は年中使うものでもないので、なんとかなるかなと。

本当は、コンシューマゲーム機用のゲームパッド(PS1やPS2用)を、USB接続変換器を通して使ったほうが、操作性も耐久性も満足できるのだけど。自分の場合、サンワサプライ JY-PSUAD1 を持っているものの、コネクタ部分の精度が良くないのか、PS1パッドを差してもすぐ接触不良になって無反応になってしまうという。そういうトラブルに遭遇したもので、USB接続パッドでそこそこ使えるモノがあるならそっちを選んだほうがまだ楽かもしれないと。あくまで、そこそこ使えるモノがあれば、の話だけど。

2008/01/23(水) [n年前の日記]

#1 [zatta] ソースコードの断片を投稿する専用の掲示板ってないのだろうか

ネット検索してるうちに、某2chの某プログラム板を目にして、そんなことを。python のような、TAB・空白が重要な言語において見た目がずれるのはちょっとよろしくないのではみたいな。

_この掲示板にコードを書く際に、タブや空白が反映されないため読みにくくて困っています。 :

_タブ&スペースを我らの手に!!

大昔(?)の某2chで話されていた内容らしい。なるほど、荒らしへの対処を考えると面倒なのだな。

_Webで使えるスペース(空白文字)いろいろ - [ホームページ作成]All About :

1つだけ記述する場合、普通にスペース(空白文字)を打った場合と「 &nbsp; 」を使った場合とでは、表示のされ方は同じです。 空白量が同じですから。ただ、1点だけ異なる点があります。

HTMLでは、文章がウインドウの端やボックスの端に達すると、自動的に改行されますね。でも、英語の場合は、英単語の途中では改行されません。単語単位で改行されます。 単語の区切りとは「スペース(空白文字)」ですから、直前の空白文字の位置で改行されることになります。

ところが、「 &nbsp; 」は、(「nb」が「non-breaking」の略であることからも分かるとおり)この位置での自動改行はされません。空白量は通常のスペース(空白文字)と同じですが、表示領域の端に達したときの改行動作に違いがあります。

Webで使えるスペース(空白文字)いろいろ - [ホームページ作成]All About より


2007/01/23(火) [n年前の日記]

#1 [game] 一日中PS2で遊んでた気がする

4ステージ目まではクリアできたけど。5ステージ目で必ず全滅する。厳しい。

デモの間に、せめて武器選択ができると嬉しかったかもしれず。そのへん、前のシリーズでも同様だっただろうか。記憶がない。

2006/01/23(月) [n年前の日記]

#1 [pc] WinXPを親父さん旧PCにインストール

積んであった80GBのHDDは、親父さん自身が購入したHDD…だったような記憶もあるので、取り外して親父さんに渡したり。

メインPCで使ってた DVD-R/RWドライブと、ローレベルフォーマットをかけた新HDD 120GB を接続して、インストール作業開始。

SP+メーカーで作成したインストールCDを使って作業。セットアップは起動してくれた。

USBマウスを認識してくれるかどうかが不安だったけど。さすがにWinXPともなれば、ちゃんと認識してくれるようで。

アカウント作成画面で、一瞬画面が消えて、復活して、その後キーボード入力が一切出来なくなった。何かハードウェア的に問題があるのだろうか。作業を始める前に、拡張ボードを一旦外して取り付け直したから、そのへん怪しいわけで…。あるいは、CPU切替器を使ってるのがマズイのか。とりあえず memtest86+ を動かしてチェックしてみることに。

8cmケースファンを買ってこないと。 :

ケース前面の8cmファンから、絶えず「チリチリチリ」と異音が。寿命だろうか。あるいは掃除をした際に軸をおかしくしてしまったかもしれず。買ってこないといかんなと。できれば静音ファンにしたいところだけど、風量が弱くなりそうな予感も。それとも、Pen3系だから、静音ファンの風量でも大丈夫かしら。

#2 [pc] _5インチベイHDDクーラー HDC-501シリーズ

5インチベイを2段使って、3台の3.5インチHDDを搭載できるアクセサリ。8cmファンがついていて、外部の空気を直接HDDにあてて冷却できる。らしい。

HDD周辺に熱がこもると、故障率もグンと上がるとどこかで聞いた記憶もあるわけで。それを考えると、空いてる5インチベイにこういうモノを追加して、そこにHDDを設置したほうがいいのかなと。

#3 [pc] _HDD切替器 3R-HDCBOX

_そのほかのドライブベイ内蔵機器の新製品(2005年3月19日)

ハード的にブートHDDを切替えられるらしい。こういうものがあれば、デュアルブートもそれほど悩まずに済みそうな。

#4 [emacs] Xのアプリでコピーしてもemacsで貼り付けできない症状

ときどき、emacsを再起動するまで貼り付けできない状態になってしまって閉口していたのだけど。どうやら、何も選択していない状態で M-w してから、X アプリでコピー → emacs で貼り付けすればどうにかなる模様。…何が起きてるのかはさっぱりわからないけど。

ひょっとして、kill-ring とやらが絡んでたりするのであらうか。うーむ。

#5 [anime] セイザーX、総集編の回

最後のあたりで今後の展開を宣伝していた。珍しいやり方だなと。たしかに、どうせ子供向け雑誌を読めば展開は判ってしまうし、あるいは、あらかじめ知らせておくことで子供はワクワクするのかもしれんし。もしかすると上手いやり方だったりするのかもしれんなと。いや、わからんけど。

#6 [anime] エウレカセブン、サッカーの回

リーダーの台詞でなんかいい具合にまとめちゃうあたりが上手いなと感心。しかし、パス云々はちと強引だったような。コンテの段階で頭を抱えたのではなかろうかと余計な心配を。

#7 [anime] マジレンジャー、ラスボス復活の回

デザインが気持ち悪くてグー。触手が食い破るの図はなかなか。また、目のあたりの造形(?)が気になった。ボケ具合がいい感じ。

#8 [anime] ライダーヒビキ、最終回をビデオで見返し

敵の刀で音を出す、少年のライバルの図。カッコイイ。

ラスト近辺を見直して、流れがわからなくなってきた。最初に見たときは、少年は鬼にならない、と捉えたのだけど。もしかして、少年の「ハイ!」は、「また修行に戻ります」という意味だったのだろうか。…まあ、そのへんどっちでもいいか。職業は別であっても、姿勢は同じ、という捉え方さえしていればいいのだらう。たぶん。

#9 [anime] プリキュアMax、敵のラスボス復活と市街での戦闘の回

考えてみると、ピンクなハートがやたらとついたアイテムから稲妻が発生するってのは、凄い設定というか、かなり変なビジュアルな気もしてきた。しかも敵が恐ろしい形相で消えていくし。ハートがついた可愛いアイテムなのに。…いや。セーラームーンもラスト近辺はこんな感じだったから、別に珍しいモノでもないわな。…そういやそもそも、キューティーハニーもハート型のアイテムをつけてたっけ。

プリキュアというタイトルでありながら、主人公が変わるというのは珍しい展開だなと。マジンガーZに対するグレートマジンガーみたいなものだろうか。いや、ウルトラマンに対するウルトラセブンとか。仮面ライダーに対する仮面ライダーV3とか。…書き連ねているうちに、とりたてて珍しい展開ではないような気がしてきた。むしろありがちな流れか。セーラームーンやどれみのように、主人公が変わらずに延々と続くシリーズのほうがイリーガルなのだな。であれば、「明日のナージャ Max Heart」とか、「明日のナージャ Splash Star」とか、まったく別のキャラを作って復活させることも夢ではない。嘘。…商売としては、セーラームーンを復活させたほうがヨサゲ。「セーラームーン Next Generation」とか。「セーラームーン Deep Space Nine」とか。携帯電話で変身するセーラームーンとか。太鼓で敵を倒すセーラームーンとか。メカ恐竜と会話するセーラームーンとか。いくらでもシリーズを続けられそうな予感。

#10 [anime] BJ、リボンの騎士の回

またペンタッチがついてる。どうやって作画してるんだろうなぁ。漫画的な見栄えになるので個人的には好きなんだけど。

#11 [anime] 名探偵コナンを見たのだけど

少年探偵団とやらの中のソバカス少年の声が以前とは違ってるような。気のせいかしら。

_大谷育江 - 2006年1月、体調不良のため全レギュラー番組を一時降板することになった。 :

ガーン。そうだったのか…。

#12 [jiji] _ITmediaニュース:堀江社長ら、証取法違反で逮捕

WinXP のインストール作業中、手持ちぶさたでTVをつけたら。どこもかしこもこのニュースばかりでゲンナリ。そんなに大騒ぎするような話なのであらうか。ネタがないんですかね。>マスコミ。…NHKまで追随して報道合戦してるの図は呆れた。しかも同じ内容を繰り返して流してる。ニュースの内容まで「再放送」しなくても。

ライブドア程度のグループ数ですらこういうことが出来るなら、日立とかホンダとか松下とかその手のグループだって既にこういうことをしてるんじゃないかと思えてきたり。特に、マスコミ関係のグループあたりはやってそう。…まあ、仮にやってたとしても、上手いこと根回ししてあるから摘発されることはありえないのかもしれん。などと勝手な妄想を。

#13 [tv] 昨晩、NHKで水俣病の特集番組の再放送をしていた

昭和の頃に放映された番組を、深夜に、NHKアーカイブスと称して、合間に解説を挟みながら再放送してるらしい。SP+メーカーでの作業中に視聴。

水俣病患者の様子が画面に写っていたのだけど。映像を見てショックを受けた。特に、胎児の段階で水俣病になった事例が酷かった。脳が破壊されてる・通常の人間の1/2の容量とかで。

「この国には、こういう酷い時代があったんだな…」と思いきや。番組最後の解説で、一番ショックを受けた。なんでも、未だに問題が解決してないらしい。水俣病認定の判断基準が厳しすぎて、実際の患者数は推定3万人ほどのところ、2千人程度しか認定されてないらしく。医学界からも疑問の声が上がり、裁判でも「厳しすぎる」と判断されたとの話なのだけど…。

日本って、今尚、発展途上国とさほど変わらんレベルなのでは。こんなんじゃ北朝鮮や中国を笑えん…。

2005/01/23() [n年前の日記]

#1 [cg_tools] GIMP 2.2.1-ja15をインストールしてみた

_βテスト版配布ページ。 結構いい感じ。

GAP 2.0.2が動かない :

前述のページには、pre2用のプラグインしかないようで、GAPは動かない。 *1 _Simoncic版のページ から、GAP 2.0.2 をDL・インストールしてみたが、やはり、DOS窓が開き、実行するとエラーメッセージが出てくる。

GIMP 2.2.1-ja15 をアンインストール後、Simoncic版を入れて試してみた。症状変わらず。

.moファイルが関係あるかと思って、削除してみたり、前述のpre2用の.moをコピーしてみた。症状変わらず。

海外の情報を検索してみたが、 _これぐらいしか見つからなかった。 解決方法は書いてない。そもそも、誰も気にしてないように見える。GAPを利用してるユーザは、ほとんど居ないってことか。Blueboxとやらを使って、ブルーバック合成の真似事をしてみたかったのだけどなぁ。

*1: というか、インストール先フォルダ自体が違う。

2004/01/23(金) [n年前の日記]

#1 [nitijyou] 雪ですよ

長靴でも外を歩くのが厳しいぐらい積もった。

#2 [windows] 父PCでのDVD再生

DVD-R/RWドライブ付属のアプリをインストール。妹からロードオブザリングのDVDを借りてDVD再生テスト。ATI DVD Player 5.0 と Cine Player 1.51 では再生結果が異なる模様。

ATI DVD Playerの場合 :

本編前の映像再生時、画面上で盛大にゴミが出て悲惨な状態。しかし、動き自体はカクカクすることもなく、スムーズに再生できてる。ていうか、前後のフレームが合成されてるような、ブラーがかかってぼやけてるような、今一つキレの無い画面。

Cine Playerの場合 :

画面にゴミが出る等の怪しい個所は一切ないものの、周期的なのかランダムなのかは判らないけど、ある間隔毎に、カクン…カクン…と再生が一瞬止まるような感じ。その代わり、各フレーム(?)が独立してキビキビと表示されてるみたいで、動きの激しい場面でも画がシャープ(?)というか。

原因が判らない :

CPU使用率はどちらもそれほど高くはなく、30〜60%ぐらいで収まってるように見えるので、CPUが非力というわけでは無さそうな。ドライブの転送速度が足りてないのかと思い、内蔵DVD-ROMドライブと、外付USB2.0接続DVD-R/RWドライブの両方で試してみたけど、結果は変わらず。CPU使用率も、ドライブが変わったからといって、見た目でわかるほど違ってはいない模様。一体何が問題で、ゴミが出たり、カクンカクンと動いてるのか。謎。…それはともかく、再生テストをしてたら、WinXPが何の警告表示もなく、いきなりプシュンと終了して再起動した。DVDソフトの再生時設定や、対象ドライブをゴチャゴチャ切換えてると発生するみたい。なんだか気味が悪い。

ついでにWindows Media Player 9の場合 :

再生画面にドットが見える。なんじゃこりゃ。エンジンはどっちを使ってるのかわからんけど。なんかおかしな、ていうか手抜きな拡大縮小をしてないか。

#3 [windows] メインPCにWinXP Home UPGをインストール

Win98上からWinXPのCD-ROMを自動再生。デュアルブートをさせるべく、新規インストールを選んだ後、どこかでインストール先パーティションを聞いてくるのかなとぼんやり待ってたら、いきなりファイルをHDDにコピーし始めたので焦る。君は一体どの場所にコピーしてるんだ。主人に知らせろ。ていうかもしかしてWin98をまっさらにして上書きするのでは。と不安になったけど、再起動後のセットアップ画面で、ちゃんとインストール先を聞いてきたのでホッとする。…結局、データファイル格納用・バックアップ用に残してあった、最後のパーティションを割り当てた。NTFSでフォーマット。他のOSから読み書きできないのは不安だけど、各種検証の為にはどこかしらでNTFSに触ってないとマズイだろうし。…巷のメーカ製PCは、FAT32とNTFSのどっちでフォーマットしてあるんだろうなぁ。

Mドライブにインストールされてしまった :

Linux用のパーティションまで既存ドライブとしてカウントしたらしい。余計な事をしくさってからに。…いや。後からインストールされる者として、律儀に既存パーティションを尊重してみせた、とも言えるのか。その割には光学系ドライブのドライブレターがGとかになってるんですけど。わけわからん。

やっぱりNTLDRが入ってしまった :

GRUBの画面が出てこない。これではLinuxが起動できない。と言っても、FDにもGRUBを入れておいたから一応起動はできるんだけど。…さて、これからどうしよう。NTLDRでLinux起動をする方法もあるらしいけど、その場合、ブートセクタとやらに変更があったら、その都度イメージファイルを作ってc:\に入れないといかんらしいので、なんだか面倒。かといって、GRUBからWinXPを起動した場合、F8を押してセーフモードで云々といった事ができるのか今一つ不明だったり。どうしようかなぁ。…Linuxをメインで使ってる人は、Win98/NTなんて起動すりゃいいや程度に扱ってるようだし、Winをメインで使ってる人は、Linuxなんて起動すりゃいいや程度に扱ってるようで、どちらもきっちり本来の起動が可能なようにする為の解説文書は見かけないような。…書いてないだけで、ちゃんと起動できるのかなぁ。試してみないとわからんか。

Program filesの場所はどうやって変更するねん :

空白が入った特殊フォルダなんて大嫌いやねん。 *1 アプリをガンガン突っ込む前に変更しておきたいのだけど。検索してもその手のtipsが全く見つからない。どうなってるの。 _PowerToys for Windows XP を入れてみたけど、それらしい項目は無かった。うーむ。 _いじくるつくーる を入れたら、それらしい項目があった。これで変更できればいいのだけど。

My Documnetsの場所は変更した :

Win98のMy Documentsと共用するですよ。スタートボタン→マイドキュメントを右クリック→プロパティ→フォルダの場所を変更。"FAT32ドライブ":\home\username\ にした。

*1: ていうかアプリによっては不具合出るし。MS-Wordとか。

2003/01/23(木) [n年前の日記]

#1 diff表示

外は大雪。犬に餌をやりにいくのも大変。

サクラエディタのdiff結果表示がそれらしくないと思って悩んでいたが、カラー表示のチェックが入ってなくて違いを表す記号が見難かったせいだった。xyzzyのdiff-modeのほうが見やすいけど、こちらは結果に対して修正作業ができないのが今一つ。何か手がありそうな気もするが。

2002/01/23(水) [n年前の日記]

#1 特になし

一日中寝倒してしまいました(爆)

2001/01/23(火) [n年前の日記]

#1 DVD2AVI

vob→MPEG1の実験をしてたんですが。
上手くいきませんな。

DVD2AVIで、.d2vファイルを生成してTMPGEncの映像ファイルに指定。
TMPGEncでMPEG1変換・出力。
音声は別途、CDex(LAME)か午後でMP3に変換。
TMPGEncのMPEGツールで映像と音声を多重化?してるわけですが。
MediaPlayerのシークバーを動かすとエラーを出して落ちたり。
音声に時々「ガベバベ」とノイズが入ったり。
mp3単体で聞くとノイズは入ってないんだけど。むむぅ。

試しに音声を、SCMPXでサンプリング周波数44.1KHzのMP2にしたら、多重化後も問題無く再生できてる模様。
ってことは、MPEG1にサンプリング周波数48KHzのMP3をつけたらダメ?
でもなぁ…手元にあるMP2出力可能なツールってSCMPXしか無くて。
SCMPXで変換すると、音がシュワシュワしちゃう。
何かいいツールはないものか。

そういや、TMPGEncやAviUtlで元映像を開くと、最初からやたらとブロックノイズだらけ。
実験に使ってるDVD-Videoのソースがそもそもアレなのか。それともツールの問題か。
わからんなぁ。

2000/01/23() [n年前の日記]

#1 (NoTitle)出かけようと思ったら...

出かけようと思ったら雨が降ってきてトホホ。どうも何か行動しようとすると天候が崩れるような。というか崩れるような天候だと行動しようと言う気が起きてくるのだろうか。むぅ。

雑誌に載ってるShade関連の記事を読んでたんですけどクラクラしたです。何だか凄い高レベルな内容ばかりでドキドキ。
そういや、myShadeってポリゴンメッシュへの変換ができなかったんですね。それってゲーム用のポリゴンデータに変換とかできるのかな。あとスクリプトを使うというのがShade使いの定石らしくて。その機能も無いみたい。このまま勉強してて大丈夫かな。まあ使えるようになれば上位版へアップグレードすればすむ話ですね。大体にしてそこまで行けるか現時点ではわかんないし無駄な心配しててもしょうがないか。
というかこの勉強自体がそもそも無駄なのではという不安もあったりして。自分の中での目的意識が今一つはっきりしてないような。
まあ、面白いからいいか。

以上、25 日分です。

過去ログ表示

Prev - 2024/04 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project