WebGL 插入计算的顶点值
WebGL inserting calculated vertex-values
我正在尝试使用 WebGL 来获得基本的理解。
我有一个由 6 个三角形组成的模型,我想创建另外 3 个三角形,它们共享每个三角形内部的特定点。具体点将是父三角形的 center/focus (对不起,我不知道哪个术语是正确的)。
问题是,我不知道如何插入值来渲染模型。
//This is my function to set the vertex-points for each triangle
function setGeometry(gl) {
gl.bufferData(
gl.ARRAY_BUFFER,
new Float32Array([
//vorne links (clockwise)
-60, -52, 0,
0, 52, 0,
0, 0, 60,
//vorne rechts (clockwise)
0, 0, 60,
0, 52, 0,
60, -52, 0,
//vorne mitte (clockwise)
60, -52, 0,
-60, -52, 0,
0, 0, 60,
//Front mid inner mid (clockwise)
60, -52, 0,
-60, -52, 0,
getCenter([60, -52, 0], //This is where I call the function to get the Center of the parent
[-60, -52, 0], //and return the values as a concatinated string
[0, 0, 60]),
//hinten links (counter-clockwise)
-60, -52, 0,
0, 0, -60,
0, 52, 0,
//hinten rechts (counter-clockwise)
0, 52, 0,
0, 0, -60,
60, -52, 0,
//hinten mitte (counter-clockwise)
60, -52, 0,
0, 0, -60,
-60, -52, 0,
]),
gl.STATIC_DRAW);
}
//And this is the corresponding function to get the center.
function getCenter(A,B,C){
var center = [];
for(var i = 0; i < A.length; ++i){
center[i] = (A[i] + B[i] + C[i])/3;
}
return Math.round(center[0]) + "," + Math.round(center[1]) + "," + Math.round(center[2]);
}
我认为问题在于,这些值将作为字符串而不是单独的整数返回。
出现以下错误消息:
glDrawArrays: attempt to access out of range vertices in attribute 0
我想不出合适的方法来获取其中的值。
如有任何正确方向的提示,我将不胜感激。
是的,部分问题是您的 getCenter 函数 returns 是一个字符串。我建议返回一个三元素数组:
function getCenter(A,B,C){
var center = [];
for(var i = 0; i < A.length; ++i){
center[i] = Math.round((A[i] + B[i] + C[i])/3);
}
return center;
}
现在您需要将这三个值插入到您的坐标数组中。如果您使用的是现代浏览器,则可以使用 ...
"spread" syntax...
[-60, -52, 0, ...getCenter(A, B, C), -60, -52, 0]
...否则您将不得不使用 concat()
...
[-60, -52, 0].concat(getCenter(A, B, C)).concat([-60, -52, 0])
我正在尝试使用 WebGL 来获得基本的理解。
我有一个由 6 个三角形组成的模型,我想创建另外 3 个三角形,它们共享每个三角形内部的特定点。具体点将是父三角形的 center/focus (对不起,我不知道哪个术语是正确的)。 问题是,我不知道如何插入值来渲染模型。
//This is my function to set the vertex-points for each triangle
function setGeometry(gl) {
gl.bufferData(
gl.ARRAY_BUFFER,
new Float32Array([
//vorne links (clockwise)
-60, -52, 0,
0, 52, 0,
0, 0, 60,
//vorne rechts (clockwise)
0, 0, 60,
0, 52, 0,
60, -52, 0,
//vorne mitte (clockwise)
60, -52, 0,
-60, -52, 0,
0, 0, 60,
//Front mid inner mid (clockwise)
60, -52, 0,
-60, -52, 0,
getCenter([60, -52, 0], //This is where I call the function to get the Center of the parent
[-60, -52, 0], //and return the values as a concatinated string
[0, 0, 60]),
//hinten links (counter-clockwise)
-60, -52, 0,
0, 0, -60,
0, 52, 0,
//hinten rechts (counter-clockwise)
0, 52, 0,
0, 0, -60,
60, -52, 0,
//hinten mitte (counter-clockwise)
60, -52, 0,
0, 0, -60,
-60, -52, 0,
]),
gl.STATIC_DRAW);
}
//And this is the corresponding function to get the center.
function getCenter(A,B,C){
var center = [];
for(var i = 0; i < A.length; ++i){
center[i] = (A[i] + B[i] + C[i])/3;
}
return Math.round(center[0]) + "," + Math.round(center[1]) + "," + Math.round(center[2]);
}
我认为问题在于,这些值将作为字符串而不是单独的整数返回。
出现以下错误消息:
glDrawArrays: attempt to access out of range vertices in attribute 0
我想不出合适的方法来获取其中的值。
如有任何正确方向的提示,我将不胜感激。
是的,部分问题是您的 getCenter 函数 returns 是一个字符串。我建议返回一个三元素数组:
function getCenter(A,B,C){
var center = [];
for(var i = 0; i < A.length; ++i){
center[i] = Math.round((A[i] + B[i] + C[i])/3);
}
return center;
}
现在您需要将这三个值插入到您的坐标数组中。如果您使用的是现代浏览器,则可以使用 ...
"spread" syntax...
[-60, -52, 0, ...getCenter(A, B, C), -60, -52, 0]
...否则您将不得不使用 concat()
...
[-60, -52, 0].concat(getCenter(A, B, C)).concat([-60, -52, 0])