Lauch
August 14, 2019, 7:30am
1
I was wondering if there was a way to debug a shader
I want to know whats in my height variable, cause it seems like it isnt changing at alI
Because i cant really find any documents on the internet that describe these things i wanted to ask what these lines do:
vec4 modelSpacePos = vec4(inPosition, 1.0);
gl_Position = TransformWorldViewProjection(modelSpacePos);
texCoord = inTexCoord;
wPosition = TransformWorld(modelSpacePos).xyz;
height = wPosition.y;
And lastly I wanted to ask how often the shader is being called (and when it is being called)
I’ve told you numerous times to just use inPosition to find your height. You don’t need world space or any other transformation, you just need to know the vertex height so just use inPosition.
You can’t debug a shader but you can get a color output to determine something. Shaders are run every frame that they are visible on the screen.
1 Like
Lauch
August 14, 2019, 8:06am
3
I’ve tried it the moment you said it but i dont know how to get the height from inPosition, or how to use inPosition in general
nvm i’ve adjusted some lines
gl_Position = g_WorldViewProjectionMatrix * vec4(inPosition, 1.0);
wPosition = inPosition;
height = wPosition.y;
now it seems to work
So i guess learning by doing
Thank you again for your time and for not giving up on me
i think now i just have to do some adjustments on my coloring
Divide the height by the maximum height to get a unit value between 0 and 1. Then lerp the color with the unit value. Mix, I guess.
Lauch
August 14, 2019, 8:36am
5
Dont really know what u mean by that
vec3 color = mix(green, red, unitValue);
0 will return green, 1 will return red, and anything in between will be a percentage mix of the two.
i assume he is using same as his friend:
gl_FragColor.rgb = vec3(height/20.0 , 1.0 - height/20.0 ,0.0);
so 20 value change should help.
since i see red appear too fast i assume it will help when changed to something like:
gl_FragColor.rgb = vec3(height/100.0 , 1.0 - height/100.0 ,0.0);
like you said it can be even better if they would use your line with something like:
vec3 color = mix(green, red, height/topHeight);
i dont have problem with this, but i assume they have some crazy height values.
Lauch
August 14, 2019, 9:22am
8
my height values arent that crazy my maximum is about 20-ish
i dont really get where i should put this in my code
Because i cant just assign this to my gl_FragColor right?
gl_FragColor = vec4(myColor, 1.0);
Lauch
August 14, 2019, 9:51am
10
I’ve tried 2 ways now
first was to put
vec3 color = mix(green, red, height/topHeight);
in vertShader
and then just assign it to the gl_FragColor in fragShader
the nex way i tried was putting both in the fragShader
i get these errors depending on which way i used
None of what you said you did correlated to the answer I gave you.
Lauch
August 14, 2019, 9:59am
12
Sure did, i’ve made the color with this
vec3 color = mix(green, red, height/topHeight);
and then assigned it to the gl_FragColor with
void main(){
gl_FragColor.rgb = vec4(color, 1.0);
}
or did i not get something?
Remove the .rgb
FragColor is a vec4 or vector4 or in JME ColorRGBA. It’s a component with 4 values. A vec3 or vector3 has 3 values.
So that line is constructing a vec4 from a vec3 + the 4th component.
Red, green, blue, alpha. Alpha is always 1.0 so we just set it as that at the end.
Lauch
August 14, 2019, 10:10am
14
I’ll try to fix it on my own for now
but
jayfella:
Remove the .rgb
doesnt change anything
oxplay2
August 14, 2019, 12:36pm
15
well, like @jayfella said in other topic. Try understand your problem first. You have error in screenshot you provided. there is something like “you try make vec3 from vec4, thats wrong!” the error says.
knowing this you should know where you try make vec3 from vec4
mitm
August 14, 2019, 6:35pm
16
2 Likes