rro*_*and 30 shader textures fragment-shader three.js
我只是想创建一个非常简单的片段着色器,它为网格绘制指定的纹理.我查看了一些自定义片段着色器,它们完成了相同的操作并构建了自己的着色器并支持它周围的JS代码.但是,它只是不起作用.这是我正在尝试运行的代码的工作抽象:
顶点着色器
<script id="vertexShader" type="x-shader/x-vertex">
varying vec2 vUv;
void main() {
vUv = uv;
gl_Position = projectionMatrix *
modelViewMatrix *
vec4(position,1.0);
}
</script>
Run Code Online (Sandbox Code Playgroud)
片段着色器
<script id="fragmentShader" type="x-shader/x-fragment">
uniform sampler2D texture1;
varying vec2 vUv;
void main() {
gl_FragColor = texture2D(texture1, vUv); // Displays Nothing
//gl_FragColor = vec4(0.5, 0.2, 1.0, 1.0); // Works; Displays Flat Color
}
</script>
Run Code Online (Sandbox Code Playgroud)
场景代码
<script>
// Initialize WebGL Renderer
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
var canvas = document.getElementById('canvas').appendChild(renderer.domElement);
// Initialize Scenes
var scene = new THREE.Scene();
// Initialize Camera
var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 100);
camera.position.z = 10;
// Create Light
var light = new THREE.PointLight(0xFFFFFF);
light.position.set(0, 0, 500);
scene.add(light);
// Create Ball
var vertShader = document.getElementById('vertexShader').innerHTML;
var fragShader = document.getElementById('fragmentShader').innerHTML;
var uniforms = {
texture1: { type: 't', value: 0, texture: THREE.ImageUtils.loadTexture( 'texture.jpg' ) }
};
var material = new THREE.ShaderMaterial({
uniforms: uniforms,
vertexShader: vertShader,
fragmentShader: fragShader
});
var ball = new THREE.Mesh(new THREE.SphereGeometry(1, 50, 50), material);
scene.add(ball);
// Render the Scene
renderer.render(scene, camera);
</script>
Run Code Online (Sandbox Code Playgroud)
texture.jpg存在,并在映射到a时显示MeshLambertMaterial.将片段着色器切换为简单颜色(在代码中注释掉)时,它会正确显示球.
运行它根本不显示任何内容.我没有得到任何错误,球根本没有出现.
我知道我必须做一些从根本上说错误的事情,但是我一直在查看这个代码似乎工作了几天的相同例子,我觉得我正在猛烈抨击墙壁.任何帮助,将不胜感激!
编辑:我正在使用Three.js修订版51
Ger*_*ro3 33
你仍然使用旧的语法制服
var uniforms = {
texture1: {
type: "t",
value: 0,
texture: THREE.ImageUtils.loadTexture("texture.jpg")
}
};
Run Code Online (Sandbox Code Playgroud)
这是新语法
var uniforms = {
texture1: { type: "t", value: THREE.ImageUtils.loadTexture( "texture.jpg" ) }
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25702 次 |
| 最近记录: |