HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0314
aroe疑似3Dスプライトの再現方法について4解決


aroe

リンク

2020/3/14(Sat) 13:06:07|NO.89715

こんにちは
先日質問させていただいたものですが2D物のゲームで疑似的な3Dゲームの作成についてどういう
構造で作成されてるのか疑問ですよね。
例えばスーパーマリオカートの2Dだけど疑似的な3Dの再現方法とか。
少し語りませんか?
あとHSPでゲームとかアプリを作るうえで何から手を付けていいのか教えていただくと本当に助かります
ご回答おまちしております



この記事に返信する


あらや

リンク

2020/3/14(Sat) 13:51:39|NO.89716

だいぶ前に疑似的な3Dをやったときのソースです。
http://hsp.tv/play/pforum.php?mode=pastwch&num=82471#82507

これは最低限の環境でやったので簡易的な3Dですが
色々面倒な座標の計算をしているのでわかりにくいですが
描画はline命令だけです。



標準で付属している『d3module』も似たような感じで疑似的に3Dが使えるモジュールです。



基本的に遠くにある物を小さく、
近くにある物は大きく描画すれば
疑似的な3Dは可能ですよ。



>HSPでゲームとかアプリを作るうえで何から手を付けていいのか
検索すればHSP解説のHPはたくさんあります。

まずは文字や画像をウィンドウに表示することから始めてはいかがでしょう。



aroe

リンク

2020/3/14(Sat) 14:23:28|NO.89718

あらやさん
ご回答ありがとうございます。
単純な表示でもこれだけの複雑なプログラムが必要なのですね。
少し恐縮ですがあらやさんはもちろんすべて手書きなのですよね?
タイピングを打つ感覚で書いているのでしょうか?



あらや

リンク

2020/3/14(Sat) 18:18:14|NO.89719

>少し恐縮ですがあらやさんはもちろんすべて手書きなのですよね?
>タイピングを打つ感覚で書いているのでしょうか?
過大な評価を受けているようですが……
残念ながらスラスラと打ってるわけではありません。

抜粋すると、この辺りはたしかメモ帳か何かで計算式を書いて
必要最低限の箇所だけ残したような。。。

; rotate 任意軸周りの空間回転演算 ( x0, y0, z0, vx, vy, vz, cx, cy, cz, va, x1, y1, z1) ; 入力値 x0 y0 z0, 回転軸ベクトル vx vy vz, 回転の中心座標 cx cy cz, 回転角度 va, 出力変数 x1 y1 z1 ;#deffunc shift_rotate double x0, double y0, double z0, double vx, double vy, double vz, double cx, double cy, double cz, double va, var x1, var y1, var z1 *shift_rotate ; 座標の平行移動(回転の中心座標を原点に合わせる) mpx = x0 - cx; mpy = y0 - cy; mpz = z0 - cz; ; 回転軸の単位ベクトル化 ;r = powf(vx*vx + vy*vy + vz*vz, 0.5); r = sqrt(vx*vx + vy*vy + vz*vz); ax = vx/r : ay = vy/r : az = vz/r; ; 回転演算 sin1 = sin(va); cos1 = cos(va); ;gosub *calc_sin; ;gosub *calc_cos; l_cos1 = 1.0 - cos1; x1 = (ax*ax*l_cos1+cos1)*mpx + (ax*ay*l_cos1-az*sin1)*mpy + (az*ax*l_cos1+ay*sin1)*mpz; y1 = (ax*ay*l_cos1+az*sin1)*mpx + (ay*ay*l_cos1+cos1)*mpy + (ay*az*l_cos1-ax*sin1)*mpz; z1 = (az*ax*l_cos1-ay*sin1)*mpx + (ay*az*l_cos1+ax*sin1)*mpy + (az*az*l_cos1+cos1)*mpz; ; 座標の平行移動(ずらした分を戻す) x1 = x1 + cx; y1 = y1 + cy; z1 = z1 + cz; return;
変数名などはd3moduleを真似たというか、
結果的に必要最低限の式までパクリのような形になってしまいましたが(^^;

場合によっては一旦紙で計算してからソースにする事もありますし
比較的単純な式の場合は上記のようにメモ帳のようなエディタで計算することもあります。


計算以外の箇所を、言葉にすると

『ここからここまで線を引くから…この座標はいくつになって……
えーっと、次が……あ!これやるなら円周率も必要だな!…それから……』

これをイメージしてもらえると実像に近いかと思います。


私がスラスラ打てるようなソースは本当に単純なソースです。
一例としてこのソースは比較的スラスラ書けるレベルでしょうか
(1バイト多く上書きコピーしているというバグになりそうなソースですが)
http://hsp.tv/play/pforum.php?mode=all&num=89561#89564



k

リンク

2020/3/14(Sat) 21:16:45|NO.89723

>スーパーマリオカートの2Dだけど疑似的な3Dの再現方法とか。

昔のゲーム機での疑似的な3Dの表示は
拡大縮小をスプライトやBGを使って表現するのと
ラスタースクロールとを組み合わせて使うのが多かったですね

Wikipediaのラスタースクロールより
>『スーパーマリオカート』では遠景やスコア表示をBGレイヤーが複数使えるモード0で描画し、
>地面のコース部分を拡大縮小回転可能なモード7で描画していた。

スーパーファミコンは標準でBG面拡大縮小回転(1軸)を持っていますから
地面はかなりリアルですね



ONION software Copyright 1997-2018(c) All rights reserved.