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


HSPTV!掲示板


未解決 解決 停止 削除要請

2023
1004
youdaiHGIMG4で画面上に表示されているオブジェクトの、画面上の縦横の大きさを求めたいです6解決


youdai

リンク

2023/10/4(Wed) 17:20:32|NO.100131

HGIMG4で画面上に表示されているオブジェクトの、画面上の縦横の大きさを求めたいです。

オブジェクトの体積は大まかなものが分かっているとします。例えば、体積が1m*1m*1mの体積だとします。
求める画面上の大きさは詳細なものではなく、大まかな縦横のピクセル数で十分です。
オブジェクト単位のZバッファを求めることは可能ですから、体積が判明していれば可能そうな気もするのですが、方法がよくわかりません。
画面上の大きさを求めることは、可能でしょうか?
アドバイスをお願い致します。



この記事に返信する


buhio

リンク

2023/10/4(Wed) 17:39:47|NO.100132

こんにちわ

3D空間上の位置xyzが判明していれば、
gpcnvaxisのモード0で画面上のピクセル位置が取得できると思います。
中心位置はgetposで取得できると思うので、オブジェクトの横幅と縦幅の位置は計算ででるかなと思います。

。。。っていうので質問の解釈合ってるかな??



youdai

リンク

2023/10/4(Wed) 18:08:54|NO.100134

アドバイスありがとうございます。

>3D空間上の位置xyzが判明していれば、gpcnvaxisのモード0で画面上のピクセル位置が取得できると思います。
>中心位置はgetposで取得できると思うので、オブジェクトの横幅と縦幅の位置は計算ででるかなと思います。

まとめると以下のようなことでしょうか?

1.gpcnvaxisで画面上のオブジェクトの点的な位置を取得する
2.オブジェクトの3D座標をgetposで取得する

ここからの以下の部分をどうしたらいいか分かりません。

>オブジェクトの横幅と縦幅の位置は計算ででるかなと思います。

画面上に表示されているオブジェクトの縦幅と横幅の、画面上のピクセル数(ディスプレイ上に表示されている縦横のドット数)をどういう計算式で導けばいいのでしょうか? これは大まかな縦横のドット数でも構いません。



youdai

リンク

2023/10/4(Wed) 18:20:22|NO.100135

画面上に表示されているオブジェクトが実際に画面にgpdrawで表示される時、
画面上でどの程度の横幅と縦幅で表示されているか、というピクセル数を取得したいと考えています。

これができるようになると、オブジェクトを2D画面上で丸で囲んだりとか、エフェクトをかけやすくなるのですが、
画面上に表示されるオブジェクトの画面上の大きさ(3D上ではなく、2D上の大きさ)が分からないと、
2D上の画面に描写されている実際の大きさが不明の場合、例えば丸で囲むことができないわけです。



youdai

リンク

2023/10/4(Wed) 19:00:09|NO.100136

もしかしたら解決したかもしれませんが、ちょっと自信がありません。
もしかしたら、こういうことなのでしょうか?

2D画面に実際に描画されるオブジェクトの画面上の大きさの求め方(仮説)

A=オブジェクトの2D画面上の位置
B=オブジェクトの3D上の位置からZ軸(もしくは3D空間上で上方向に該当する軸)に対して垂直に、オブジェクトの高さ(もしくはオブジェクトの一番長い部位の位置)分移動した3D座標の2D画面上の位置

この場合、AとBの距離(2D画面上のオブジェクトの半径ということになる)の2倍が実際に2D画面上に表示される大まかなピクセル数なのでしょうか?
これは単なる思いつきなので理論上正しいのかちょっと自信がないのですけど、これで一応大まかな2D画面上の大きさが得られるかもしれません。

慌ただしいコメントの応答になってすみません。
buhioさんのgetposを使うというアドバイスがきっかけで思いつきました。アドバイス役立ちました。
自信がないけど、これで解決できたと思います。
ありがとうございました!



buhio

リンク

2023/10/4(Wed) 20:43:20|NO.100137

言葉足らずですいません。
少し冗長ですが、青い2点のように、座標が取得または計算できれば、画面上のピクセルが算出できるのではないかということでした。


#include "hgimg4.as" chdir dir_exe+"\\sample\\hgimg4" gpreset setcls CLSMODE_SOLID, $000000 ; 画面クリア設定 gpbox id_model,10 gpbox id_child1,1,$0000ff gpbox id_child2,1,$0000ff *main redraw 0 stick keys,1+4+2+8 if keys&1{addang id_model,0, 0.01,0} if keys&4{addang id_model,0,-0.01,0} if keys&2{addpos GBOBJ_CAMERA,0,0, 1} if keys&8{addpos GBOBJ_CAMERA,0,0,-1} getang id_model,x,y,z ddim fv,3 fv=-x,-y,-z fvdir fv,5,5,5 ;ローカル座標 getpos id_model,x,y,z setpos id_child1,x+fv.0,y+fv.1,z+fv.2;ローカル座標⇒ワールド座標 getang id_model,x,y,z ddim fv,3 fv=-x,-y,-z fvdir fv,-5,5,5 ;ローカル座標 getpos id_model,x,y,z setpos id_child2,x+fv.0,y+fv.1,z+fv.2;ローカル座標⇒ワールド座標 gplookat GPOBJ_CAMERA,x,y,z ;注視点 gpdraw getpos id_child1,x1,y1,z1 getpos id_child2,x2,y2,z2 gpcnvaxis x1,y1,z1,x1,y1,z1 gpcnvaxis x2,y2,z2,x2,y2,z2 color 0,255,0 line x1,y1,x2,y2 pos 0,0 dist=sqrt(powf(x1-x2,2)+powf(y1-y2,2)) mes "画面上の線分の長さ(ピクセル)="+dist redraw 1 await 1000/60 goto *main



youdai

リンク

2023/10/6(Fri) 19:09:59|NO.100153

返信ありがとうございます。参考にさせて頂きます。



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