I current study shaderMaterial and want begin with simple triangle. But I can’t figure out what’s going wrong.
here is my code. I copy from example: webgl_buffergeometry_rawshader and try to change it to webgl2 and only display a single triangle .
html
<head>
<title>webgl_buffergeometry_rawshader</title>
<link rel="stylesheet" href="/threejsExample/f01-triangle/main.css">
</head>
<body>
<div id="container"></div>
<script src="/lib/three.js"></script>
<script src="/lib/WebGL.js"></script>
<script src="/lib/stats.min.js"></script>
<script id="vs" type="x-shader/x-vertex">#version 300 es
in vec4 a_position;
void main() {
gl_Position = a_position;
}
</script>
<script id="fs" type="x-shader/x-fragment">#version 300 es
precision mediump float;
out vec4 outColor;
void main() {
outColor = vec4(1, 0, 0, 1);
}
</script>
<script src="/threejsExample/f01-triangle/main.js"></script>
</body>
</html>
css
body {
color: #ffffff;
font-family: Monospace;
font-size: 13px;
text-align: center;
font-weight: bold;
background-color: #ffffff;
margin: 0px;
overflow: hidden;
}
#container {
width: 400px;
height: 400px;
background-color: white;
}
js:
if (WEBGL.isWebGL2Available() === false) {
document.body.appendChild(WEBGL.getWebGL2ErrorMessage());
}
var container;
var camera, scene, renderer;
init();
render();
// animate();
function init() {
container = document.getElementById('container');
camera = new THREE.PerspectiveCamera(50, container.clientWidth / container.clientHeight, 1, 10);
camera.position.z = 2;
scene = new THREE.Scene();
scene.background = new THREE.Color(0xffffff);
// geometry
var positions = [
0, 0, 0,
0, 1, 0,
1, 0, 0
];
var geometry = new THREE.BufferGeometry();
var positionAttribute = new THREE.Float32BufferAttribute(positions, 3);
geometry.addAttribute('position', positionAttribute);
// material
var material = new THREE.RawShaderMaterial( {
uniforms: {
},
vertexShader: document.getElementById( 'vs' ).textContent.trim(),
fragmentShader: document.getElementById( 'fs' ).textContent.trim(),
side: THREE.DoubleSide,
// transparent: true
} );
var mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);
var canvas = document.createElement('canvas');
var context = canvas.getContext('webgl2');
renderer = new THREE.WebGLRenderer({ canvas: canvas, context: context });
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(container.clientWidth, container.clientHeight);
// renderer.setClearColor( 0xffffff, 0);
container.appendChild(renderer.domElement);
window.addEventListener('resize', onWindowResize, false);
}
function onWindowResize() {
camera.aspect = container.clientWidth / container.clientHeight;
camera.updateProjectionMatrix();
renderer.setSize(container.clientWidth, container.clientHeight);
}
//
function animate() {
// requestAnimationFrame(animate);
// render();
}
function render() {
renderer.render(scene, camera);
}