1
我有一個旋轉的3D字母「F」。出於某種原因,「F」未畫在畫布的前20%。看到這個jsFiddle:http://jsfiddle.net/c948jos0/。webgl不使用整個畫布空間
渲染功能:
var rX = 0;
var rY = 0;
gl.enable(gl.CULL_FACE);
gl.enable(gl.DEPTH_TEST);
gl.canvas.width = 400;
gl.canvas.height = 200;
gl.clearColor(0.5,0.5,0.5,1.0);
function render(){
rX += Math.PI/64;
rY += Math.PI/128;
var projection = make2DProjection(gl.canvas.clientWidth,gl.canvas.clientHeight,400);
var translation = makeTranslation(200,50,0);
var rotX = makeXRotation(rX);
var rotY = makeYRotation(rY);
var mat = matrixMultiply(rotX,rotY);
mat = matrixMultiply(mat,translation);
mat = matrixMultiply(mat,projection);
uniforms["u_matrix"](new Float32Array(mat));
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
gl.drawArrays(gl.TRIANGLES,0, 16*6);
setTimeout(render,33);
}
render();
矩陣:
function makeTranslation(tx, ty, tz) {
return [
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
tx, ty, tz, 1
];
}
function makeXRotation(angleInRadians) {
var c = Math.cos(angleInRadians);
var s = Math.sin(angleInRadians);
return [
1, 0, 0, 0,
0, c, s, 0,
0, -s, c, 0,
0, 0, 0, 1
];
}
function makeYRotation(angleInRadians) {
var c = Math.cos(angleInRadians);
var s = Math.sin(angleInRadians);
return [
c, 0, -s, 0,
0, 1, 0, 0,
s, 0, c, 0,
0, 0, 0, 1
];
}
function make2DProjection(width, height, depth) {
// Note: This matrix flips the Y axis so 0 is at the top.
return [
2/width, 0, 0, 0,
0, -2/height, 0, 0,
0, 0, 2/depth, 0,
-1, 1, 0, 1
];
}
我一直在關注http://webglfundamentals.org/webgl/lessons/webgl-3d-orthographic.html所以我想我一定改變的東西我不應該做或一個錯字。問題是我不知道什麼。我認爲它的make2DProjection矩陣不是將原點設置在畫布的左上角,但相同的代碼在教程中工作,所以我不知道。
啊我明白了。我有一種感覺,就是這樣的。你有什麼關於學習webgl的好源的建議嗎?現在我覺得我所看到的所有教程都沒有提到這個,所以我覺得自己受騙了。 – 2014-11-04 22:17:12
http://webglfundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html – gman 2014-12-01 08:11:15