我面临着创建多个对象(一个旋转和一个静态)的相同问题。我想在下面的代码中绘制一个静态矩形(旋转矩形代码来自Edward Angels WebGL示例)。我尝试按照gman从链接Drawing many shapes in WebGL所述的说明进行操作,但仍无法解决。如果能得到一些帮助,就可以在代码中创建另一个静态对象,例如矩形和这个旋转矩形。谢谢。在WebGL中绘制多个图形
<script id="vertex-shader" type="x-shader/x-vertex">
attribute vec4 vPosition;
uniform float theta;
void
main()
{
float s = sin(theta);
float c = cos(theta);
gl_Position.x = -s * vPosition.x + c * vPosition.y;
gl_Position.y = s * vPosition.y + c * vPosition.x;
gl_Position.z = 0.0;
gl_Position.w = 1.0;
}
</script>
<script id="fragment-shader" type="x-shader/x-fragment">
precision mediump float;
void
main()
{
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
</script>
var canvas;
var gl;
var theta = 0.0;
var thetaLoc;
window.onload = function init()
{
canvas = document.getElementById("gl-canvas");
gl = WebGLUtils.setupWebGL(canvas);
if (!gl) { alert("WebGL isn't available"); }
gl.viewport(0, 0, canvas.width, canvas.height);
gl.clearColor(1.0, 1.0, 1.0, 1.0);
var program = initShaders(gl, "vertex-shader", "fragment-shader");
gl.useProgram(program);
var vertices = [
vec2( 0, 1),
vec2( 1, 0),
vec2(-1, 0),
vec2( 0, -1)
];
var bufferId = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, bufferId);
gl.bufferData(gl.ARRAY_BUFFER, flatten(vertices), gl.STATIC_DRAW);
var vPosition = gl.getAttribLocation(program, "vPosition");
gl.vertexAttribPointer(vPosition, 2, gl.FLOAT, false, 0, 0);
gl.enableVertexAttribArray(vPosition);
thetaLoc = gl.getUniformLocation(program, "theta");
render();
};
function render() {
gl.clear(gl.COLOR_BUFFER_BIT);
theta += 0.1;
gl.uniform1f(thetaLoc, theta);
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
window.requestAnimFrame(render);
}
我已经解决了这个问题。我使用相同的着色器,但两种不同的程序用于两种不同的形状。非常感谢您的回复(drawArrays中4,8和0,4)...实际上,这有助于我重新思考解决方案。 – 2014-10-29 08:52:43