ホームページ ウェブフロントエンド H5 チュートリアル HTML5 での WebGL 3D の概要 (パート 1) - WebGL ネイティブ開発が Web ページの新時代を切り開く 3D レンダリング_html5 チュートリアル スキル

HTML5 での WebGL 3D の概要 (パート 1) - WebGL ネイティブ開発が Web ページの新時代を切り開く 3D レンダリング_html5 チュートリアル スキル

May 16, 2016 pm 03:49 PM
3d webgl レンダリング

WebGL は、Web ページでの 3D レンダリングの新時代を開き、プラグインを使用せずに 3D コンテンツをキャンバスに直接レンダリングできるようになります。 WebGL はキャンバス 2D API と同じであり、スクリプトを通じてオブジェクトを操作するため、作業コンテキストの準備、データの準備、キャンバスへのオブジェクトの描画、レンダリングという手順は基本的に似ています。 2D との違いは、3D にはワールド、ライト、テクスチャ、カメラ、マトリックス、その他の専門知識など、より多くの知識が必要となることです。 WebGL には優れた中国語チュートリアルがあり、これは以下の使用方法のリファレンスの最初のリンクにあるため、ここでは何もしません。以下の内容は学習内容の簡単な概要にすぎません。

ブラウザのサポート
Microsoft は独自のグラフィックス開発計画を持っており、WebGL をサポートしていないため、IE は現在、プラグインをインストールする以外に WebGL を実行できません。 Chrome、FireFox、Safari、Opera などの他の主流ブラウザの場合は、最新バージョンをインストールするだけです。最新のブラウザをインストールすることに加えて、グラフィック カード ドライバーも最新であることを確認する必要があります。
これらをインストールした後、ブラウザを開いて次の URL を入力して、ブラウザの WebGL サポートを確認できます: http://webglreport.sourceforge.net/。

上記のブラウザを正常にインストールした後も WebGL を実行できない場合は、WebGL サポートを強制的にオンにしてみてください。開く方法は次のとおりです:
Chrome ブラウザ
次の具体的な手順では、Windows オペレーティング システムを例に挙げます。 Chrome のショートカットを見つけます。ブラウザでショートカット メソッドを右クリックし、ターゲット ボックスでプロパティを選択し、chrome.exe の後ろの引用符の後に次の内容を追加します。 --enable-webgl--ignore-gpu-blacklist--allow-file-access-from-files

[OK] をクリックして Chrome を閉じ、このショートカットを使用して Chrome ブラウザを起動します。

いくつかのパラメータの意味は次のとおりです:
--enable-webgl は WebGL サポートを有効にすることを意味します。
--ignore-gpu-blacklist は GPU ブラックリストを無視することを意味します。これは、グラフィックスが存在することを意味します。カードと GPU が古すぎるなどの理由から、WebGL を実行することはお勧めできません。このパラメータを使用すると、ブラウザはこのブラックリストを無視して、WebGL を強制的に実行できます。リソースをローカルにロードできるようにするため、WebGL 開発者ではなく、WebGL の開発やデバッグを行う必要はないが、WebGL デモを見てみたいだけの場合は、このパラメータを追加する必要はありません。

Firefox ブラウザ

Firefox ユーザーは、ブラウザのアドレス バーに「about:config」と入力し、Enter キーを押して、フィルター (フィルター) で「webgl」を検索し、webgl を置き換えてください。 .force-enabled を true に設定し、webgl.disabled を false に設定します。フィルターで「security.fileuri.strict_origin_policy」を検索し、security.fileuri.strict_origin_policy を false に設定します。その後、現在開いている Firefox ウィンドウをすべて閉じ、Firefox を再起動します。
最初の 2 つの設定は WebGL サポートを強制的にオンにするもので、最後の security.fileuri.strict_origin_policy 設定はローカル ソースからのリソースのロードを許可するものです。WebGL 開発者でない場合は、その必要はありません。 WebGL の開発やデバッグを行うが、WebGL のデモを確認したいだけの場合は、この項目を設定する必要はありません。

Safari ブラウザ

メニューで「プロパティ」→「詳細設定」を見つけ、「開発メニューを表示」を選択し、「開発」メニューに移動して「WebGL を有効にする」を選択します。

開発ステップ

次のコードは、関連する概念を簡単に要約したもので、リファレンスの中国語チュートリアルからのものであり、より多くの 3D 知識が必要です。興味のある学生は、実践リファレンスの中国語チュートリアルに直接ジャンプできます。ここで説明する内容よりもはるかに詳細で正確です。この楽しみに参加した生徒は、コードの各行の意味を深く掘り下げることなく、ただ見るだけで済みます。

準備
言うまでもなく、これはレンダリングコンテナとしてページに Canvas 要素を追加するためです。例:


コードをコピーコードは次のとおりです:

お使いのブラウザは HTML5 キャンバス要素をサポートしていないようです。

< /body>


いよいよ、正式にスクリプトの作成を開始します。



コードをコピーします コードは次のとおりです:
functionstart(){
varcanvas=document.getElementById("glcanvas");
initGL(canvas);
initShaders() ;
initBuffers();
gl.clearColor(0.0,0.0,0.0,1.0);
gl.enable(gl.DEPTH_TEST);
drawScene();
}


ここでのいくつかのメソッドは、典型的な WebGL 描画手順を表しています:

ステップ 1: WebGL 作業環境を初期化する - initGL
このメソッドのコードは次のとおりです:

コードをコピーします
コードは次のとおりです:

vargl;
functioninitGL(canvas) {
gl=null;
try{
//Trytograbthestandardcontext.Ifitfails,fallbacktoexperimental.
gl=canvas.getContext("webgl")||canvas.getContext("experimental-webgl");
}
catch(e){} //GLcontext がない場合は、今すぐにあげてください
if(!gl){
alert("UnabletoinitializeWebGL.Yourbrowsermaynotsupportit.");
}
}

このメソッドは WebGL の描画環境を取得するためのものですが、現在の WebGL の標準ではサポートされていないため、canvas.getContext メソッドにパラメータ「webgl」を渡す必要があります。最終的には、実験段階で使用されるパラメータはすべて「experimental-webgl」です。もちろん、標準が設定された後に、canvas.getContext("experimental-webgl") を直接呼び出すこともできます。

ステップ 2: シェーダーの初期化 - initShaders
シェーダーの概念は、率直に言って、グラフィックス カードの操作命令です。 3D シーンを構築するには、色や位置などの情報を大量に計算する必要があり、これらの計算をソフトウェアで実行すると、速度が非常に遅くなります。したがって、グラフィックス カードにこれらの操作を計算させると、これらの計算の実行方法がシェーダーによって指定され、非常に高速になります。シェーダ コードは GLSL と呼ばれるシェーダ言語で記述されますが、ここでは説明しません。
シェーダーは HTML で定義し、コードで使用できます。もちろん、プログラム内で文字列を使用してシェーダーを定義する場合にも同じことが当てはまります。
最初に定義部分を見てみましょう:

コードをコピーします
コードは次のとおりです:


precisionmediumpfloat;
varyingvec4vColor;
voidmain(void){
gl_FragColor =vColor;
}


attributevec3aVertexPosition;
attributevec4aVertexColor;
uniformmat4uMVMatrix;
uniformmat4uPMatrix;
varyingvec4vColor;
voidmain(void){
gl_Position=uPMatrix*uMVMatrix*vec4(aVertexPosition,1.0);
vColor=aVertexColor;
}
< /script>

ここには、フェイス シェーダーと頂点シェーダーの 2 つのシェーダーがあります。
これら 2 つのシェーダーについて、ここで説明する必要がありますが、コンピューターの 3D モデルは基本的に三角形のパッチを組み合わせた点によって記述され、頂点シェーダーはこれらの点のデータを処理し、サーフェス シェーダーは補間によって処理されます。三角パッチ上の点のデータを処理します。
上で定義した頂点シェーダーは頂点の位置と色の計算方法を定義し、サーフェス シェーダーは補間点の色の計算方法を定義します。実際のアプリケーションシナリオでは、シェーダーでのライトの処理などのエフェクトも関係します。
シェーダーを定義します。プログラム内でシェーダーを見つけて使用できます。

コードをコピー
コードは次のとおりです。

varshaderProgram;
functioninitShaders(){
varfragmentShader=getShader(gl,"shader-fs");
varvertexShader=getShader(gl,"shader-vs " );
shaderProgram=gl.createProgram();
gl.attachShader(shaderProgram,vertexShader);
gl.attachShader(shaderProgram, flagmentShader);
gl.linkProgram(shaderProgram);
if(!gl.getProgramParameter(shaderProgram,gl.LINK_STATUS)){
alert("Couldnotinitialiseshaders");
}
gl.useProgram(shaderProgram);
shaderProgram.vertexPositionAttribute=gl.getAttribLocation ( shaderProgram, "aVertexPosition");
gl.enableVertexAttribArray(shaderProgram.vertexPositionAttribute);
shaderProgram.vertexColorAttribute=gl.getAttribLocation(shaderProgram, "aVertexColor");
shaderProgram.pMatrixUniform=gl.getUniformLocation(shaderProgram, "uPMatrix");
shaderProgram.mvMatrixUniform=gl.getUniformLocation(shaderProgram,"uMVMatrix");
}


シェーダーはありますが、どうすればグラフィック カードに実行させることができますか? プログラムはこの種のブリッジであり、その機能は基本的にグラフィック カードにシェーダー コードを実行させることです。指定されたモデルデータ。
ここでは補助メソッド getShader も使用されます。このメソッドは、HTML ドキュメントを走査し、シェーダーの定義を検索し、定義を取得した後にシェーダーを作成します。

コードをコピーします
コードは次のとおりです:

functiongetShader(gl,id){
varshaderScript,theSource,currentChild,shader;
shaderScript=document.getElementById(id);
if(!shaderScript){
returnnull;
}
theSource="";
currentChild =shaderScript.firstChild;
while (currentChild){
if(currentChild.nodeType==currentChild.TEXT_NODE){
theSource =currentChild.textContent;
}
currentChild=currentChild.nextSibling;
}
if( shaderScript.type=="x-shader/x-fragment"){
shader=gl.createShader(gl.FRAGMENT_SHADER);
}elseif(shaderScript.type== "x-shader/x-vertex" ){
shader=gl.createShader(gl.VERTEX_SHADER);
}else{
//Unknownshadertype
returnnull;
}
gl .shaderSource(shader,theSource);
//シェーダープログラムをコンパイルします
gl.compileShader(shader);
//コンパイルが成功したかどうかを確認します
if(!gl.getShaderParameter(shader,gl.COMPILE_STATUS)){
alert("Anerroroccurredcompilingtheshaders:" gl.getShaderInfoLog(shader));
returnnull;
}
returnshader;
}

ステップ 3: 作成/モデル データのロード - initBuffers
これらの小さな例では、モデル データは基本的に直接生成されます。実際のプログラムでは、これらのデータはモデルからロードされる必要があります:

コードをコピーします
コードは次のとおりです:

vartriangleVertexPositionBuffer;
vartriangleVertexColorBuffer;
functioninitBuffers(){
triangleVertexPositionBuffer=gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER,triangleVertexPositionBuffer);
varvertices=[
0.0,1.0,0.0,
-1.0,-1.0,0.0,
1.0,-1.0,0.0
];
gl.bufferData(gl.ARRAY_BUFFER,newFloat32Array(vertices),gl.STATIC_DRAW);
triangleVertexPositionBuffer.itemSize=3;
triangleVertexPositionBuffer.numItems=3 ;
triangleVertexColorBuffer=gl.createBuffer( );
gl.bindBuffer(gl.ARRAY_BUFFER,triangleVertexColorBuffer);
varcolors=[
1.0,0.0,0.0,1.0,
0.0,1.0, 0.0,1.0,
0.0,0.0 ,1.0,1.0
];
gl.bufferData(gl.ARRAY_BUFFER,newFloat32Array(colors),gl.STATIC_DRAW);
triangleVertexColorBuffer.itemSize=4;
triangleVertexColorBuffer.numItems=3;
}

上記のコードは、三角形の頂点と頂点のカラー データを作成し、バッファーに配置します。

ステップ 4: レンダリング -drawScene
データを準備したら、レンダリングのために WebGL に渡すだけです。ここで gl.drawArrays メソッドが呼び出されます。コードを確認します:

コードをコピーします
コードは次のとおりです:

functiondrawScene(){
gl.viewport(0,0,gl.viewportWidth,gl.viewportHeight);
gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT);
pMatrix=okMat4Proj(45.0,gl) .viewportWidth/gl.viewportHeight ,0.1,100.0);
mvMatrix=okMat4Trans(-1.5,0.0,-7.0);
gl.bindBuffer(gl.ARRAY_BUFFER, TriangleVertexPositionBuffer);
gl.vertexAttribPointer(shaderProgram) .vertexPositionAttribute,triangleVertexPositionBuffer.ite mSize ,gl.FLOAT,false,0,0);
gl.bindBuffer(gl.ARRAY_BUFFER,triangleVertexColorBuffer);
gl.vertexAttribPointer(shaderProgram.vertexColorAttribute,triangleVertexColorBuffer.itemSize,gl. FLOAT,false,0,0 );
setMatrixUniforms();
gl.drawArrays(gl.TRIANGLES,0,triangleVertexPositionBuffer.numItems);
}

この関数は、まず 3D 世界の背景を黒に設定し、次に射影行列を設定し、描画するオブジェクトの位置を設定して、バッファ内の頂点と色のデータに基づいてオブジェクトを描画します。投影行列とモデル ビューの四角形を生成するための補助メソッド (Oak3D グラフィックス ライブラリの行列補助メソッドを使用) もいくつかありますが、これらはトピックとはほとんど関係がないため、ここでは詳しく説明しません。
基本的にはこれですべてのプロセスです。より複雑なテクスチャやライトなどはすべて、これらに基づいていくつかの WegGL 機能を追加することによって実装されます。詳細な例については、次の中国語のチュートリアルを参照してください。

どうですか?ネイティブ WebGL を使用して開発するのはどのような感じですか? 3D に関する深い知識が必要なだけでなく、さまざまな実装の詳細についても知る必要があります。 WebGL は、さまざまなアプリケーション シナリオに柔軟に適応するためにこれを実行しますが、私のようなほとんどの非専門家にとって、多くの詳細を知る必要はありません。これにより、このセクションで使用される Oak3D ライブラリなど、開発を支援するさまざまなクラス ライブラリが誕生しました (WebGL 開発を示すために、この例では行列補助メソッドのみが使用されています)。次のセクションでは、一般的に使用される Three.js グラフィックス ライブラリを紹介します。

実用的なリファレンス:
中国語チュートリアル: http://www.hiwebgl.com/?p=42

開発センター: https://developer.mozilla.org/en/WebGL

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

なぜ自動運転ではガウス スプラッティングが非常に人気があるのに、NeRF は放棄され始めているのでしょうか? なぜ自動運転ではガウス スプラッティングが非常に人気があるのに、NeRF は放棄され始めているのでしょうか? Jan 17, 2024 pm 02:57 PM

上記と著者の個人的な理解 3 次元ガウシアンプラッティング (3DGS) は、近年、明示的な放射線フィールドとコンピューター グラフィックスの分野で出現した革新的なテクノロジーです。この革新的な方法は、数百万の 3D ガウスを使用することを特徴とし、主に暗黙的な座標ベースのモデルを使用して空間座標をピクセル値にマッピングする神経放射線場 (NeRF) 方法とは大きく異なります。明示的なシーン表現と微分可能なレンダリング アルゴリズムにより、3DGS はリアルタイム レンダリング機能を保証するだけでなく、前例のないレベルの制御とシーン編集も導入します。これにより、3DGS は、次世代の 3D 再構築と表現にとって大きな変革をもたらす可能性のあるものとして位置付けられます。この目的を達成するために、私たちは 3DGS 分野における最新の開発と懸念について初めて体系的な概要を提供します。

Microsoft Teams の 3D Fluent 絵文字について学ぶ Microsoft Teams の 3D Fluent 絵文字について学ぶ Apr 24, 2023 pm 10:28 PM

特に Teams ユーザーの場合は、Microsoft が仕事中心のビデオ会議アプリに 3DFluent 絵文字の新しいバッチを追加したことを覚えておく必要があります。 Microsoft が昨年 Teams と Windows 向けの 3D 絵文字を発表した後、その過程で実際に 1,800 を超える既存の絵文字がプラットフォーム用に更新されました。この大きなアイデアと Teams 用の 3DFluent 絵文字アップデートの開始は、公式ブログ投稿を通じて最初に宣伝されました。 Teams の最新アップデートでアプリに FluentEmojis が追加 Microsoft は、更新された 1,800 個の絵文字を毎日利用できるようになると発表

CLIP-BEVFormer: BEVFormer 構造を明示的に監視して、ロングテール検出パフォーマンスを向上させます。 CLIP-BEVFormer: BEVFormer 構造を明示的に監視して、ロングテール検出パフォーマンスを向上させます。 Mar 26, 2024 pm 12:41 PM

上記および筆者の個人的な理解: 現在、自動運転システム全体において、認識モジュールが重要な役割を果たしている。道路を走行する自動運転車は、認識モジュールを通じてのみ正確な認識結果を得ることができる。下流の規制および制御モジュール自動運転システムでは、タイムリーかつ正確な判断と行動決定が行われます。現在、自動運転機能を備えた自動車には通常、サラウンドビューカメラセンサー、ライダーセンサー、ミリ波レーダーセンサーなどのさまざまなデータ情報センサーが搭載されており、さまざまなモダリティで情報を収集して正確な認識タスクを実現しています。純粋な視覚に基づく BEV 認識アルゴリズムは、ハードウェア コストが低く導入が容易であるため、業界で好まれており、その出力結果はさまざまな下流タスクに簡単に適用できます。

カメラかライダーを選択しますか?堅牢な 3D オブジェクト検出の実現に関する最近のレビュー カメラかライダーを選択しますか?堅牢な 3D オブジェクト検出の実現に関する最近のレビュー Jan 26, 2024 am 11:18 AM

0.前面に書かれています&& 自動運転システムは、さまざまなセンサー (カメラ、ライダー、レーダーなど) を使用して周囲の環境を認識し、アルゴリズムとモデルを使用することにより、高度な知覚、意思決定、および制御テクノロジーに依存しているという個人的な理解リアルタイムの分析と意思決定に。これにより、車両は道路標識の認識、他の車両の検出と追跡、歩行者の行動の予測などを行うことで、安全な運行と複雑な交通環境への適応が可能となり、現在広く注目を集めており、将来の交通分野における重要な開発分野と考えられています。 。 1つ。しかし、自動運転を難しくしているのは、周囲で何が起こっているかを車に理解させる方法を見つけることです。これには、自動運転システムの 3 次元物体検出アルゴリズムが、周囲環境にある物体 (位置を含む) を正確に認識し、記述することができる必要があります。

Windows 11 のペイント 3D: ダウンロード、インストール、および使用ガイド Windows 11 のペイント 3D: ダウンロード、インストール、および使用ガイド Apr 26, 2023 am 11:28 AM

新しい Windows 11 が開発中であるというゴシップが広まり始めたとき、すべての Microsoft ユーザーは、新しいオペレーティング システムがどのようなもので、何をもたらすのかに興味を持ちました。憶測を経て、Windows 11が登場しました。オペレーティング システムには新しい設計と機能の変更が加えられています。いくつかの追加に加えて、機能の非推奨と削除が行われます。 Windows 11 に存在しない機能の 1 つは Paint3D です。描画、落書き、落書きに適したクラシックなペイントは引き続き提供していますが、3D クリエイターに最適な追加機能を提供する Paint3D は廃止されています。追加機能をお探しの場合は、最高の 3D デザイン ソフトウェアとして Autodesk Maya をお勧めします。のように

Kujiale で直交上面ビューをレンダリングする方法_Kijiale で直交上面ビューをレンダリングするチュートリアル Kujiale で直交上面ビューをレンダリングする方法_Kijiale で直交上面ビューをレンダリングするチュートリアル Apr 02, 2024 pm 01:10 PM

1. まず、Kijiale でレンダリングするデザインプランを開きます。 2. 次に、レンダリング メニューでトップ ビュー レンダリングを開きます。 3. 次に、トップ ビュー レンダリング インターフェイスのパラメーター設定で [直交] をクリックします。 4. 最後に、モデルの角度を調整した後、[今すぐレンダリング]をクリックして直交上面ビューをレンダリングします。

カード1枚で30秒でバーチャル3D嫁をゲット! Text to 3D は、毛穴の詳細が明確な高精度のデジタル ヒューマンを生成し、Maya、Unity、その他の制作ツールとシームレスに接続します カード1枚で30秒でバーチャル3D嫁をゲット! Text to 3D は、毛穴の詳細が明確な高精度のデジタル ヒューマンを生成し、Maya、Unity、その他の制作ツールとシームレスに接続します May 23, 2023 pm 02:34 PM

ChatGPT は AI 業界に鶏の血を注入し、かつては考えられなかったすべてのことが今日では基本的な慣行になりました。進化を続ける Text-to-3D は、AIGC 分野において Diffusion(画像)、GPT(テキスト)に次ぐホットスポットとされ、前例のない注目を集めています。いいえ、ChatAvatar と呼ばれる製品が控えめなパブリック ベータ版として公開され、すぐに 700,000 回を超えるビューと注目を集め、Spacesoftheweek で特集されました。 △ChatAvatarは、AIが生成した単一視点/多視点の原画から3Dの様式化されたキャラクターを生成するImageto3D技術にも対応しており、現在のベータ版で生成された3Dモデルは広く注目を集めています。

自動運転のための 3D 視覚認識アルゴリズムの詳細な解釈 自動運転のための 3D 視覚認識アルゴリズムの詳細な解釈 Jun 02, 2023 pm 03:42 PM

自動運転アプリケーションの場合、最終的には 3D シーンを認識することが必要になります。理由は簡単で、車両は画像から得られる知覚結果に基づいて運転することはできませんし、人間のドライバーであっても画像に基づいて運転することはできません。物体までの距離やシーンの奥行き情報は2D認識結果に反映できないため、自動運転システムが周囲の環境を正しく判断するための鍵となります。一般に、自動運転車の視覚センサー(カメラなど)は、車体上部または車内のバックミラーに設置されます。どこにいても、カメラが取得するのは、現実世界を透視図 (PerspectiveView) (世界座標系から画像座標系) に投影したものです。この視点は人間の視覚システムに非常に似ており、

See all articles