【发布时间】:2015-01-11 05:39:00
【问题描述】:
为了调试我正在使用 ThreeJS 开发的 WebGL 应用程序,我想知道是否有可能知道有多少个顶点被发送到 GPU,从而每帧处理了多少个顶点。
出现问题是因为我试图将属性(位移)传递给顶点着色器(如本教程中所示:http://aerotwist.com/tutorials/an-introduction-to-shaders-part-2/)。这是代码sn-p:
var values = attributes.displacement.value;
var verts = system.geometry.vertices.length + edges.geometry.vertices.length;
for (var v = 0; v < verts; v++) {
values.push(1);
}
虽然我认为我正在填充displacement.value数组直到合适的长度(系统和边缘的顶点总和,我添加到场景中的唯一两个对象),但我不断收到下一个错误(在三.min.js:467, R69):
Uncaught TypeError: Cannot read property '1' of undefined
所以我的猜测是 ThreeJS 向顶点着色器发送了更多的东西,虽然这听起来很奇怪,或者我错过了一些东西。顺便说一句,虽然属性是在加载时初始化的,但只有在尝试单击或拖动时才会出现错误。
这是一个现场演示(错误输出): http://hyperbrowser.herokuapp.com/hyperbrowser.html?graph=random&depth=5
整个代码都在 github 上: https://github.com/vabada/hyperBrowser
【问题讨论】:
-
提示:调试时使用未缩小版的three.js。
-
感谢您的提示。我现在进步了一点。我正确地传递了值(初始化时,因为如果我设置 values.push(1000); 那么我可以看到它正在移动)但是一旦我单击或拖动错误就会出现(在第 18910 行,three.js R69):索引 = 排序数组[ ca ][ 1 ]; Uncaught TypeError: Cannot read property '1' of undefined 所以我现在的猜测是,当我单击(并实例化光线投射器)时,它会向顶点着色器发送其他内容,尽管这对我来说似乎很奇怪。我已经尝试将 attributes.displacement.value 数组填充到一个巨大的索引,但错误不断出现
标签: debugging three.js webgl vertex-shader