React と Threejs を使用して VR パノラマ プロジェクトを作成する詳細なプロセス

React と Threejs を使用して VR パノラマ プロジェクトを作成する詳細なプロセス

最近、 Three.jsReactを使用して、720 度のパノラマ写真を閲覧できるプロジェクトを構築する方法を学んでいます。実現したいのは、2:1 の 720 度のパノラマを読み込むことです。作成プロセスを共有したいと思います。

1. フレームワークを構築し、必要なプラグインをインストールする

npx create-react-app parano // React プロジェクトを作成する npm install -S typescript // typescript をインストールします。これは入力支援プラグインであり、Panorama プロジェクトとはほとんど関係ありません npm install -S @types/three // typescript でサポートされている three.js プラグインをインストールします

2. パノラマコンポーネントを作成する

Pano コンポーネントは 720 枚のパノラマを読み込むために使用されます。

'react' から React をインポートします
import * as THREE from 'three' // Three.jsプラグインをインポート import Banner from './img/playground.jpg' // パノラマ画像をインポート // props型宣言 interface interface MyProps {
}
//状態型宣言インターフェースインターフェースMyState {
}
クラスPanoはReact.Component<MyProps, MyState>を拡張します。
  renderer: any = new THREE.WebGLRenderer() // レンダラーを作成 scene: any = new THREE.Scene() // シーンを作成 camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000) // カメラを作成 geometry = new THREE.SphereBufferGeometry(100, 60, 40) // パノラマを貼り付けるための球形コンテナを作成 material: any // テクスチャ マテリアル mesh: any
  コンストラクタ(props: any) {
    スーパー(小道具)
    this.state = {}
  }
  コンポーネントマウント() {
    this.geometry.scale(-1, 1, 1)
    テクスチャを新しいTHREE.TextureLoader().load(バナー)とします。
    this.material = 新しい THREE.MeshBasicMaterial({map: テクスチャ})
    this.mesh = 新しい THREE.Mesh(this.geometry, this.material)
    this.renderer.setSize(window.innerWidth, window.innerHeight)
    document.body.appendChild(this.renderer.domElement)
    this.scene.add(this.mesh)
    カメラの位置z = 0
    window.addEventListener('resize', this.onWindowResize, false)
    this.animate()
  }
	// ウィンドウサイズが変更されたときにパノラマの表示サイズを変更します onWindowResize = () => {
    this.camera.aspect = window.innerWidth / window.innerHeight
    this.camera.updateProjectionMatrix()
    this.renderer.setSize(window.innerWidth, window.innerHeight)
  }
	// フレームごとにレンダリング animate = () => {
    アニメーションフレームをリクエストします(this.animate)
    メッシュの回転y += 0.001
    this.renderer.render(this.scene、this.camera) をレンダリングします。
  }
  与える () {
    戻る (
      <div></div>
    )
  }
}
デフォルトのパノラマをエクスポート

3. PanoコンポーネントをAppコンポーネントに追加する

'react' から React をインポートします。
'./App.css' をインポートします。
'./pano' から Pano をインポートします。

関数App() {
 戻る (
  <div className="アプリ">
   <パノ />
  </div>
 );
}

デフォルトのアプリをエクスポートします。

この時点で、プロジェクトディレクトリでnpm run start実行して効果を確認します。

React と Threejs を使用して VR パノラマ プロジェクトを作成する詳細なプロセスに関するこの記事はこれで終わりです。React と Threejs を使用して VR パノラマ ビューを作成する方法に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Reactプロジェクトの新規作成からデプロイまでの実装例
  • VSCode のデバッグ react-native android プロジェクトのエラー問題を解決する
  • webpack5 を使用して 0 から 1 までの React プロジェクトを構築する方法
  • Reactプロジェクトのパッケージ化に基づくCSS参照パスエラーの解決策
  • Reactプロジェクトでantdのフォームコンポーネントを使用して、入力ボックスの値を動的に設定する
  • Vue または React プロジェクトの運用環境から console.log を削除する
  • Reactフロントエンドプロジェクトのパッケージを最適化する方法
  • npx create-react-app xxx を使用してプロジェクトを作成するときに報告されるエラーの解決策
  • WeChat公式アカウントでReactプロジェクトを実行する方法

<<:  And キーワードを使用した MySQL の複数条件クエリ ステートメント

>>:  LINUX での IPTABLES ファイアウォールの基本的な使用方法のチュートリアル

推薦する

HTMLノードの追加と削除の簡単な例

HTML ノードの追加と削除の簡単な例 HTML ノードの追加と削除の簡単な例<input t...

Linux プロセス管理ツール スーパーバイザーのインストールと設定のチュートリアル

環境: CentOS 7公式ドキュメント: http://supervisord.org/インストー...

MySQL はどのようにしてマスターとスレーブの一貫性を確保するのでしょうか?

目次MySQLマスタースレーブの基本原理3つのbinlog形式の比較混合形式のバイナリログが存在する...

dockerコマンドの使用にはsudoは必要ありません

docker デーモンは通常の TCP ポートではなくホストの Unix ソケットにバインドする必要...

Vue el-date-picker 動的制限時間範囲ケースの詳細な説明

2つの状況がある1. 開始時間と終了時間が同じボックス内にあります(今月のみ限定) 2. 開始時間と...

div要素に丸い境界線を追加する方法

以下のように表示されます。 CSSコードコンテンツをクリップボードにコピー分割{境界線: 2px 固...

JavaScript の実行コンテキストとコールスタックの詳細な説明

目次1. 実行コンテキストとは何か2. 実行コンテキスト スタックとは何ですか? 3. 実行コンテキ...

Vue の共通 A​​PI と高度な API の概要

目次次のチェックミックスイン$強制更新設定、削除フィルター指令その他の単純な共通プロパティとメソッド...

VMware Workstationはデバイス/資格情報ガードと互換性がありません

仮想マシンをインストールするときに、「VMware ワークステーションはデバイス/資格情報ガードと互...

クリックナンバーゲームを実装するネイティブJS

参考までに、クリックナンバーゲームをネイティブJSで実装しました。具体的な内容は以下のとおりです。最...

iframe が HTML 内のページにジャンプするのを防ぎ、iframe を使用して WeChat Web バージョンをページに埋め込む方法

私は、WinForm と HTML5 を組み合わせた小さなものを作りたいだけなのですが、突然、そこに...

Vue でバイナリ ファイル ストリームを受信して​​ PDF プレビューを実現する方法

バックグラウンド コントローラー @RequestMapping("/getPDFStre...

MYSQL 左結合の最適化 (10 秒から 20 ミリ秒)

目次【機能背景】 [生のSQL] 【独自SQL解析】 【分析手順】 [最適化されたSQL] 【最適化...

MySQL 8.0.11 インストール概要チュートリアル図

インストール環境: CAT /etc/os-release CentOS システムのバージョン情報を...

JS でオブジェクトを作成する 4 つの方法

目次1. リテラル値でオブジェクトを作成する2. 新しいキャラクターを使ってオブジェクトを作成する3...