SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Curl 3D Gallery技術解説(AD)

Curl 3Dアプリケーションにおける壁判定処理の考え方

第3回

  • X ポスト
  • このエントリーをはてなブックマークに追加

 「Curl 3D Gallery」のような3次元空間を自由に動き回るようなアプリケーションの場合、必要不可欠となる処理があります。その1つが「壁判定処理」です。今回の記事では、壁判定処理の一見分かりにくい方法論を、図を用いて簡潔に説明していきます。

  • X ポスト
  • このエントリーをはてなブックマークに追加

壁判定とは

 「Curl 3D Gallery」のような3次元空間を自由に動き回るようなアプリケーションの場合、必要不可欠となる処理に「壁判定処理」があります。昨今の3Dゲームでもそうですが、建物の外壁を通り抜けることはありえませんし、不用意に崖や屋上から飛び降りてしまうとダメージを受けたり、キャラクターが減ったりします。これらには、今回ご紹介する壁判定処理により実現されています。

 では、壁判定処理とはどのようなものなのでしょうか?

 先を急ぐ前に、視点の移動方法を簡単に説明しておきます。視点移動は視点位置に進行方向ベクトル×1回での移動距離を加算することにより行っています。3Dゲームでは、この移動の間にカメラを上下させることで、走っているような雰囲気を出しているものもあるようです。

 では、「Curl 3D Gallery」の壁判定処理をみていきましょう。壁判定処理では、壁判定有効距離、接近猶予距離、接近限界距離の3つの距離レベルを用いて処理を行っています。

  • 壁判定有効距離:処理高速化のために壁面判定の詳細処理を行う距離。

     壁面が、この距離以上離れている(※1)と壁判定処理は行いません。

  • 接近猶予距離:移動前の視点位置の調整距離。
  • 接近限界距離:移動後の視点位置の許容距離。
(※1)

 ボックスで判断することでより高速な処理を行っています。

これまでの連載

  1. Curl 3Dアプリケーション作成の基礎
  2. Curl 3Dアプリケーションのテクスチャマッピング

壁判定の手順

 具体的には、以下のような壁判定処理を行っています(以降、現在の視点位置を「現視点位置」、移動後の仮の視点位置を「新視点位置」とします)。

 以下の1~3は、前進を行う際に一連の処理として実行します。前進動作が連続する場合(移動ボタンが押されている場合や、マウス操作を行っている場合)は、この一連の処理が繰り返し行われます。複雑なことを行っていそうですが、次ページで図解いたします。図を見ればご理解頂けると思います。

1)壁判定必要性の確認

  • 現視点位置から壁判定有効距離内に面が存在しない場合は、新視点位置とし、以降の判定処理は行われません。

 一歩進んだ先に壁があるかないかの判定です。壁がない場合は一歩進みます。

2)移動前の視点位置での確認

  • 現視点位置の進行方向で接近猶予距離以内に面がある場合、現視点位置を進行方向逆に、接近猶予距離だけ離れた位置を新視点位置とする。
  • 現視点位置の進行方向左側で接近猶予距離以内に面がある場合、現視点位置を進行方向右側に、接近猶予距離だけ離れた位置を新視点位置とする。
  • 現視点位置の進行方向右側で接近猶予距離以内に面がある場合、現視点位置を進行方向左側に、接近猶予距離だけ離れた位置を新視点位置とする。

 一歩進んだ際、壁に近づきすぎているかどうかの判定です。壁に正対しているときは、あまり意味をなしませんが、壁に斜めに向かってジグザグに進む際に有効な処理となります。つまり、壁に近づきすぎていた場合に壁から距離を取り、壁から離れた方向に位置をずらして、進めるようにしています。

3)移動後の視点位置の確認

  • 新視点位置の進行方向で接近限界距離以内に面がある場合、現視点位置のままとする。
  • 新視点位置の進行方向左側で接近限界距離以内に面がある場合、現視点位置のままとする。
  • 新視点位置の進行方向右側で接近限界距離以内に面がある場合、現視点位置のままとする。

 2番目の判定を行い壁から離れた結果、それでも壁に近すぎる場合は移動そのものを取り消します。こちらも壁に正対しているときは意味をなさない処理ですが、斜めに向かって壁に接近した際に必要になります。

次のページ
手順の図解

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Curl 3D Gallery技術解説連載記事一覧

もっと読む

この記事の著者

尾松 秀紀(オマツ ヒデキ)

2度目の成人式を過ぎても、なお、現役で組んでたりします。 ^__^;「ものづくり」は大好きな2児の父親です。真新しい技術には興味ありありで、暇を作っては、試してみたりしています。機会があれば、いろいろご紹介していきたいと思いますので、今後とも、よろしくお願いします。P.S. 株式会社ベーシック:関西事業所は...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3929 2009/06/19 16:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング