Я использовал vUv = uv для работы с шейдером материала three.js для IcosahedronGeometry. Но это не работает, и мне нужна помощь, чтобы исправить этот шейдер:Веб-шейдер - three.js, нужно исправить?
var container,
renderer,
scene,
camera,
mesh,
start = Date.now(),
fov = 30;
window.addEventListener('load', function() {
container = document.getElementById("container");
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera(
fov,
window.innerWidth/window.innerHeight,
1,
10000);
camera.position.z = 100;
camera.target = new THREE.Vector3(0, 0, 0);
scene.add(camera);
material = new THREE.ShaderMaterial({
vertexShader: document.getElementById('vertexShader').textContent,
fragmentShader: document.getElementById('fragmentShader').textContent
});
mesh = new THREE.Mesh(
new THREE.IcosahedronGeometry(20, 4),
material
);
scene.add(mesh);
renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
container.appendChild(renderer.domElement);
render();
});
function render() {
renderer.render(scene, camera);
requestAnimationFrame(render);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r77/three.js"></script>
<head>
<title>Shader test</title>
<script type="x-shader/x-vertex" id="vertexShader">
vUv = uv;
varying vec3 N;
varying vec3 I;
varying vec4 Cs;
void main()
{
vec4 P = gl_ModelViewMatrix * gl_Vertex;
I = P.xyz - vec3 (0);
N = gl_NormalMatrix * gl_Normal;
Cs = gl_Color;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
//gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
}
</script>
<script type="x-shader/x-vertex" id="fragmentShader">
varying vec2 vUv;
varying vec3 N;
varying vec3 I;
varying vec4 Cs;
uniform float edgefalloff;
uniform float intensity;
uniform float ambient;
void main()
{
float opac = dot(normalize(-N), normalize(-I));
opac = abs(opac);
opac = ambient + intensity*(1.0-pow(opac, edgefalloff));
//opac = 1.0 - opac;
gl_FragColor = opac * Cs;
gl_FragColor.a = opac;
//gl_FragColor = vec4(vec3(vUv, 0.), 1.);
}
</script>
</head>
<body>
<div id="container"></div>
</body>
Вам нужно всего лишь ввести весь этот код в один html5 и попытаться исправить. Я использовал комментарии, потому что не дал мне добавить весь файл html5. –
Обязательно создайте исполняемый код в свой следующий раз (кнопка «<>» в редакторе вопросов), никто здесь «не нужен», чтобы делать что-либо, а также более конкретно о вашей проблеме «не работает»/«нужно исправить "- довольно плохое описание. Попробуйте взглянуть на базовый учебник glsl, так как на консольном выходе все сказано: 'ERROR: 0:43: 'vUv': синтаксическая ошибка' –
LJ - прав, извините, я не успел, спасибо! –