質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

Q&A

1回答

1224閲覧

ワイヤーフレーム3Dでの最適な陰線処理

shiroemiya12

総合スコア4

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

0グッド

0クリップ

投稿2020/02/17 03:19

編集2020/02/18 15:26

実現したいこと

DXライブラリ(そしてマイコンへの移植を見据えて)にてワイヤーフレームのFPSを作ろうと思い製作中です。
draw_fpsクラスにて基本的な点、線の描画を作成したので、遮蔽物に対する陰線処理を実装しようと思いましたが、そこで躓いてしまいました。
遮蔽物はy軸に平行な面のみで構成した柱のような物体です。
方法として思いついた方法は、線をdiv1の数だけ分割して描画し、分割した線について遮蔽物をまたいでいたら描画しないスイッチをオンにし、通り抜けたらスイッチをオフにするという感じです。(間を分割した線で埋めています。)

github.com/yabushita0312/near3D_engine
こちらにソースがあります、実行するとwasdとマウスで操作できます。

質問として、

・より最適な方法はありますか?
・おかしな箇所の指摘

をお願いします。
情報が得られなかったこともあり少々あいまいな質問であることをお許しください。

現在一辺ごとにきちんととれているかを確認したところ、裏面を向いたときに内部から押しのけることができていないようです。
現在の処理を改良する形で動いています。

dameブランチにて改良を試行錯誤しています。左から右に流れるような角度から見た際に交差している点を取得できていないことが判明しました。
その部分以外の角度についてはおおむね陰線を取得できています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

「どこぞにソースがあるから勝手に解読して問題を見つけろ」というのでは回答というかアドバイスは得られにくいのではないでしょうか.

…そんなわけで,ソースや動きを全く見ずにタイトルだけに反応した話になりますが…


「面」を考えた普通の3Dな方法(Zバッファ法とか,ペインタアルゴリズムとか)をベースに考えてはどうでしょうか.
例えば,

遮蔽物はy軸に平行な面のみで構成した柱のような物体

という制約条件(?)の話が,
「y軸」というのがカメラ座標系における「上下方向」だという強い制約
(すなわち,カメラが「左右方向への旋回」しかしない的な(あー,伝えにくい))
なのであれば,
Zバッファ法を使うにしても,遮蔽物に関するZバッファ更新処理は著しく簡潔な処理になると思います.

投稿2020/02/20 08:46

fana

総合スコア11954

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shiroemiya12

2020/02/20 14:47

アドバイスありがとうございます。処理時間はともかくほぼほぼ修正できたので、あとはより最適な方法はないかといったところです。 1993なfpsのあの感じですね、わかります。今回はx軸回転もあるので不可能ですが…
fana

2020/02/21 01:36 編集

・面の内側の色は背景色(?)に固定 ・ワイヤーフレーム用の線を描く というだけの「普通の3Dの描画」を行えば,とりあえず絵的には「ワイヤーフレーム」なものが出来上がるはず. あとは,それをガチで作るんじゃなくて,APP特有の都合に基づいてどこまで簡単化がでるか? という方向で考えていくなら,とりあえず処理アルゴリズム面の「どうやってやるの?」には陥らないかな,とか.そんな雰囲気の話を書きました. 線と線の交差を調べて… という感じでどうにかできんか?とか考えていくと,(私の場合,ですが)どうしても詰みます. 例えば,カメラの目の前に壁があって,その壁のすべての辺(ワイヤーフレームで描画する線に相当)がカメラの視野外である状況とか. (高校生の頃にGameBoyの「X」みたいなのを作ろうとして陰線の問題を解決できなかった思い出)
ikadzuchi

2020/03/07 03:36

ちょっと気になったのでXを見てみましたが、隠線処理は自分自身の裏側を消すだけで、他者からの遮蔽に対しては行われていませんね。
fana

2020/03/09 05:11

そうでしたか. それだと,線画なシーンはカリングのみということか… トンネルのシーンは面画っぽかったのでそこだけ描画方法が違うのかも?
ikadzuchi

2020/03/10 15:04

なるほど確かにトンネルでは板が置かれたりカーブの先が隠れたりしていますね。描画方法が違いそうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問