Three.js: RawShaderMaterial рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 23 рдорд╛рд░реНрдЪ 2017  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: mrdoob/three.js

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг

рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдзреНрд╡рдЬ рд╕реЗрдЯ рд╣реЛрдиреЗ рдкрд░ рднреА, RawShaderMaterial рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ r84 рдФрд░ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ r78 рддрдХ рджреЗрдЦрд╛ рд╣реИред рдореИрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдХреНрд░реЛрдо рд╕рдВрд╕реНрдХрд░рдг 56.0.2924.87 (64-рдмрд┐рдЯ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ r84 рдХреЗ рд▓рд┐рдП рднреА рджреЗрдЦрд╛ред рдЕрдЧрд░ RawShaderMaterial рдореЗрдВ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рд╕реЗрдЯ рд╣реИ, рддреЛ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореЗрд░реА рд╡рд╕реНрддреБрдПрдВ 50% рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреАред

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкрд░реАрдХреНрд╖рдг HTML рдкреГрд╖реНрда рд╣реИ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдФрд░ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдХреЛ RawShaderMaterial рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рднреА рдмрд┐рдВрджреБ рдареЛрд╕ рдиреАрд▓реЗ рд░рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рд╣реЛрддреЗ рд╣реИрдВ:

https://jsfiddle.net/jg4ta1po/

<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/84/three.js"></script>
<style>
body { background-color: grey; }
#render canvas {border: 1px solid black; }
</style>

<div id="render"></div>

<script type="text/javascript">
    function drawDots(scene) {
        var vertices = new Float32Array( [-32, 0, 0, 32, 0, 0] );
        var geometry = new THREE.BufferGeometry();
        geometry.addAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) );
        var shaders = {
            vertex: document.getElementById('rasterVertexShader').textContent,
            fragment: document.getElementById('rasterFragmentShader').textContent,
        };
        var material = new THREE.RawShaderMaterial({
            uniforms:       {},
            vertexShader:   shaders.vertex,
            fragmentShader: shaders.fragment,
            transparent:    true,
            depthTest:      false,
            opacity:         0.5,
        });
        material.side = THREE.DoubleSide;
        var mesh = new THREE.Points(geometry, material);
        mesh.frustumCulled = false;
        //TODO: Use groups
        scene.add(mesh);
    }

    function initRenderer() {
        var renderer = new THREE.WebGLRenderer({ alpha: true, antialias: true });
        var div = document.getElementById('render');
        div.appendChild(renderer.domElement);
        var camera = new THREE.PerspectiveCamera(90, 1, 1, 1000);
        camera.position.z = 256;
        var scene = new THREE.Scene();
        //var dpr = window.devicePixelRatio ? window.devicePixelRatio : 1;
        //renderer.setPixelRatio(dpr);
        renderer.setSize(256, 256)
        camera.aspect = 1.0;
        camera.updateProjectionMatrix();
        return {
            renderer: renderer,
            scene: scene,
            camera: camera,
        }
    }

    document.addEventListener("DOMContentLoaded", function() {
        var renderer, scene, camera;
        var r = initRenderer();
        drawDots(r.scene);
        r.renderer.render(r.scene, r.camera);
    });

</script>

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

attribute vec3 position;

uniform mat4 projectionMatrix;
uniform mat4 modelViewMatrix;

void main() {
  vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);
  gl_Position = projectionMatrix * mvPosition;;
  gl_PointSize = 64.0;
}
</script>

<script type="x-shader/x-fragment" id="rasterFragmentShader">
void main() {
  gl_FragColor = vec4(0.0, 0.0, 1.0, 1.0);
}
</script>
рддреАрди.рдЬреЗрдПрд╕ рд╕рдВрд╕реНрдХрд░рдг
  • [рдПрдХреНрд╕] рдЖрд░ 84

рдкрд╣рд▓реА рдмрд╛рд░ r78 рдореЗрдВ рджреЗрдЦрд╛ рдЧрдпрд╛, рдЙрд╕ рдмрд┐рдВрджреБ рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдИ рдбреЗрдЯрд╛ рдирд╣реАрдВред

рдмреНрд░рд╛рдЙрдЬрд╝рд░
  • [рдПрдХреНрд╕] рдХреНрд░реЛрдо
  • [рдПрдХреНрд╕] рдлрд╛рдпрд░рдлреЙрдХреНрд╕

рд╢рд╛рдпрдж рдЕрдзрд┐рдХ

рдУрдПрд╕
  • [рдПрдХреНрд╕] рдореИрдХреЛрдЬрд╝

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓рд┐рдирдХреНрд╕ (рдлреЗрдбреЛрд░рд╛) рдкрд░ рднреА рджреЗрдЦрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╣ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдерд╛ рдФрд░ рдореЗрд░рд╛ рдХрдВрдкреНрдпреВрдЯрд░ рдирд╣реАрдВ рдерд╛ред

рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ (рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХрд╛рд░реНрдб, рд╡реАрдЖрд░ рдбрд┐рд╡рд╛рдЗрд╕, ...)

рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдХреЗрд╡рд▓ рдЕрд╕рддрдд рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ NVIDIA GeForce GT 750M рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдореИрдХрдмреБрдХ рдкреНрд░реЛ (рд░реЗрдЯрд┐рдирд╛, 15-рдЗрдВрдЪ, рджреЗрд░ рд╕реЗ 2013) рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реВрдВред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╣рд╛рдБ, RawShaderMaterial рдЖрдк рдЕрдХреЗрд▓реЗ рд╣реИрдВред

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@claconduce рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрдм рдЖрдк ShaderChunk / ShaderLib рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕рдЪ рд╣реИ, RawShaderMaterial рдФрд░ ShaderMaterial рдореЗрдВ рдХреЛрдИ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ Mater

рдореБрдЭреЗ рдХреНрдпрд╛ рдорд┐рд▓рд╛:

рдпрджрд┐ рдЖрдк RawShaderMaterial рд╕рд╛рде рдЕрдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ рд╢реЗрдбрд░ рдХреЗ рдЕрдВрджрд░ gl_FragColor рдореЗрдВ рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдБ, рдзрдиреНрдпрд╡рд╛рдж!

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "RawShaderMaterial(рдкреИрд░рд╛рдореАрдЯрд░)

рдкреИрд░рд╛рдореАрдЯрд░ - (рд╡реИрдХрд▓реНрдкрд┐рдХ) рд╕рд╛рдордЧреНрд░реА рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдЧреБрдгреЛрдВ рд╡рд╛рд▓реА рд╡рд╕реНрддреБред рд╕рд╛рдордЧреНрд░реА рдХреА рдХреЛрдИ рднреА рд╕рдВрдкрддреНрддрд┐ (рд╕рд╛рдордЧреНрд░реА рдФрд░ ShaderMaterial рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдХрд┐рд╕реА рднреА рд╕рдВрдкрддреНрддрд┐ рд╕рд╣рд┐рдд) рдХреЛ рдпрд╣рд╛рдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред"

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдирдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ, рд╢рд╛рдпрдж рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рдЕрдкрд╡рд╛рдж рдЬреЛрдбрд╝реВрдВрдЧрд╛ред рдЕрдЧрд░ рдпрд╣ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИ рддреЛ рдореИрдВ рдкреАрдЖрд░ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВред

рдореИрдВ рд╡реЗрдмрдЬреАрдПрд▓ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдирдпрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдореЗрд░реА рд╢рдмреНрджрд╛рд╡рд▓реА рдХрд╛ рдмрд╣рд╛рдирд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рд╕рд╛рдордЧреНрд░реА рдХреА рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдкреНрд░рддрд┐ рд╢реАрд░реНрд╖ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ? рдЕрдЧрд░ рдореИрдВ рд╕рд╛рдордЧреНрд░реА рдкрд░ 50% рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдбрд╛рд▓рддрд╛ рд╣реВрдВ, рдФрд░ 2 рдЕрддрд┐рд╡реНрдпрд╛рдкреА рдмрд┐рдВрджреБ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╡реЗ рдУрд╡рд░рд▓реИрдк рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд░рдВрдЧ рдореЗрдВ> 50% рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рд╣реЛрдЧреА?

рд╣рд╛рдБ, RawShaderMaterial рдЖрдк рдЕрдХреЗрд▓реЗ рд╣реИрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

makc picture makc  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jack-jun picture jack-jun  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

filharvey picture filharvey  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

boyravikumar picture boyravikumar  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Bandit picture Bandit  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ