我在閱讀here。 initBuffers
函數用於存儲我們需要繪製到緩衝區中的對象的頂點。如何在運行時在WebGl中繪製各種不同大小的形狀?
var triangleVertexPositionBuffer;
var triangleVertexColorBuffer;
function initBuffers() {
triangleVertexPositionBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexPositionBuffer);
var vertices = [
0.0, 1.0, 0.0,
-1.0, -1.0, 0.0,
1.0, -1.0, 0.0
];
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
triangleVertexPositionBuffer.itemSize = 3;
triangleVertexPositionBuffer.numItems = 3;
triangleVertexColorBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexColorBuffer);
var colors = [
1.0, 0.0, 0.0, 1.0,
0.0, 1.0, 0.0, 1.0,
0.0, 0.0, 1.0, 1.0,
];
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(colors), gl.STATIC_DRAW);
triangleVertexColorBuffer.itemSize = 4;
triangleVertexColorBuffer.numItems = 3;
}
現在這是一種爲三角形定義的「形狀」。現在,如果我想要所有類型和大小的形狀我將不得不爲每個形狀保留像triangleVertexPositionBuffer
緩衝區,對吧?它必須初始化正確?
是否每個新形狀都有新的緩衝區對象?
我打算創建一個系統,其中可以在運行時通過使用按鈕創建各種形狀。 那麼是否有解決這個問題? 如何在運行期間創建新的緩衝區?有沒有共同的現有解決方案?
如果我創建一個緩衝區對象數組,它會妨礙性能嗎?
嗨。我可以通過創建一個緩存對象的「數組」來存儲對象的頂點,從而實現我想要的效果。我做了另一個'數組'來存儲相應對象的座標。所以當我需要畫一些東西的時候,第二個'array'將被用來轉換成座標。第一個陣列的形狀將被使用。這是一種阻礙表演的方式嗎? 有沒有更好的方法來做同樣的事情? – batman