2024/03/20(水) [n年前の日記]
#1 [prog] C言語とOpenGLで疑似3D道路の描画実験中。その7
C言語 + OpenGL + glfw を使って実験中。疑似3D道路を描画してみたい。
ステージ(?)の種類を増やしたい。夏、秋、冬、夜の4種類にできないかと考えて作業中。
ステージ(?)の種類を増やしたい。夏、秋、冬、夜の4種類にできないかと考えて作業中。
◎ スプライトシート内の座標を取得したい :
ひとまずスプライトシート内の各画像を4種類分増やしたけれど、テクスチャのUV値テーブルを作るあたりで少し悩んだ。各スプライトの位置とサイズを、画像編集ソフト上で確認して手打ちで数値をメモして、とかやってられない…。
今現在、スプライトシートについては、GIMP上で各画像を配置するようにしてあるので、全レイヤー情報をテキスト出力すれば済むのではないかと気が付いた。GIMP は、各レイヤー毎に、キャンバスサイズと異なるレイヤーサイズを持てるので…。1レイヤーにつき1スプライト分のレイヤーサイズにして…。全レイヤーの位置とサイズを出力してCSV相当にすれば後の作業が楽になるはず。
たしか以前、全レイヤーの位置とサイズをテキスト出力するスクリプトを書いてたような…。
_mieki256 wiki - GIMPの全レイヤー情報をテキストで保存するスクリプト
_GIMPの全レイヤー情報をテキストで保存するPython-Fu(GIMP-Python)スクリプト。
コレを使ってテキスト出力した。GIMP 2.10.34 Portable で作業。以下のようなテキストが得られた。
_dump_temp.txt
LibreOffice Calc で読み込んで、更に必要な情報を追加。CSV で保存。
CSV を読み込んで、座標値を実数(0.0 - 1.0)に変換しつつ、C言語のソース形式にするPythonスクリプトを書いた。Python 3.10.10 64bit で実行。
_csv2c.py
python csv2c.py > tmp.txt として出力。以下のような結果が得られた。
_tmp.txt
ここまでやっておいてアレだけど。コンピュータに自動で画像を詰め込ませてスプライトシートを作らせる手もあったのでは…? そういえば、昔そういうスクリプトを書いたこともあったな…。
_mieki256/texpack
今現在、スプライトシートについては、GIMP上で各画像を配置するようにしてあるので、全レイヤー情報をテキスト出力すれば済むのではないかと気が付いた。GIMP は、各レイヤー毎に、キャンバスサイズと異なるレイヤーサイズを持てるので…。1レイヤーにつき1スプライト分のレイヤーサイズにして…。全レイヤーの位置とサイズを出力してCSV相当にすれば後の作業が楽になるはず。
たしか以前、全レイヤーの位置とサイズをテキスト出力するスクリプトを書いてたような…。
_mieki256 wiki - GIMPの全レイヤー情報をテキストで保存するスクリプト
_GIMPの全レイヤー情報をテキストで保存するPython-Fu(GIMP-Python)スクリプト。
コレを使ってテキスト出力した。GIMP 2.10.34 Portable で作業。以下のようなテキストが得られた。
_dump_temp.txt
tree0_0,0,0,512,512 tree0_1,512,0,512,512 tree0_2,1024,0,512,512 tree0_3,1536,0,512,512 slope0_l,2048,0,512,512 slope0_r,2560,0,512,512 ... deli0,3328,3840,128,256 deli1,3456,3840,128,256 road0,2048,3584,512,512 road1,2560,3584,512,512 road2,1792,3840,256,256
LibreOffice Calc で読み込んで、更に必要な情報を追加。CSV で保存。
CSV を読み込んで、座標値を実数(0.0 - 1.0)に変換しつつ、C言語のソース形式にするPythonスクリプトを書いた。Python 3.10.10 64bit で実行。
_csv2c.py
import sys
import csv
IMGW = 4096.0
IMGH = 4096.0
def main():
if len(sys.argv) != 2:
print("Usage: %s INFILE" % (sys.argv[0]))
sys.exit()
infile = sys.argv[1]
symtbl = []
uvtbl = []
with open(infile) as f:
reader = csv.reader(f)
for i, row in enumerate(reader):
name = row[1]
w = int(row[2])
h = int(row[3])
u = float(row[4]) / IMGW
v = float(row[5]) / IMGH
uw = float(row[6]) / IMGW
vh = float(row[7]) / IMGH
sname = "SPR_" + name.upper()
symtbl.append(sname)
uvtbl.append(
{"w": w, "h": h, "u": u, "v": v, "uw": uw, "vh": vh, "name": sname}
)
msg = """\
// ----------------------------------------
// sprite type
typedef enum sprtype
{
"""
print(msg)
for i, s in enumerate(symtbl):
print(" %s, // %d" % (s, i))
print("} SPRTYPE;\n")
msg = """\
// ----------------------------------------
// sprites size and uv table
typedef struct sprtbl
{
float w;
float h;
float u;
float v;
float uw;
float vh;
} SPRTBL;
"""
print(msg)
print("static SPRTBL spr_tbl[%d] = {" % len(uvtbl))
print(" // poly w, poly h, u, v, uw, vh")
for i, d in enumerate(uvtbl):
print(
" {%d, %d, %f, %f, %f, %f}, // %d %s"
% (d["w"], d["h"], d["u"], d["v"], d["uw"], d["vh"], i, d["name"])
)
print("};")
if __name__ == "__main__":
main()
python csv2c.py > tmp.txt として出力。以下のような結果が得られた。
_tmp.txt
// ----------------------------------------
// sprite type
typedef enum sprtype
{
SPR_NONE, // 0
SPR_TREE0_0, // 1
SPR_TREE0_1, // 2
// ...
SPR_ROAD1, // 66
SPR_ROAD2, // 67
} SPRTYPE;
// ----------------------------------------
// sprites size and uv table
typedef struct sprtbl
{
float w;
float h;
float u;
float v;
float uw;
float vh;
} SPRTBL;
static SPRTBL spr_tbl[68] = {
// poly w, poly h, u, v, uw, vh
{0, 0, 0.000000, 0.000000, 0.000000, 0.000000}, // 0 SPR_NONE
{450, 450, 0.000000, 0.000000, 0.125000, 0.125000}, // 1 SPR_TREE0_0
{450, 450, 0.125000, 0.000000, 0.125000, 0.125000}, // 2 SPR_TREE0_1
// ...
{256, 256, 0.656250, 0.906250, 0.062500, 0.062500}, // 66 SPR_ROAD1
{256, 256, 0.437500, 0.937500, 0.062500, 0.062500}, // 67 SPR_ROAD2
};
ここまでやっておいてアレだけど。コンピュータに自動で画像を詰め込ませてスプライトシートを作らせる手もあったのでは…? そういえば、昔そういうスクリプトを書いたこともあったな…。
_mieki256/texpack
[ ツッコむ ]
#2 [windows] Thunderbirdでyahoo.co.jpのメールを読めるように設定しておいた
Thunderbirdでyahoo.co.jpのメールを読めるように設定しておいた。とメモ。
◎ 経緯 :
自分、yahoo.co.jp のメールアカウントについては、Windows10の「メール」からアクセスできるようにしているのだけど。このWindows10の「メール」が、ここ最近「このアプリはOutlookになりますよ!」と何度も何度も何度も言ってきて非常に鬱陶しい。
その Outlook は、yahoo.co.jp のアカウント情報を入力すると、途中で強制的に yahoo.com のサーバにアクセスして、「お前の入力したアカウント情報なんか存在しねえよ!」と言い出す。使い物にならない…。yahoo.co.jp のメールサービスと yahoo.com のメールサービスは別のサービスなのに…。文字列先頭の「yahoo」だけを見て、「コレって Yahoo.com のアカウントだよなあ?」と勝手に決めつけて処理を進めているのだろうけど。信じられないクソ実装…。
一応、Outlook から「メール」に戻す際に、「問題が発生しています」「yahoo.co.jpとyahoo.comは別のメールサービスなのに設定が強制的に書き換えられてしまう」とフォームから送信してみたのだけど、全然修正される気配が無い。フォームに打ち込んだ報告がどこにも届いてないのだろうか。それとも読んだ側が「コイツは何を言ってるんだ。yahoo のメールサービスと言ったら yahoo.com に決まっているだろう」と何年も思い込んだままスルーし続けているのだろうか。
まあ、Windows10の「メール」にも全く同じバグがあって、これまたずっと放置されてきたから、Outlook も同様に放置されるのだろうなと思っているけれど…。
ただ、Windows10の「メール」には、IMAPサーバを別途選択できる機能があるので、この問題を回避できる。しかしOutlook はその機能を削った(正確にはエラーが出てくるまで機能を隠すように改悪してしまった)ので、アカウントの設定すら思ったようにできない。いや、わざとエラーを出すようにアレコレすればできるみたいだけど…。そんなアホなことやりたくない…。「メール」を使えばアクセスできてるのに…。
_新しいOutlookとYahooメールアカウント: PATHpilotのブログ
ということで、念のために保険的な意味で、Thunderbird から yahoo.co.jp のアカウントにアクセスできるように設定することにした。
その Outlook は、yahoo.co.jp のアカウント情報を入力すると、途中で強制的に yahoo.com のサーバにアクセスして、「お前の入力したアカウント情報なんか存在しねえよ!」と言い出す。使い物にならない…。yahoo.co.jp のメールサービスと yahoo.com のメールサービスは別のサービスなのに…。文字列先頭の「yahoo」だけを見て、「コレって Yahoo.com のアカウントだよなあ?」と勝手に決めつけて処理を進めているのだろうけど。信じられないクソ実装…。
一応、Outlook から「メール」に戻す際に、「問題が発生しています」「yahoo.co.jpとyahoo.comは別のメールサービスなのに設定が強制的に書き換えられてしまう」とフォームから送信してみたのだけど、全然修正される気配が無い。フォームに打ち込んだ報告がどこにも届いてないのだろうか。それとも読んだ側が「コイツは何を言ってるんだ。yahoo のメールサービスと言ったら yahoo.com に決まっているだろう」と何年も思い込んだままスルーし続けているのだろうか。
まあ、Windows10の「メール」にも全く同じバグがあって、これまたずっと放置されてきたから、Outlook も同様に放置されるのだろうなと思っているけれど…。
ただ、Windows10の「メール」には、IMAPサーバを別途選択できる機能があるので、この問題を回避できる。しかしOutlook はその機能を削った(正確にはエラーが出てくるまで機能を隠すように改悪してしまった)ので、アカウントの設定すら思ったようにできない。いや、わざとエラーを出すようにアレコレすればできるみたいだけど…。そんなアホなことやりたくない…。「メール」を使えばアクセスできてるのに…。
_新しいOutlookとYahooメールアカウント: PATHpilotのブログ
ということで、念のために保険的な意味で、Thunderbird から yahoo.co.jp のアカウントにアクセスできるように設定することにした。
◎ 作業メモ :
以下のページを参考にして作業。
_Yahooメール Thunderbirdメールソフト送受信設定方法
_メールソフトで送受信するには(Yahoo!メールアドレス、@ymail.ne.jpアドレスの場合)
今回は、POPじゃなくてIMAPでアクセスするように設定。
一応手順を少しメモ。Thunderbird 115.8.1 64bit で作業。ファイル → 新規作成 → 既存のメールアカウント。
とりあえず、これで強制的に Outlook に切り替えられてしまっても、どうにかなるかな…。いや、そもそも Microsoftが提供するメーラなんか使わないように環境構築すべきなのかもしれないけれど。
_Yahooメール Thunderbirdメールソフト送受信設定方法
_メールソフトで送受信するには(Yahoo!メールアドレス、@ymail.ne.jpアドレスの場合)
今回は、POPじゃなくてIMAPでアクセスするように設定。
一応手順を少しメモ。Thunderbird 115.8.1 64bit で作業。ファイル → 新規作成 → 既存のメールアカウント。
- 接続の保護 : SSL/TLS
- 認証方式 : 通常のパスワード認証
- ユーザ名 : yahoo.co.p のメールアドレスを入力。
とりあえず、これで強制的に Outlook に切り替えられてしまっても、どうにかなるかな…。いや、そもそも Microsoftが提供するメーラなんか使わないように環境構築すべきなのかもしれないけれど。
[ ツッコむ ]
#3 [digital] MZK-MF150Bが壊れたっぽい
茶の間のTV、REGZA 37Z9000 は、有線LAN接続機能はあるけれど、無線LAN接続機能が無い。そのREGZAに、無線LANコンバータ PLANEX MZK-MF150B を有線LANで接続して、MZK-MF150Bを経由することで無線LANルータと無線接続するようにしていたのだけど。気づいたら MZK-MF150B の電源LED等が一切点灯していない状態になっていた。
外して色々確認してみたところ、様子がおかしい。本来、ACアダプタを接続すれば、Power、WPS、Wiress の3つのLEDが点灯なり点滅なりするはずなのだけど、現状では真ん中(鍵っぽいアイコン)のWPSランプのみが点灯して、PowerとWiressは点灯しない状態にしかならなかった。
裏面のリセットボタンを3秒以上だか10秒だか長押しすると工場出荷状態になる、という話も見かけたので試してみたけれど、状況変わらず。
こういう状態になった事例はないかとググってみたけれど、製品交換になった事例しか見つからなかった。
_価格.com - 『powerランプについて』 PLANEX MZK-MF150W のクチコミ掲示板
どうやら故障してしまったようだなと…。
さて、困った。今時のTVはえてして無線LAN接続機能を持っていたりするので、有線LAN接続しかできない機器を無線LAN接続できるようにするための製品となると、選択肢が限られている印象が…。いっそLANケーブルを引っ張ってきて有線LANで接続してしまおうか。でも、家の壁に穴なんか開けたくないし…。そもそも有線接続すると雷が落ちた時にLANポートが壊れる(壊れた)から無線LANにしておきたいのだよな…。
外して色々確認してみたところ、様子がおかしい。本来、ACアダプタを接続すれば、Power、WPS、Wiress の3つのLEDが点灯なり点滅なりするはずなのだけど、現状では真ん中(鍵っぽいアイコン)のWPSランプのみが点灯して、PowerとWiressは点灯しない状態にしかならなかった。
裏面のリセットボタンを3秒以上だか10秒だか長押しすると工場出荷状態になる、という話も見かけたので試してみたけれど、状況変わらず。
こういう状態になった事例はないかとググってみたけれど、製品交換になった事例しか見つからなかった。
_価格.com - 『powerランプについて』 PLANEX MZK-MF150W のクチコミ掲示板
どうやら故障してしまったようだなと…。
さて、困った。今時のTVはえてして無線LAN接続機能を持っていたりするので、有線LAN接続しかできない機器を無線LAN接続できるようにするための製品となると、選択肢が限られている印象が…。いっそLANケーブルを引っ張ってきて有線LANで接続してしまおうか。でも、家の壁に穴なんか開けたくないし…。そもそも有線接続すると雷が落ちた時にLANポートが壊れる(壊れた)から無線LANにしておきたいのだよな…。
◎ 2024/03/21追記。 :
「選択肢が限られている」と書いてしまったけど、調べてみたら無線LANルータの中には「イーサネットコンバータ」モードを持ってる製品が結構あるらしくて。そういった製品も視野に入れれば選択肢は豊富にあるほうかも。と思い直したことをメモ。
[ ツッコむ ]
以上、1 日分です。