Komentáře k článku

WebGL: Darth Shader

Když jsem se před časem poprvé ponořil do světa WebGL, začínal jsem na zelené louce. Kdybych chtěl mít rychle nějaký výstup, jistě bych sáhl po hotovém řešení, poskytujícím přímo graf scény (například vynikající three.js). Já chtěl ale vědět, jak a proč ty věci fungují; každou funkci si vyzkoušet a pochopit její účel. Své poznatky budu sepisovat, kdyby se náhodou někomu hodily…

Zpět na článek

3 komentářů k článku WebGL: Darth Shader:

  1. Jan Prachař

    Použití normálových vektorů jako barvy je vlastně díky ořezávání záporných hodnot ekvivaletní se svícením červenou barvou zprava, zelenou zeshora a modrou zepředu. Stačí jen přidat transformaci normálových vektorů při otáčení http://jsfiddle.net/csgWS/

  2. Jan Prachař

    Změna velikost canvasu
    Chvilku mi trvalo přijít na to, jak změnit velikost canvasu. Výšku a šířku nastavíte takto:
    var canvas = document.querySelector(„canvas“);
    canvas.width = 1000;
    canvas.height = 500;

    (Nastavením CSS šířky a výšky sice změníte velikost canvasu na obrazovce, ale šířka a výška kreslícího bufferu zůstane stejná.)

    Při výpočtu projekční matice ja pak třeba použít správný poměr stran
    mat4.perspective(pmatrix, Math.PI/3, canvas.width/canvas.height, 0.1, 100);

    Výsledek http://jsfiddle.net/LgyQX/11/

  3. Entity B

    Pozor na zbytečné operace v shaderech
    Všiml jsem si, že ve vertex shaderu násobíte trochu zbytečně několik matic:

    gl_Position = PMatrix * VMatrix * MMatrix * vec4(pos, 1.0);
    

    Asi bych to sám zjednodušil na jednu uniformní proměnnou:

    gl_Position = uMatrix * vec4(pos, 1.0);
    

    a ty tři matice pronásobil už někde předtím v javascriptu, pravděpodobně v render funkci. Každý čtenář by si měl jistě uvědomit, že každá operace ve vertex shaderu se provede nad každým bodem a ve fragment shaderu nad každým pixelem. I když to v tomto konkrétním případě nemá výraznější dopad na výkon, jindy to se to stává rozhodujícím.

    Jinak je to ale výborný článek!

Napsat komentář

Tato diskuse je již příliš stará, pravděpodobně již vám nikdo neodpoví. Pokud se chcete na něco zeptat, použijte diskusní server Devel.cz

Zdroj: https://www.zdrojak.cz/?p=8551