私はこの非常にシンプルで(まだ大きな)コードは動作しません。三角形は表示されません。 オルト・マトリックスですでに乗算された3つの頂点を渡すだけです。頂点シェーダでは何もせず、フラグメントシェーダで白をペイントします。なぜWebGL図面はありませんか?
<head>
<script type="text/javascript">
var gl;
_main_web = function() {
gl = document.getElementById("canvas").getContext("experimental-webgl");
gl.clearColor(1,0,0,1);
gl.enable(gl.DEPTH_TEST);
gl.viewport(0, 0, 640, 480);
gl.clearDepth(1);
buffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER,buffer);
gl.bufferData(gl.ARRAY_BUFFER,
new Float32Array([[-1, -1, -0.12000000476837158, 1,
0, 1, -0.12000000476837158, 1,
1, -1, -0.12000000476837158, 1]]),
gl.STATIC_DRAW);
vert_shader = gl.createShader(gl.VERTEX_SHADER);
gl.shaderSource(vert_shader,"attribute vec4 vertex;void main(void) {gl_Position = vertex;}\n");
gl.compileShader(vert_shader);
if(!gl.getShaderParameter(vert_shader,gl.COMPILE_STATUS)) {
throw 0;
}
frag_shader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(frag_shader,"void main(void) { gl_FragColor = vec4(1.0,1.0,1.0,1.0); } \n");
gl.compileShader(frag_shader);
if(!gl.getShaderParameter(frag_shader,gl.COMPILE_STATUS)) {
throw 1;
}
program = gl.createProgram();
gl.attachShader(program,vert_shader);
gl.attachShader(program,frag_shader);
gl.linkProgram(program);
if(!gl.getProgramParameter(program,gl.LINK_STATUS)) {
throw 2;
}
vertexLocation = gl.getAttribLocation(program,"vertex");
gl.deleteShader(frag_shader);
gl.deleteShader(vert_shader);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
gl.useProgram(program);
gl.bindBuffer(gl.ARRAY_BUFFER,buffer);
gl.enableVertexAttribArray(vertexLocation);
gl.vertexAttribPointer(vertexLocation,4,gl.FLOAT,false,0,0);
gl.drawArrays(gl.TRIANGLES,0,3);
}
</script>
<style>
body {
margin:0px;
}
</style>
</head>
<body onload="_main_web()">
<canvas id="canvas" width=640 height=480>
</canvas>
</body>
午後全体をデバッグしているため、エラーが見つかりませんでした。 getErrorは常に0を返します。欠けているものはありますか?
こんにちは、4です.TRIANGLES(私はOpenGLの呼び出しを取得する私の元のソフトウェアをトレースし、gl.TRIANGLESで4を置き忘れた)。私はdrawArraysの引数を最初の頂点とnum頂点に切り替えました。私はちょうどそれを修正しましたが、それはまだ動作しません、私はコード変更の主な質問を編集しました。他に何か間違っていますか? –
私はそれを得ました、ダブル[[バッファーデータ定義上! –
ああ、あなたは5分で私にそれを打つ:)私は言葉になるために得るものを示しています。 – Toji