Я следил за this post, надеясь добавить свой собственный поворот на вещи. Я заметил, что пример here использует очень старую версию Three.JS (49). Когда я изменил исходный файл на более современную версию, текстура больше не появляется. См. DemoТекстура не отображается при обновлении версии Three.js
Я проводил много времени, пытаясь выяснить, какие изъяны произошли, и я сузил свой поиск по этим линиям.
// material
uniforms = {
sunDirection: { type: "v3", value: new THREE.Vector3(0,1,0) },
dayTexture: { type: "t", value: 0, texture: THREE.ImageUtils.loadTexture("/images/world2.png") },
nightTexture: { type: "t", value: 1, texture: THREE.ImageUtils.loadTexture("/images/world5.png") }
};
uniforms.dayTexture.texture.wrapS = uniforms.dayTexture.texture.wrapT = THREE.Repeat;
uniforms.nightTexture.texture.wrapS = uniforms.nightTexture.texture.wrapT = THREE.Repeat;
material = new THREE.ShaderMaterial({
uniforms: uniforms,
vertexShader: document.getElementById('vertexShader').textContent,
fragmentShader: document.getElementById('fragmentShader').textContent
});
Более различа материал, который, вероятно, что-то делать с моей проблемой
<script id="fragmentShader" type="x-shader/x-fragment">
uniform sampler2D dayTexture;
uniform sampler2D nightTexture;
uniform vec3 sunDirection;
varying vec2 vUv;
varying vec3 vNormal;
void main(void) {
vec3 dayColor = texture2D(dayTexture, vUv).rgb;
vec3 nightColor = texture2D(nightTexture, vUv).rgb;
// compute cosine sun to normal so -1 is away from sun and +1 is toward sun.
float cosineAngleSunToNormal = dot(normalize(vNormal), sunDirection);
// sharpen the edge beween the transition
cosineAngleSunToNormal = clamp(cosineAngleSunToNormal * 10.0, -1.0, 1.0);
// convert to 0 to 1 for mixing
float mixAmount = cosineAngleSunToNormal * 0.5 + 0.5;
// Select day or night texture based on mix.
vec3 color = mix(nightColor, dayColor, mixAmount);
gl_FragColor = vec4(color, 1.0);
//gl_FragColor = vec4(mixAmount, mixAmount, mixAmount, 1.0);
}
</script>
<script id="vertexShader" type="x-shader/x-vertex">
varying vec2 vUv;
varying vec3 vNormal;
void main()
{
vUv = uv;
vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);
vNormal = normalMatrix * normal;
gl_Position = projectionMatrix * mvPosition;
}
</script>
Я проверил миграции DOCX here Существует не так много на «униформу» или «шейдер» для этого факт.
Я сделал это изменение раньше (забыл упомянуть в оригинальной записи), и весь код не работает. –
Я внес изменения в свой код, и текстуры выглядели отлично. Это ответ на ваш оригинальный вопрос. У вас могут быть другие проблемы. – WestLangley
У вас есть скрипка кода? –