Discuss Scratch

KimiruHamiru
New to Scratch
500+ posts

3Dについて話し合うトピック ※最初に#1を必ず読もう※

TigerCub2023 wrote:

頂点計算をもとにした3dエンジンを作っているのですが、色のデータがうまく行きません。
起動直後の状態から
[ピッチ v]を(-4)にする
とかで確実に再現する

ようなのでしばらく観察してみたのですが、

四角形を描くにあたって、
三角形2つを塗りつぶしたあと、
四角形のフチドリをstrokeする部分、

コードで言えば
ペンの太さを(2)にする
<略>
ペンを上げる
の辺り

を削除すると色の異常は起きなくなるようです。
現状、何が起こっているか特定できてない(あと塗りつぶしのロジックをちゃんと読めてない)のですが、
直観的には「塗りつぶしの手順の問題(ソートなどはうまく行っている)」のように思えました。
KimiruHamiru
New to Scratch
500+ posts

3Dについて話し合うトピック ※最初に#1を必ず読もう※

補足。
「ちゃんと読めてない」ので想像も混ざるのですが、現行のロジックは

四角形を描く
もし「中を塗るくらい面積がある」なら
 色指定
 四角の中を塗りつぶす
四角のりんかくを2ピクセルの線で描く

という手順になっているために、「一つの四角形がせまい(小さい、細い)場合」に、
「色指定をしないで線を描く」ということが起きているのかなと思いました。

これを

四角形を描く
色指定
もし「中を塗るくらい面積がある」なら
 四角の塗りつぶす
四角のりんかくを2ピクセルの線で描く //(不要なら何もしない)

などとすれば良さそうな気がします。
Mario-098
Scratcher
100+ posts

3Dについて話し合うトピック ※最初に#1を必ず読もう※

このプロジェクトについてなのですが、
obj file を読み込むときに 角度も設定できるようにしたいです。しかし、回転行列の計算順序によって差が生まれてしまうため、x,y,zそれぞれの向きがおかしくなってしまいます(分かりづらいです。ごめんなさい)。どうすれば解決できるでしょう

↓ここから下は署名です。いちいち手動で書いているわけではありません。

トピック・scratch内ですべての文字を描画することについて
#ScratchInScratchProject

html pleyer 作ってます(https://scratch.mit.edu/projects/863871016/)。開発中です。

最終更新2024年1月8日 @Mario-098 No Flash version detected
Jinenjo_000
Scratcher
100+ posts

3Dについて話し合うトピック ※最初に#1を必ず読もう※

>> #243
回転軸の取り方と角度の基準をちゃんと定義していますか?
例えばロール・ピッチ・ヨー角による表現があります。
https://www.sky-engin.jp/blog/eulerian-angles/#toc4
https://qiita.com/harmegiddo/items/96004f7c8eafbb8a45d0

Last edited by Jinenjo_000 (Jan. 17, 2024 12:00:26)

KimiruHamiru
New to Scratch
500+ posts

3Dについて話し合うトピック ※最初に#1を必ず読もう※

Mario-098 wrote:

このプロジェクトについてなのですが、
obj file を読み込むときに 角度も設定できるようにしたいです。しかし、回転行列の計算順序によって差が生まれてしまうため、x,y,zそれぞれの向きがおかしくなってしまいます(分かりづらいです。ごめんなさい)。どうすれば解決できるでしょう

「回転行列の計算順序によって差が生まれてしまう」について、数学的なことは実のところよくわからないのですが、

差し当たって現状のプログラム(スプライト「obj compiler」の定義「compile obj」のコード)だと
objファイル中の「頂点エントリ(「v 1 2 3」みたいな行)」
を、
「1要素ずつ」処理している
のが
問題をむずかしくしているように見えます。

つまり、
1つ(x座標のデータ)処理したら
次のデータ(y座標のデータ)を扱うときには、
直前のデータ(x座標のデータ)を忘れる仕組み
になっている

ために、
「回転操作(z軸回転ならx,yの、最低でも2値を同時に扱う必要がある)」
が、やりにくい、という話に見えます。

「x,y,zを、3つとも、まとめて扱う」かたち
にすれば、話は簡単になる(回転操作については、表示側でやってるのと同等になる)、ように思います。

「3つ同時に取り出す」のは
https://scratch.mit.edu/projects/293583919/
とかでやっているので、参考になるかもと思います。

別な切り口としては、「一通り、リスト「頂点情報」を完成させて、その後」で、
「完成した頂点情報リストから、x,y,zとしてデータを3つずつ取り出して、回転操作をして、同じところに書き戻す」
というのもあり(回転操作については、表示側でやってるのと同等に書ける)と思います。

Last edited by KimiruHamiru (Jan. 17, 2024 17:04:27)

KimiruHamiru
New to Scratch
500+ posts

3Dについて話し合うトピック ※最初に#1を必ず読もう※

Mario-098 wrote:

obj file を読み込むときに 角度も設定できるようにしたい

については、元データの由来とかにもよりますが、

Blenderで扱えているなら、
・Blenderの機能で、メッシュデータの方を回転する
・Blenderの機能で、objエクスポートする時にx,y,z軸を入れ替える
というのも、目的によっては、現実的かもしれません。

Powered by DjangoBB