Ich versuche eine .obj mit einer .png Textur zu rendern, aber wenn ich die .png Textur einfüge, wird der Kopf weiß wie hier zu sehen:three.js .png Bild rendert weiß und nicht so wie es sein sollte
Allerdings, wenn ich die png Textur entfernen sieht es wie folgt aus:
Dies ist, was ich die Textur erstellen bin mit:
<script id="vertex_shader" type="x-shader/x-vertex">
varying vec2 vUv;
void main() {
vUv = uv;
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
}
</script>
<script id="fragment_shader" type="x-shader/x-fragment">
uniform vec3 color;
uniform sampler2D texture;
varying vec2 vUv;
void main() {
vec4 tColor = texture2D(texture, vUv);
gl_FragColor = vec4(mix(color, tColor.rgb, tColor.a), 1.0);
}
var texture = THREE.ImageUtils.loadTexture('./Avatar/FaceTestTr.png');
texture.needsUpdate = true;
var uniforms = {
color: { type: "c", value: new THREE.Color(0xffffff) }, // material is "red"
texture: { type: "t", value: texture },
transparent: true,
opacity: 0.9,
};
var AvatarTextureF = new THREE.ShaderMaterial({
uniforms: uniforms,
vertexShader: document.getElementById('vertex_shader').textContent,
fragmentShader : document.getElementById('fragment_shader').textContent
});
Und das es auf das Objekt anzuwenden:
object.children[1].material = AvatarTextureF;
Ich habe versucht, ein paar Möglichkeiten, darunter nur ein normales Material verwendet:
var AvatarTextureF = new THREE.MeshPhongMaterial({ map: THREE.ImageUtils.loadTexture('./Avatar/FaceTestTr.png'), shininess: 80, color: 0xffcc66, shading: THREE.SmoothShading, alphaMap: 0x000000});
Mit dem gleichen Ergebnis. Hier
ist der aktualisierte Code, jetzt der Kopf gerade unsichtbar ist ..
Shaders:
<script type="x-shader/x-vertex" id="vertex_shader">
#if NUM_DIR_LIGHTS > 0
struct DirectionalLight {
vec3 direction;
vec3 color;
int shadow;
float shadowBias;
float shadowRadius;
vec2 shadowMapSize;
};
uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];
#endif
//varying vec3 color;
void main() {
float r = directionalLights[0].color.r;
//color = vec3(r,0.6,0.6,0.6);
gl_Position = projectionMatrix * modelViewMatrix * vec4(position , 1.0); }
</script>
<script type="x-shader/x-fragment" id="fragment_shader">
uniform vec3 color;
uniform sampler2D texture;
varying vec2 vUv;
void main() {
vec4 tColor = texture2D(texture, vUv);
gl_FragColor = vec4(mix(color, tColor.rgb, tColor.a), 1.0);
}
</script>
Und der Kopf:
var texture = THREE.ImageUtils.loadTexture('./Avatar/FaceTestTr.png');
texture.needsUpdate = true;
// uniforms
var uniforms = THREE.UniformsUtils.merge([
THREE.UniformsLib[ "lights" ],
{
color: { type: "c", value: new THREE.Color(0xffffff) },
texture: { type: "t", value: texture }
}
]);
// material
var AvatarTextureF = new THREE.ShaderMaterial({
uniforms : uniforms,
vertexShader : document.getElementById('vertex_shader').textContent,
fragmentShader : document.getElementById('fragment_shader').textContent,
//transparent: true,
lights: true
});
Der Shader, den Sie oben gestellt haben, berücksichtigt keine Schatten, Lichter oder Normalen und wird daher als flache Farbe dargestellt (entweder die Texturfarbe oder die Farbe des vom Alpha bestimmten Materials) – 2pha