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

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

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

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

GLSL

GLSL (OpenGL Shading Language) はC言語をベースとしたシェーディング言語です。

Q&A

0回答

1164閲覧

タブレットのフラグメントシェーダで数値計算をしたい

pyonshi

総合スコア0

JavaScript

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

GLSL

GLSL (OpenGL Shading Language) はC言語をベースとしたシェーディング言語です。

0グッド

0クリップ

投稿2021/02/08 03:00

タブレットのフラグメントシェーダで数値計算をしたい

webGLを用いてGPUに計算をさせたい。websocketで送られてきたデータ(RGB 0255)を01の浮動小数点に変換して、それに対して数値計算をGPUで行いその結果を表示させる。定期的に計算のデータは送られてきたデータで更新する。(毎回送られてきたデータを使うわけではない)

発生している問題

常に送られてきたデータが表示される。
GPUで計算が行われているのかもわからない。
行われていないならなぜ行われていないのか。
行われているのであればなぜ計算結果のデータではなく送られてきたデータが表示されるのか。

該当のソースコード

<html> <head>
<meta charset="utf-8" /> <meta name="viewport" content="width=1100px,

initial-scale=0.8,minimum-scale=0.75, maximum-scale=0.75">
<title>Android_float_aka</title>

<script type="text/javascript" src="glMatrix-0.9.5.min.js"></script> <script type="text/javascript" src="webgl-utils.js"></script> <script id="shader-fs" type="x-shader/x-fragment"> precision mediump float; varying vec2 vTextureCoord; uniform sampler2D uSampler; void main(void){ vec4 pixel = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t)); float p1 = pixel.r; float p2 = pixel.g; float p3 = pixel.b; gl_FragColor = vec4(p1, p2, p3, 1.0); } </script> <script id="shader-vs" type="x-shader/x-vertex"> attribute vec3 aVertexPosition; attribute vec2 aTextureCoord; uniform mat4 uMVMatrix; uniform mat4 uPMatrix; varying vec2 vTextureCoord; void main(void) { gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0); vTextureCoord = aTextureCoord; } </script> <!--シミュレーション計算用シェーダ-->
<script id="shader-fs-sim" type="x-shader/x-fragment"> precision mediump float; varying vec2 vTextureCoord; uniform sampler2D uSampler; uniform float pointx; uniform float pointy; void main(void) { //整数で入ってる1024とかの値はシミュのサイズに合わせる float i1024 = 0.0009765625; vec4 pixelc = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t)); vec4 pixelu = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t + 1.0 * i1024)); vec4 pixeld = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t - 1.0 * i1024)); vec4 pixelr = texture2D(uSampler, vec2(vTextureCoord.s + 1.0 * i1024, vTextureCoord.t )); vec4 pixell = texture2D(uSampler, vec2(vTextureCoord.s - 1.0 * i1024, vTextureCoord.t )); if(pixelc.r > 0.99) gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);//値の大きい場所は熱源にする else if(abs(vTextureCoord.s * 128.0 - float(pointx)) < 1.0 && abs(vTextureCoord.t * 128.0 - float(128.0 - pointy)) < 1.0) { gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);//クリックされた(マウスが置かれた)場所は熱源にする(yは反転) } else gl_FragColor = vec4((pixelc.r + pixelu.r + pixeld.r + pixelr.r + pixell.r) * 0.2, 0.0, 0.0, 1.0); //gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t)); } </script> <script id="shader-vs-sim" type="x-shader/x-vertex"> attribute vec3 aVertexPosition; attribute vec2 aTextureCoord; uniform mat4 uMVMatrix; uniform mat4 uPMatrix; varying vec2 vTextureCoord; void main(void) { gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0); vTextureCoord = aTextureCoord; } </script>
<script type="text/javascript"> //シミュレーションサイズ等の設定 var N = 128; var M = 64; //var N = 64/2; //変更 var sim_x = N; var sim_y = sim_x; var send_fps = 20;// 変更 var daisu = 0;// var eva = 0; var GEN_TIMES = 1;//1ループで処理する回数 var n_ct = 0; //カウント用 var m_ct = 0; var ws_flag = 1; //WSからデータが送られてきたら1 var flag_ws = 0; //andoroid用 var out_data; var in_data = [0.0,0.0]; //マウス操作関連 var lastsendtime = 0; var mouseDown = false; var send_data = [-1.0,-1.0,-1.0]; var image2; //シミュレーション画像格納用 var image1; //oomeni ryouiki kakuhositeru var floatdata = new Float32Array(N*N*4*2); var floatdata0 = new Float32Array(N*N*4*2); var simuimage = new Float32Array(N*N*4*2); var floathalf = new Float32Array(M*M*4*2) var simuhalf = new Float32Array(M*M*4*2) //マウスで押された座標 var pointx = 0; var pointy = 0; function mouseDOWN(event){ send_data[0] = 1; mouseDown = true; sendXY(event); } function sendXY(event){ event.preventDefault(); var tsend = new Date(); sendtime = tsend.getTime(); if(sendtime - lastsendtime > (1000/send_fps) ){ var rect = event.target.getBoundingClientRect(); send_data[1] = (event.clientX - rect.left); send_data[2] = (527 - event.clientY - rect.top);

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問