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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0516
ROKOアルバム5未解決


ROKO

リンク

2008/5/16(Fri) 23:53:22|NO.15870

ttp://www.airtightinteractive.com/projects/tiltviewer/app/
上のようなアルバムをhspで作ろうと思っているのですが、
どうしたらできますか?
よろしくお願いします。



この記事に返信する


f

リンク

2008/5/19(Mon) 14:29:36|NO.15924

・・・。

まず自分にできる事から始めなさい。



jill

リンク

2008/5/20(Tue) 19:48:03|NO.15950

経験不足なもので出来るかどうか分かりませんが、私が造ろうと思ったらどうするか考えてみました

1.先ず画像の4辺のサイズ変更が出来るかどうか現時点で分からないので、3D関係でテクスチャとして貼り付けてみる。

2.マウス位置を取得して、カメラのアングルが変わるようにしてみる。

3.画像をポイントしたらその画像のZ軸を増やして少し前にボンッと出るようにしてみる

4.下のぐるっと矢印を押したら新しい画像をランダムで、Y軸を下降させて面の位置で止まるようにしてみる


こんな感じで出来そうな気がします。実際どうなんでしょう?



flory

リンク

2008/5/21(Wed) 20:55:14|NO.15969

習作として、それっぽいモノを作ってみました。
jillさんの言う

>1.先ず画像の4辺のサイズ変更が出来るかどうか現時点で分からないので、
>3D関係でテクスチャとして貼り付けてみる。

>2.マウス位置を取得して、カメラのアングルが変わるようにしてみる。

はできてます。

が、3、4については、当たり判定云々が非常に面倒くさいので省略。スイマセン。

まあ、各所にコメント残してますんで、パワーアップさせたければどうぞ。

;http://www.airtightinteractive.com/projects/tiltviewer/app/ っぽいサンプル ;表示できる画像の最大数は9個 ;10個以降は上書きされる ;スペースキーorエンターキーで画像ファイルを開く #uselib "user32.dll" #func ScreenToClient "ScreenToClient" int, int, int #include "hgimg3.as" ; 初期設定 ; #define sX 640 ;クライアントエリアxサイズ #define sY 480 ;クライアントエリアyサイズ #define sL sX ;クラアントエリアの長辺の長さを指定 ; #define radLimit 0.785398 ;限界角度(マウスがクライアントエリアの端にあるときの角度)(π/4=45°) #define radLimit 1.047198 ;限界角度(π/3=60°) ; #define radLimit 1.570796 ;限界角度(π/2=90°)(お好みでどれでも) #define disCam 25.0 ;原点からのカメラ距離 cposX = 0.0 ;カメラx位置(初期=0) cposY = 0.0 ;カメラy位置(初期=0) cposZ = disCam ;カメラz位置(初期=原点からのカメラ距離) iPic = 0 ;表示した画像の数(初期=0) iPic_backup = 0 ;iPicのバックアップ(初期=0) count = 0 ;表示アニメーションのフレームカウント(初期=0) ; ウインドウ初期化 ; screen 0, sX, sY, 0 title "3D画像ビューワ" cls 4 ;背景は黒 ; hgimg3初期化 ; hgini ; カメラ初期化 ; setpos HGOBJ_CAMERA, cposX, cposY, cposZ cammode CAM_MODE_LOOKAT ;カメラを注視モードに設定(デフォルトで座標(0,0,0)を注視する) *main ; メインルーチン ; ; フレーム描画 ; hgdraw ;描画 hgsync 15 ;時間待ち ; マウス位置からカメラ位置設定 ; POINT = ginfo_mx, ginfo_my ;スクリーン座標をPoint構造体に格納 ScreenToClient hwnd, varptr(POINT) ;クライアントエリア座標へ変換 if (Point.0<0) | (Point.0>sX) | (Point.1<0) | (Point.1>sY) { ;マウスがクライアントエリア外ならカメラを初期位置に戻す cposX = 0.0 cposY = 0.0 cposZ = disCam } else { ;マウスの座標から極座標を設定し、直交座標に変換 cposX = disCam*sin(double(Point.0-sX/2)/double(sL/2)*radLimit)*cos(double(Point.1-sY/2)/double(sL/2)*radLimit) cposY = disCam*sin(double(Point.1-sY/2)/double(sL/2)*radLimit) cposZ = disCam*cos(double(Point.0-sX/2)/double(sL/2)*radLimit)*cos(double(Point.1-sY/2)/double(sL/2)*radLimit) } setpos HGOBJ_CAMERA, cposX, cposY, cposZ ;カメラ位置設定 ; 表示アニメーション ; if iPic_backup = iPic { stick key if (key&16) | (key&32) : gosub *onOpenFile ;スペースキーまたはエンターキーでファイルを開くサブルーチンへ } else : gosub *onDisplay ;表示アニメーションのサブルーチンへ goto *main *onOpenFile ; ファイルを開くサブルーチン ; buffer 1 dialog "bmp;*.jpg;*.gif;*.ico", 16 if stat = 0 : return ;キャンセルされたらreturn picload refstr ;いったんbufferに読み込んで画像サイズを取得 sPicX = double(ginfo(12)) sPicY = double(ginfo(13)) gsel 0, 2 ;これをしないとhwndがID1のウィンドウのものになってしまう(ScreenToClientに支障が出る) gsel 0, 1 texload refstr ;テクスチャをロード if sPicX < sPicY { ;縦長画像の場合 addplate idMdl, 0, 4.0/sPicY*sPicX, 4.0, 0, 0, sPicX, sPicY, stat } else { ;横長画像の場合 addplate idMdl, 0, 4.0, 4.0/sPicX*sPicY, 0, 0, sPicX, sPicY, stat } if iPic < 9 { ;表示画像が9個以下ならオブジェクトを登録 regobj idObj.iPic, idMdl, 0 } else { ;表示画像10個目以降はオブジェクトの表示モデルを変えるだけでよい setobjmodel idObj.(iPic\9), idMdl } setpos idObj.(iPic\9), ((iPic\9)\3-1)*5, ((iPic\9)/3-1)*5, 5 ;座標設定 setefx idObj.(iPic\9), 0 iPic ++ ;カウントをインクリメント return *onDisplay ;表示アニメーションのサブルーチン ; if count = 0 : count = 25 ;カウント設定 addpos idObj.(iPic_backup\9), 0, 0, -0.2 ;座標加算 addefx idObj.(iPic_backup\9), 10.24 ;アルファ合成値加算 count -- ;カウントをデクリメント if count = 0 : iPic_backup = iPic ;カウント終了でiPic_backupを更新 return
構想に一日、製作に一日。長い?短い?

問題点は、

モデルを削除できないので、ファイルを開くたびにメモリを食ってる気がする。

hgimg3のevent関係の命令がわからない(汗)

あとはもちろん当たり判定です。

蛇足ですが…、
作っていて、正直、hgimg3に極座標計算を実装してほしいと思いました。



jill

リンク

2008/5/21(Wed) 21:29:31|NO.15971

凄い。。勝手な創造に付き合ってもらい恐縮です。
プログラム暦6ヶ月程なんでパッと見チンプンカンプンです。

たしかFlashには画像の4辺のサイズ変更があったと思うので簡単そうですが、
HSPだとちょっと無謀ですね。

>モデルを削除できないので、ファイルを開くたびにメモリを食ってる気がする。

これは気にかかります。私なら絶対作らないと思います。
日本では昨今メモリ2Gなんて当たり前になっていますが、より多くの人に使用してもらいたいと言う
気持ちがあると、重さ、速度などとても不憫に感じてしまいます。


どうしても作りたかったら、floryさんのスクリプト参考にするか、gzoomでX又はY軸1ドットづつコピーして
力技で4辺任意サイズの画像を作って下さい



flory

リンク

2008/5/21(Wed) 22:18:22|NO.15972

>凄い。。
ありがとうございます。そう言ってもらえるとこちらも嬉しいです。

>>モデルを削除できないので、ファイルを開くたびにメモリを食ってる気がする。
>これは気にかかります。私なら絶対作らないと思います。

今回は、画像表示時にアニメーションさせたくて、hgimg3のevent関係の命令を使おうかと思い
hgimg3を選んだのですが、結局使わなかったのでd3moduleでも代用できるはずです。
d3moduleならbufferに描くだけなので、bufferを消してしまえばメモリの問題も解決するかと。

移植も難しくないでしょう。


しかし、当たり判定のことを考えると、いっそ元のアルバムと同じく
flashで作ったほうがいいかもしれません。
flashなら当たり判定も勝手にしてくれますので。

>どうしたらできますか?
がんばればできる、と言っておきましょう。



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