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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

WebGL

WebGL(ウェブジーエル)は、ウェブブラウザで 3次元コンピュータグラフィックスを表示させるための標準仕様です。

Q&A

0回答

1282閲覧

[WebGL] なぜ無限ループする構造にしないのか知りたい。opengl との違い

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

WebGL

WebGL(ウェブジーエル)は、ウェブブラウザで 3次元コンピュータグラフィックスを表示させるための標準仕様です。

0グッド

0クリップ

投稿2021/04/24 04:50

編集2021/04/24 09:20

提示コードの最下部のwindow.onload ですがなぜc++のopenGLと違って無限ループする構造に出来ない。しないのでしょうか?

参考Github : https://github.com/mdn/webgl-examples/tree/gh-pages/tutorial/sample2

js

1 2// 3// エントリーポイント 4// 5function main() { 6 const canvas = document.querySelector('#glcanvas'); 7 const gl = canvas.getContext('webgl'); 8 9 10 //webGLコンテキストの作成に失敗した時 11 if (!gl) { 12 alert("webGLコンテキストの作成失敗"); 13 return; 14 } 15//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 16 // 頂点シェーダーコード 17 const vsSource = ` 18 attribute vec4 aVertexPosition; 19 20 uniform mat4 uModelViewMatrix; 21 uniform mat4 uProjectionMatrix; 22 23 void main() { 24 gl_Position = uProjectionMatrix * uModelViewMatrix * aVertexPosition; 25 } 26 `; 27 28 // フラグメントシェーダー 29 const fsSource = ` 30 void main() { 31 gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); 32 } 33 `; 34//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 35 //シェーダープログラムを作成 36 const shaderProgram = initShaderProgram(gl, vsSource, fsSource); 37 38 39 const programInfo = { 40 program: shaderProgram, 41 attribLocations: { 42 vertexPosition: gl.getAttribLocation(shaderProgram, 'aVertexPosition'), 43 }, 44 45 uniformLocations: { 46 projectionMatrix: gl.getUniformLocation(shaderProgram, 'uProjectionMatrix'), 47 modelViewMatrix: gl.getUniformLocation(shaderProgram, 'uModelViewMatrix'), 48 }, 49 }; 50 51 //描画するオブジェクト 52 const buffers = initBuffers(gl); 53 54 // Draw the scene 55 drawScene(gl, programInfo, buffers); 56} 57 58//バッファを初期化 59function initBuffers(gl) 60{ 61 62 // 正方形の位置用のバッファを作成します。 63 const positionBuffer = gl.createBuffer(); 64 65 //バッファを適用 66 gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer); 67 68 //正方形の頂点の配列 69 const positions = [ 70 1.0, 1.0, 71 -1.0, 1.0, 72 1.0, -1.0, 73 -1.0, -1.0, 74 ]; 75 76 //バッファーオブジェクトのデータストアを初期化 77 gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(positions),gl.STATIC_DRAW); 78 79 return { 80 position: positionBuffer, 81 }; 82} 83 84 85//シーンを描画 86function drawScene(gl, programInfo, buffers) 87{ 88 gl.clearColor(0.0, 0.0, 0.0, 1.0); // カラーバッファを初期化 89 gl.clearDepth(1.0); // 深度バッファを初期化 90 gl.enable(gl.DEPTH_TEST); // 深度テスト 91 gl.depthFunc(gl.LEQUAL); // 深度比較する値を設定 92 93 //キャンバスに描画を開始する前に、キャンバスをクリア 94 gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); 95 96 97 //パースペクティブマトリックスを作成します 98 const fieldOfView = 45 * Math.PI / 180; // in radians 99 const aspect = gl.canvas.clientWidth / gl.canvas.clientHeight; 100 const zNear = 0.1; 101 const zFar = 100.0; 102 103 //射形行列 104 const projectionMatrix = mat4.create(); 105 mat4.perspective(projectionMatrix,fieldOfView,aspect,zNear,zFar); 106 107 //ビュー行列 108 109 //平行移動 110 let translate = new mat4.create(); 111 mat4.translate(translate,translate,[-0.0, 0.0, -4.0]); 112 113 //回転 114 let rotation = new mat4.create(); 115 mat4.rotate(rotation,rotation,0,[0.0, 0.0, 1.0]); 116 117 //拡大縮小 118 let scale = new mat4.create(); 119 mat4.scale(scale,scale,[1.0,1.0,1.0]); 120 121 122// translate * rotate * scale 123 let modelViewMatrix = new mat4.create(); 124 let rs = new mat4.create(); 125 let trs = new mat4.create(); 126 mat4.multiply(rs,rotation,scale); 127 mat4.multiply(trs,translate,rs); 128 modelViewMatrix = trs; 129 130 131 132 gl.bindBuffer(gl.ARRAY_BUFFER, buffers.position); //バッファーを適用 133 gl.vertexAttribPointer(programInfo.attribLocations.vertexPosition,2,gl.FLOAT,false,0,0); //バッファーの頂点属性を統合 134 gl.enableVertexAttribArray(programInfo.attribLocations.vertexPosition); //バッファーの頂点属性を有効化 135 136 //シェーダーを使う 137 gl.useProgram(programInfo.program); 138 139 // uniform 変数を設定 140 gl.uniformMatrix4fv(programInfo.uniformLocations.projectionMatrix,false,projectionMatrix); 141 gl.uniformMatrix4fv(programInfo.uniformLocations.modelViewMatrix,false,modelViewMatrix); 142 143 gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4); //描画 144 145 146 147} 148 149//シェーダーを作成 150function initShaderProgram(gl, vsSource, fsSource) 151{ 152 const vertexShader = loadShader(gl, gl.VERTEX_SHADER, vsSource); 153 const fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fsSource); 154 155 //シェーダープログラムを作成 156 const shaderProgram = gl.createProgram(); 157 gl.attachShader(shaderProgram, vertexShader); 158 gl.attachShader(shaderProgram, fragmentShader); 159 gl.linkProgram(shaderProgram); 160 161 // もしシェーダープログラムの作成に失敗したら 162 if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) { 163 alert('シェーダープログラム作成に失敗: ' + gl.getProgramInfoLog(shaderProgram)); 164 return null; 165 } 166 167 return shaderProgram; 168} 169 170//シェーダーをロード 171function loadShader(gl, type, source) 172{ 173 const shader = gl.createShader(type); 174 175 // ソースをシェーダーオブジェクトに送信します 176 gl.shaderSource(shader, source); 177 178 // コンパイルシェーダー 179 gl.compileShader(shader); 180 181 // コンパイルが成功したかどうか? 182 if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) { 183 alert('An error occurred compiling the shaders: ' + gl.getShaderInfoLog(shader)); 184 gl.deleteShader(shader); 185 return null; 186 } 187 188 return shader; 189} 190/////////////////////////////////////////// 191window.onload =main; //実行 192///////////////////////////////////////////

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

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

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

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

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

y_waiwai

2021/04/24 04:52

そのコードはどこから持ってきたもんなんでしょうか
y_waiwai

2021/04/24 04:58

なら、その旨を質問に追記しましょう。 そこらへんの説明がまったくないとやばいですよ
hoshi-takanori

2021/04/24 09:02

ブラウザの JS は、すでにブラウザが持ってるイベントループの中で動くからでは。
退会済みユーザー

退会済みユーザー

2021/04/24 09:32

hoshi-takanori様そいうことなのであれば回答をいただきたいです。
nobonobo

2021/04/26 00:16

回答を要求する前に、そのサンプルコードは一回ドローして終了なサンプルなのでそれをOpenGLで書き直してもループ構造が不要なので引用したサンプルが質問の表題とはミスマッチです。そこを直してもらいたいところ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問