Shaders


#1

i´m trying to put a shader in wings3d v33, but it seams to not work, what i get is just a black uvmap. The shader is the procedural Bricks that i found on this site 3dshaders.com.

Dgud says that we need to make a wpc_shadername.auv file i made it, and the shader shows in the uvw window, but the texture is showing black. Here are the shaders and the wpc file. Any help will be wealcome.

//
// Vertex shader for procedural bricks
//
// Authors: Dave Baldwin, Steve Koren, Randi Rost
// based on a shader by Darwyn Peachey
//
// Copyright © 2002-2006 3Dlabs Inc. Ltd.
//
// See 3Dlabs-License.txt for license information
//

uniform vec3 LightPosition;

const float SpecularContribution = 0.3;
const float DiffuseContribution = 1.0 - SpecularContribution;

varying float LightIntensity;
varying vec2 MCposition;

void main()
{
vec3 ecPosition = vec3(gl_ModelViewMatrix * gl_Vertex);
vec3 tnorm = normalize(gl_NormalMatrix * gl_Normal);
vec3 lightVec = normalize(LightPosition - ecPosition);
vec3 reflectVec = reflect(-lightVec, tnorm);
vec3 viewVec = normalize(-ecPosition);
float diffuse = max(dot(lightVec, tnorm), 0.0);
float spec = 0.0;

  if (diffuse > 0.0)
  {
      spec = max(dot(reflectVec, viewVec), 0.0);
      spec = pow(spec, 16.0);
  }

  LightIntensity  = DiffuseContribution * diffuse +
                    SpecularContribution * spec;

  MCposition      = gl_Vertex.xy;
  gl_Position     = ftransform();

}

//
// Fragment shader for procedural bricks
//
// Authors: Dave Baldwin, Steve Koren, Randi Rost
// based on a shader by Darwyn Peachey
//
// Copyright © 2002-2006 3Dlabs Inc. Ltd.
//
// See 3Dlabs-License.txt for license information
//

uniform vec3 BrickColor, MortarColor;
uniform vec2 BrickSize;
uniform vec2 BrickPct;

varying vec2 MCposition;
varying float LightIntensity;

void main()
{
vec3 color;
vec2 position, useBrick;

  position = MCposition / BrickSize;

  if (fract(position.y * 0.5) > 0.5)
      position.x += 0.5;

  position = fract(position);

  useBrick = step(position, BrickPct);

  color  = mix(MortarColor, BrickColor, useBrick.x * useBrick.y);
  color *= LightIntensity;
  gl_FragColor = vec4(color, 1.0);

}

{name, “Bricks”}. % The name in the shader selector
{vertex_shader, “Bricks.vs”}. % Vertex shader used
{fragment_shader, “Bricks.fs”}. % Fragment shader used
{auv, auv_bbpos3d}. % Use bounding box for positions


#2

You can’t use Modelview matrix or normal matrix at all, you are rendering to a texture now,
you use the vertex coordinates directly if you want they are in world space.

And you can’t glVertex they are the texture coordinates. See the examples on noise that is included there I got the real vertex coordinates.

And specular you will have to remove, you don’t have any light… you would hardcode a lightdirection
to your texture and that is not what you want.

Use shaders to create a diffuse, bump, or ambient texture or for starting point before painting it in PS.


#3

Thanks for the replay dgud. But i see that i am out of my league on this matter, i don´t know how to code shaders i just copy&pasted the shader on that site, to see if i was able to make it work but it seams that the shader needs to be rewriten to work on wings, and that i don´t know how. But thanks any way your reply will be helpfull to all the ones that want to make shaders(but know how to do them :rolleyes: ).


#4

This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.