在webgl中使用glsl代碼時,是否可以調試GLSL代碼或從glsl代碼中打印變量值? three.js或scene.js包含任何這樣的功能嗎?在webgl中調試GLSL代碼
13
A
回答
10
不是真的,
的方式,我通常調試GLSL是輸出的顏色。因此,例如,給予2個着色像
// vertex shader
uniform mat4 worldViewProjection;
uniform vec3 lightWorldPos;
uniform mat4 world;
uniform mat4 viewInverse;
uniform mat4 worldInverseTranspose;
attribute vec4 position;
attribute vec3 normal;
attribute vec2 texCoord;
varying vec4 v_position;
varying vec2 v_texCoord;
varying vec3 v_normal;
varying vec3 v_surfaceToLight;
varying vec3 v_surfaceToView;
void main() {
v_texCoord = texCoord;
v_position = (worldViewProjection * position);
v_normal = (worldInverseTranspose * vec4(normal, 0)).xyz;
v_surfaceToLight = lightWorldPos - (world * position).xyz;
v_surfaceToView = (viewInverse[3] - (world * position)).xyz;
gl_Position = v_position;
}
// fragment-shader
precision highp float;
uniform vec4 colorMult;
varying vec4 v_position;
varying vec2 v_texCoord;
varying vec3 v_normal;
varying vec3 v_surfaceToLight;
varying vec3 v_surfaceToView;
uniform sampler2D diffuseSampler;
uniform vec4 specular;
uniform sampler2D bumpSampler;
uniform float shininess;
uniform float specularFactor;
vec4 lit(float l ,float h, float m) {
return vec4(1.0,
max(l, 0.0),
(l > 0.0) ? pow(max(0.0, h), m) : 0.0,
1.0);
}
void main() {
vec4 diffuse = texture2D(diffuseSampler, v_texCoord) * colorMult;
vec3 normal = normalize(v_normal);
vec3 surfaceToLight = normalize(v_surfaceToLight);
vec3 surfaceToView = normalize(v_surfaceToView);
vec3 halfVector = normalize(surfaceToLight + surfaceToView);
vec4 litR = lit(dot(normal, surfaceToLight),
dot(normal, halfVector), shininess);
gl_FragColor = vec4((
vec4(1,1,1,1) * (diffuse * litR.y
+ specular * litR.z * specularFactor)).rgb,
diffuse.a);
}
如果我沒有在屏幕上看到的東西我想首先就在末尾添加一行改變片段着色器
gl_FragColor = vec4(1,0,0,1); // draw red
如果我開始看到我的幾何圖形,然後我會知道這個問題可能在片段着色器中。我可能會做這個
gl_FragColor = vec4(v_normal * 0.5 + 0.5, 1);
如果法線看着好吧,我可以檢查的UV COORDS與
gl_FragColor = vec4(v_texCoord, 0, 1);
等檢查我的法線...
1
相關問題
- 1. 任何方式來調試嵌入在JavaScript中的WebGL GLSL代碼?
- 2. GLSL錯誤嘗試運行Python代碼
- 3. GLSL程序錯誤 - WebGL
- 4. WebGL/GLSL - ShaderToy如何工作?
- 5. Webgl GLSL/Open GL ES 2.0
- 6. 在代碼塊中調試
- 7. WebGL調試工具?
- 8. 調試代碼
- 9. 在調試託管代碼時調試非託管代碼
- 10. python中的調試代碼
- 11. 調試在.NET代碼
- 12. 調試代碼在MATLAB
- 13. glsl中是否有任何調試器?
- 14. 無法調試網頁代碼,但可以在global.asax中調試代碼
- 15. 在GLSL中的一個片段中插入三個紋理(webgl)
- 16. 調試C++代碼
- 17. 調試Rascal代碼
- 18. 調試DirectX代碼
- 19. 調試Scala代碼
- 20. Python代碼調試
- 21. 調試javascript代碼
- 22. R調試代碼
- 23. 調試arduino代碼
- 24. çFlex代碼調試
- 25. Magento調試代碼
- 26. 調試PHP代碼
- 27. 調試CUDA代碼
- 28. Grafana代碼調試
- 29. 調試Dllimport代碼
- 30. USB調試代碼
如果着色器在執行'gl_FragColor = vec4(v_normal * 0.5 + 0.5,1)時破壞了什麼;'? – shinzou
「着色器突破」是什麼意思? – gman
我收到這個http://imgur.com/m6XBidM,並且形狀被破壞。 – shinzou