Có thể gỡ lỗi mã GLSL hoặc in các giá trị biến từ trong mã glsl trong khi sử dụng nó với webgl không? Do ba.js hoặc scene.js chứa bất kỳ chức năng nào như vậy?Gỡ lỗi mã GLSL trong webgl
13
A
Trả lời
10
Không thực sự,
Cách tôi thường gỡ lỗi GLSL là màu đầu ra. Vì vậy, ví dụ, đưa ra 2 shaders như
// 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);
}
Nếu tôi không nhìn thấy một cái gì đó trên màn hình lần đầu tiên tôi muốn thay đổi shader đoạn tới bởi chỉ cần thêm một dòng ở cuối
gl_FragColor = vec4(1,0,0,1); // draw red
Nếu Tôi bắt đầu thấy hình học của tôi sau đó tôi muốn biết vấn đề có lẽ là trong shader fragment. Tôi có thể kiểm tra normals của tôi bằng cách làm này
gl_FragColor = vec4(v_normal * 0.5 + 0.5, 1);
Nếu normals nhìn sao tôi có thể kiểm tra các coords UV với
gl_FragColor = vec4(v_texCoord, 0, 1);
vv ...
1
Bạn có thể thử WebGL-Inspector cho mục đích này.
+0
Thật không may, nó debugs cuộc gọi từ Javascript, không GLSL thực tế. – Lev
Các vấn đề liên quan
- 1. Làm cách nào để gỡ lỗi trình đổ bóng GLSL?
- 2. Gỡ lỗi mã Lisp
- 3. Gỡ lỗi mã không được quản lý trong khi gỡ lỗi mã được quản lý
- 4. Gỡ lỗi tuyến đường trong mã vạch?
- 5. Mã gỡ lỗi Go (golang) trong Windows
- 6. Gỡ lỗi mã Python trong Notepad ++
- 7. Gỡ lỗi mã java obfuscated
- 8. Gỡ lỗi mã nguồn JBoss
- 9. Trình vẽ WebGL GLSL: truy cập texture2D ghi đè lên kết cấu khác
- 10. Tôi làm cách nào để cải thiện trình đổ bóng ảnh xuống WebGL/GLSL này
- 11. Mã đổ bóng webgl trong dòng trực tuyến trong javascript
- 12. Làm thế nào để console.log trong trình che bóng webgl?
- 13. giải mã rgb giá trị cho phao đơn mà không bit-shift trong glsl
- 14. WebGL và HTML shader-type
- 15. Gỡ lỗi nhúng mã Lua 5.2.2
- 16. Gỡ lỗi/Thử nghiệm Mã LPC
- 17. Gỡ lỗi dòng mã Java theo dòng
- 18. Trình gỡ lỗi mã mức IL
- 19. Gỡ lỗi Java với mã byte
- 20. Chỉnh sửa mã nguồn khi gỡ lỗi
- 21. Cách gỡ lỗi mã OCaml đúng cách?
- 22. Bước qua (Gỡ lỗi) Mã PHP trong Netbeans
- 23. Mã gỡ lỗi trong trình thông dịch Python
- 24. Bỏ qua mã nguồn trong trình gỡ lỗi
- 25. Gỡ lỗi mã Python/C++ hỗn hợp trong Eclipse
- 26. Ipython: Gỡ lỗi mã bên trong máy tính xách tay
- 27. Làm thế nào để gỡ lỗi mã delomboked trong IntelliJ?
- 28. Gỡ lỗi mã mở rộng trong firefox (javascript debugger/venkman)
- 29. Delphi và hoàn thành mã trong khi gỡ lỗi
- 30. Tách mã gỡ lỗi và phát hành trong C#
Điều gì xảy ra nếu trình đổ bóng phá vỡ khi thực hiện 'gl_FragColor = vec4 (v_normal * 0.5 + 0.5, 1);'? – shinzou
"break shader" có nghĩa là gì? – gman
Tôi nhận được http://imgur.com/m6XBidM này và hình dạng bị hỏng. – shinzou