• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Witam, mam następujący problem: element canvas nie chce mi wyświetlić żadnej figury z poziomu kodu. co robić

Object Storage Arubacloud
0 głosów
96 wizyt
pytanie zadane 8 maja 2020 w JavaScript przez Gamer777 Nowicjusz (220 p.)
otagowane ponownie 8 maja 2020 przez adrian17
function main(){

var plotno=document.querySelector("plotno");
var gl=plotno.getContext("WEBGL");

if(gl===null) {

alert('Nie można zainicjować renderowania.');

return;
}

gl.clearColor(0.0,0.0,0.0,1.0);

gl.clear(gl.COLOR_BUFFER_BIT);
}

window.onload=main;

function draw(drawScene) {
    var plotno = document.querySelector("plotno");
    var plotno = getContext('webgl');

    var vsSource = `
    "attribute vec4 aVertexPosition;"

    "uniform mat4 uModelViewMatrix;"
    "uniform mat4 uProjectionMatrix;"

    void main() {
      gl_Position = "uProjectionMatrix * uModelViewMatrix * aVertexPosition;"
    }
  `;

    function initShaderProgram(gl, vsSource, fsSource) {
       var vertexShader = "loadShader(gl, gl.VERTEX_SHADER, vsSource);"
        var fragmentShader = "loadShader(gl, gl.FRAGMENT_SHADER, fsSource);"

 

        var shaderProgram = "gl.createProgram();"
        "gl.attachShader(shaderProgram, vertexShader);"
        "gl.attachShader(shaderProgram, fragmentShader);"
        "gl.linkProgram(shaderProgram);"

 

        if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {
            alert('Unable to initialize the shader program: ' + gl.getProgramInfoLog(shaderProgram));
            return null;
        }

        return shaderProgram;
    }

    function loadShader(gl, type, source) {
        var shader = "gl.createShader(type);"

 

        gl.shaderSource(shader, source);

 

        if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
            alert('An error occurred compiling the shaders: ' + gl.getShaderInfoLog(shader));
            gl.deleteShader(shader);
            return null;
        }

        return shader;
    }

    var shaderProgram = "initShaderProgram(gl, vsSource, fsSource);"

    var programInfo = {
        program: shaderProgram,
        attribLocations: {
            vertexPosition: gl.getAttribLocation(shaderProgram, 'aVertexPosition'),
        },
        uniformLocations: {
            projectionMatrix: "gl.getUniformLocation(shaderProgram, 'uProjectionMatrix')",
            modelViewMatrix: "gl.getUniformLocation(shaderProgram, 'uModelViewMatrix')",
        },
    };

    function initBuffers(gl) {

 

        const positionBuffer = gl.createBuffer();

 

        gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);

 

        var positions = [-1.0, 1.0,
            1.0, 1.0, -1.0, -1.0,
            1.0, -1.0,
        ];

        gl.bufferData(gl.ARRAY_BUFFER,
            new Float32Array(positions),
            gl.STATIC_DRAW);

        return {
            position: positionBuffer,
        };
    }

 

    function drawScene(gl, programInfo, buffers) {
        gl.clearColor(0.0, 0.0, 0.0, 1.0);
        gl.clearDepth(1.0);
        gl.enable(gl.DEPTH_TEST);
        gl.depthFunc(gl.LEQUAL);

        gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);

        const fieldOfView = 45 * Math.PI / 180; // in radians
        const aspect = gl.canvas.clientWidth / gl.canvas.clientHeight;
        const zNear = 0.1;
        const zFar = 100.0;
        const projectionMatrix = mat4.create();

        mat4.perspective(projectionMatrix,
            fieldOfView,
            aspect,
            zNear,
            zFar);

        var modelViewMatrix = mat4.create();

 

        mat4.translate(modelViewMatrix,
            modelViewMatrix, [-0.0, 0.0, -6.0]);

        {
            const numComponents = 2; // pull out 2 values per iteration
            const type = gl.FLOAT; // the data in the buffer is 32bit floats
            const normalize = false; // don't normalize
            const stride = 0; // how many bytes to get from one set of values to the next
            // 0 = use type and numComponents above
            const offset = 0; // how many bytes inside the buffer to start from
            gl.bindBuffer(gl.ARRAY_BUFFER, buffers.position);
            gl.vertexAttribPointer(
                programInfo.attribLocations.vertexPosition,
                numComponents,
                type,
                normalize,
                stride,
                offset);
            gl.enableVertexAttribArray(
                programInfo.attribLocations.vertexPosition);
        }

 

        gl.useProgram(programInfo.program);

 

        gl.uniformMatrix4fv(
            programInfo.uniformLocations.projectionMatrix,
            false,
            projectionMatrix);
        gl.uniformMatrix4fv(
            programInfo.uniformLocations.modelViewMatrix,
            false,
            modelViewMatrix);

        {
            var offset = 0;
            var vertexCount = 4;
            gl.drawArrays(gl.TRIANGLE_STRIP, offset, vertexCount);
        }
    }
}
window.onload=draw;

 

komentarz 8 maja 2020 przez adrian17 Ekspert (345,160 p.)

Nie znam dobrze WebGLa, ale... na oko ten kod ma całe mnóstwo błędów?

var plotno=document.querySelector("plotno");

Masz element o tagu `plotno`?

    var plotno = document.querySelector("plotno");
    var plotno = getContext('webgl');

(?)

        var shaderProgram = "gl.createProgram();"
        "gl.attachShader(shaderProgram, vertexShader);"
        "gl.attachShader(shaderProgram, fragmentShader);"
        "gl.linkProgram(shaderProgram);"

Czemu losowe linie kodu JSa związane z shaderami są owinięte w stringi?

(btw, to wygląda na koślawie przepisany kod z https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Tutorial/Adding_2D_content_to_a_WebGL_context ? Wiesz, że na dole jest link do pełnego działającego kodu?)

(rozumiem, że koniecznie chcesz rysować w canvasie WebGLem, a nie prostymi API do rysowania w canvasie?)

komentarz 8 maja 2020 przez Gamer777 Nowicjusz (220 p.)
edycja 8 maja 2020 przez Gamer777

Zgadza się ,a jak powinien wyglądać prawidłowy kod WebGL do rysowania w canvas Obiektów 3d ? Jeśli możesz to proszę podeślij mi prawidłową składnię.

Pozdrawiamsmiley

komentarz 8 maja 2020 przez adrian17 Ekspert (345,160 p.)
edycja 8 maja 2020 przez adrian17

(btw, to wygląda na koślawie przepisany kod z https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Tutorial/Adding_2D_content_to_a_WebGL_context ? Wiesz, że na dole jest link do pełnego działającego kodu?)

komentarz 8 maja 2020 przez Gamer777 Nowicjusz (220 p.)
Dzięki, sprawdzę i odpowiem jaki uzyskałem rezultat

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 122 wizyt
pytanie zadane 19 stycznia 2019 w JavaScript przez MrxCI Dyskutant (8,260 p.)
0 głosów
1 odpowiedź 258 wizyt
pytanie zadane 4 grudnia 2018 w JavaScript przez MrxCI Dyskutant (8,260 p.)
0 głosów
1 odpowiedź 335 wizyt
pytanie zadane 24 marca 2016 w JavaScript przez niezalogowany

92,626 zapytań

141,486 odpowiedzi

319,844 komentarzy

62,009 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...