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


HSPTV!掲示板


未解決 解決 停止 削除要請

2025
1113
Driphgimg4のgpmeshのバグ?3未解決


Drip

リンク

2025/11/13(Thu) 18:18:06|NO.104268

こんにちはDripです。

gpmesh命令を使用していた所、ある段階でポリゴンが崩壊する現象に遭遇しました。
スクリプトに問題はないようなので再現性を検証していたところ、どうも一定数のポリゴンを突破した時点で問題が発生するようです。
試しに以下のような簡易的なメッシュ生成テストを行ったところ、16000ポリゴン(?)を突破したあたりからおかしくなるようでした。

以下のスクリプトは四角面を指定ポリゴン数で円形に配置するサンプルです。
今は2000ポリゴンが指定されていますが、0を1つ増やして20000にして実行してみてください。正常に円形が形成できるでしょうか?
このサンプルでは大胆な崩壊現象は起こらないのですが、使用状況によってはポリゴンの崩壊が発生するので何らかのメモリ違反をしているような気がしています。

//HSP3.6〜3.7で動作確認済 max=2000 //←★ 2000ポリゴンでは大丈夫ですが20000ポリゴンだと? #include "hgimg4.as" chdir dir_exe+"\\sample\\hgimg4" gpreset setreq SYSREQ_CLSCOLOR,0 gpmeshclear //ポリゴン生成開始 repeat max fv=sin(m_pi/max*cnt*2)*30,-10.0,cos(m_pi/max*cnt*2)*30 //生成位置 gpmeshadd p1,fv-1,fv(1)-1,fv(2), 0,0,1, 0,0 gpmeshadd p2,fv+1,fv(1)-1,fv(2), 0,0,1, 1,0 gpmeshadd p3,fv-1,fv(1)+1,fv(2), 0,0,1, 0,1 gpmeshadd p4,fv+1,fv(1)+1,fv(2), 0,0,1, 1,1 gpmeshpolygon p1,p2,p3,p4 if cnt\5000=4999:{ //念のためアイドル(これは原因ではないっぽい) title "処理中..."+cnt:await 5 } if cnt>100000:dialog "10万ポリゴン以上の検証はやめておきます。":end loop gpmesh m *main redraw 0 gpdraw redraw 1 await 16 goto *main
この問題を回避する方法や使い方の誤りがありましたらコメントいただければ幸いです。
宜しくお願いいたします。



この記事に返信する


通りすがりのブタ

リンク

2025/11/13(Thu) 18:27:20|NO.104269

こんばんわ

確か頂点数に32767制限があったので、それですかね?
自分も一定以上のポリゴンモデルをgpmeshしたら正常に作成されない現象に当たりました。
もしそうならちょっと少ないので、増やして欲しいですね。

ちがったらごめん



Drip

リンク

2025/11/13(Thu) 22:06:06|NO.104270

通りすがりのブタさん素早い反応ありがとうございます。

なんと頂点数3万2千強で制限に達する場合があるのですか!?
としますと、四角ポリゴン換算で8000ポリゴン程度が安全ライン?
昨今ではキャラクターに数万ポリゴン使用されることもざらですから、これはかなり窮屈な制限になりますね。

何より本問題はある段階からポリゴンの崩壊が始まる(画面中がグチャグチャなポリゴンまみれになります)という安全性が確認できない問題というのがとても気がかりです。
上のサンプルでは一応5000ポリゴンごとに一旦gpmeshして再びgpmeshclearを実行することで例え20000個の面を生成しても正常に処理を完了しますが、内部的におかしなことになっていないかかなり不安です。
現在開発中の作品ではgpmesh依存の処理が多く、一つのモデルを数回のチャンクに分けて複数モデルで管理するような構想を練るべきか…いずれにしても色々諦めることになりそうです…



とおりすがりのブタ

リンク

2025/11/14(Fri) 09:18:31|NO.104271

はっきりとはしませんが、頂点数、このサンプルだとp4の値が65534を超えるあたりでポリゴンが崩れるように見えます。もしかすると32767ではなく65534頂点が制限なのかもしれませんが、マニュアルと整合性が取れなくなりますね。
通常の3Dモデルだと、頂点は共有される場合が多いので、3万もあれば十分なんでしょうが、おっしゃるようにチャンクを分ける必要がある場合もあると思います。

実際、拙作PiggyBox3Dも、この制約から16×16×16のボクセルという制限になった経緯があります。
ご参考になれば幸いです。



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.104268への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

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