рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдзреНрд╡рдЬ рд╕реЗрдЯ рд╣реЛрдиреЗ рдкрд░ рднреА, 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>
рдкрд╣рд▓реА рдмрд╛рд░ r78 рдореЗрдВ рджреЗрдЦрд╛ рдЧрдпрд╛, рдЙрд╕ рдмрд┐рдВрджреБ рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдИ рдбреЗрдЯрд╛ рдирд╣реАрдВред
рд╢рд╛рдпрдж рдЕрдзрд┐рдХ
рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓рд┐рдирдХреНрд╕ (рдлреЗрдбреЛрд░рд╛) рдкрд░ рднреА рджреЗрдЦрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╣ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдерд╛ рдФрд░ рдореЗрд░рд╛ рдХрдВрдкреНрдпреВрдЯрд░ рдирд╣реАрдВ рдерд╛ред
рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдХреЗрд╡рд▓ рдЕрд╕рддрдд рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ NVIDIA GeForce GT 750M рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдореИрдХрдмреБрдХ рдкреНрд░реЛ (рд░реЗрдЯрд┐рдирд╛, 15-рдЗрдВрдЪ, рджреЗрд░ рд╕реЗ 2013) рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реВрдВред
@claconduce рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрдм рдЖрдк ShaderChunk
/ ShaderLib
рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕рдЪ рд╣реИ, RawShaderMaterial
рдФрд░ ShaderMaterial
рдореЗрдВ рдХреЛрдИ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ Mater
рдореБрдЭреЗ рдХреНрдпрд╛ рдорд┐рд▓рд╛:
рдпрджрд┐ рдЖрдк RawShaderMaterial
рд╕рд╛рде рдЕрдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ рд╢реЗрдбрд░ рдХреЗ рдЕрдВрджрд░ gl_FragColor
рдореЗрдВ рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдБ, рдзрдиреНрдпрд╡рд╛рдж!
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "RawShaderMaterial(рдкреИрд░рд╛рдореАрдЯрд░)
рдкреИрд░рд╛рдореАрдЯрд░ - (рд╡реИрдХрд▓реНрдкрд┐рдХ) рд╕рд╛рдордЧреНрд░реА рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдЧреБрдгреЛрдВ рд╡рд╛рд▓реА рд╡рд╕реНрддреБред рд╕рд╛рдордЧреНрд░реА рдХреА рдХреЛрдИ рднреА рд╕рдВрдкрддреНрддрд┐ (рд╕рд╛рдордЧреНрд░реА рдФрд░ ShaderMaterial рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдХрд┐рд╕реА рднреА рд╕рдВрдкрддреНрддрд┐ рд╕рд╣рд┐рдд) рдХреЛ рдпрд╣рд╛рдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред"
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдирдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ, рд╢рд╛рдпрдж рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рдЕрдкрд╡рд╛рдж рдЬреЛрдбрд╝реВрдВрдЧрд╛ред рдЕрдЧрд░ рдпрд╣ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИ рддреЛ рдореИрдВ рдкреАрдЖрд░ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВред
рдореИрдВ рд╡реЗрдмрдЬреАрдПрд▓ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдирдпрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдореЗрд░реА рд╢рдмреНрджрд╛рд╡рд▓реА рдХрд╛ рдмрд╣рд╛рдирд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рд╕рд╛рдордЧреНрд░реА рдХреА рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдкреНрд░рддрд┐ рд╢реАрд░реНрд╖ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ? рдЕрдЧрд░ рдореИрдВ рд╕рд╛рдордЧреНрд░реА рдкрд░ 50% рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдбрд╛рд▓рддрд╛ рд╣реВрдВ, рдФрд░ 2 рдЕрддрд┐рд╡реНрдпрд╛рдкреА рдмрд┐рдВрджреБ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╡реЗ рдУрд╡рд░рд▓реИрдк рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд░рдВрдЧ рдореЗрдВ> 50% рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рд╣реЛрдЧреА?
рд╣рд╛рдБ, RawShaderMaterial
рдЖрдк рдЕрдХреЗрд▓реЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд╣рд╛рдБ,
RawShaderMaterial
рдЖрдк рдЕрдХреЗрд▓реЗ рд╣реИрдВред