WebGL Checker游戏

时间:2016-06-10 09:10:58

标签: webgl

我是WebGL的新手,我正在尝试学习创建一个简单的棋盘游戏。

我已根据本教程(http://www.martinchristen.ch/webgl/tutorial03)创建了检查框。

现在我被困在这个需要加入pawn的部分。

有人能指导我吗?

HTML          

<script id="vertex-shader" type="x-shader/x-vertex">

    attribute vec2 aVertexPosition;
    varying vec2 pos;
    void main() {
        gl_Position = vec4(aVertexPosition, 0.0, 1.0);
        pos = aVertexPosition;
    }
</script>

<script id="fragment-shader" type="x-shader/x-fragment">
    #ifdef GL_ES
    precision highp float;
    #endif

    uniform vec4 uColor;
    varying vec2 pos;

    void main() {
        float x = 0.5*(pos.x+1.0); // range [0,1]
        float y = 0.5*(pos.y+1.0); // range [0,1]
        // checkerboard shader:
        if ((mod(4.0*x, 1.0) < 0.5) ^^ (mod(4.0*y, 1.0) < 0.5))
        {
            gl_FragColor = vec4(0.0,0.0,0.0,1.0);
        }
        else
        {
            gl_FragColor = vec4(1.0,0.0,0.0,1.0);
        }


    }
</script>

<script type="text/javascript" src="webgl-utils.js"></script>
<script type="text/javascript" src="initShaders.js"></script>
<script type="text/javascript" src="MV.js"></script>
<script type="text/javascript" src="checker.js"></script>

<body>
    <canvas id="gl-canvas" width="640" height="640">
        Oops ... your browser doesn't support the HTML5 canvas element
    </canvas>
</body>
</html>

的Javascript

"use strict";

var canvas;
var gl; 
var movement = false;

var numItems;

var vertices = new Float32Array([
    -1, 1, 1, 1, 1,-1,  // Triangle 1
    -1, 1, 1, -1,-1,-1,   // Triangle 2
    -1, 1, 1, -1,-1,-1 
]);


var colors = [
    vec4( 0.0, 0.0, 0.0, 1.0 ),  // black
    vec4( 1.0, 0.0, 0.0, 1.0 )   // red
];

window.onload = function init() {
    canvas = document.getElementById( "gl-canvas" );

    gl = WebGLUtils.setupWebGL( canvas );
    if ( !gl ) { alert( "WebGL isn't available" ); }

    canvas.addEventListener("mousedown", function(event){
        movement = true;
        //get x  y coordinates
        var t = vec2(2*event.clientX/canvas.width-1,
           2*(canvas.height-event.clientY)/canvas.height-1);
           console.log(t);
    });

    canvas.addEventListener("mouseup", function(event){
        movement = false;
    });

    canvas.addEventListener("mousemove", function(event){
        if (movement) {

        }
    });

    // Setup Shaders:
    var v = document.getElementById("vertex-shader").firstChild.nodeValue;
    var f = document.getElementById("fragment-shader").firstChild.nodeValue;

    var vs = gl.createShader(gl.VERTEX_SHADER);
    gl.shaderSource(vs, v);
    gl.compileShader(vs);

    if (!gl.getShaderParameter(vs, gl.COMPILE_STATUS))
        alert(gl.getShaderInfoLog(vs));

    var fs = gl.createShader(gl.FRAGMENT_SHADER);
    gl.shaderSource(fs, f);
    gl.compileShader(fs);

    if (!gl.getShaderParameter(fs, gl.COMPILE_STATUS))
        alert(gl.getShaderInfoLog(fs));

    var program = gl.createProgram();
    gl.attachShader(program, vs);
    gl.attachShader(program, fs);
    gl.linkProgram(program);

    if (!gl.getProgramParameter(program, gl.LINK_STATUS))
        alert(gl.getProgramInfoLog(program));

    var vbuffer = gl.createBuffer();
    gl.bindBuffer(gl.ARRAY_BUFFER, vbuffer);
    gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);

    var itemSize = 2; // we have 2 triangles!
    numItems = vertices.length / itemSize;

    // Viewport
    gl.viewport(0, 0, canvas.width, canvas.height);
    gl.clearColor(0, 0, 0, 1);
    gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);

    // Setup Geometry:
    gl.useProgram(program);

    program.uColor = gl.getUniformLocation(program, "uColor");
    gl.uniform4fv(program.uColor, [0.5, 0.0, 0.0, 1.0]);

    program.aVertexPosition = gl.getAttribLocation(program, "aVertexPosition");
    gl.enableVertexAttribArray(program.aVertexPosition);
    gl.vertexAttribPointer(program.aVertexPosition, itemSize, gl.FLOAT, false, 0, 0);

    render();
}

function render() {

    gl.drawArrays(gl.TRIANGLES, 0, numItems);
    window.requestAnimFrame(render);
}

非常感谢!

0 个答案:

没有答案