• Advertisement
Sign in to follow this  

help with parallax mapping

This topic is 4153 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

ive been trying to figure this out for so long that i have no idea what im doing anymore... please help me out.. im tring to do some parallax mapping for a mesh... but all i get is a mess... please ignore the rest of the code and just how i would calc the new texcoords using parallax mapping
//VERTEX
#version 110

varying vec3 Vertex;

void main()
{		
	Vertex = gl_Vertex.xyz;
	gl_TexCoord[0] = gl_MultiTexCoord0;
	gl_TexCoord[1] = gl_MultiTexCoord1;
	gl_Position = ftransform();	
}

//FRAGMENT
#version 110

varying vec3 Vertex;

uniform sampler2D horizons;
uniform sampler2D normals;
uniform float angle;
uniform vec3 ViewPos;

void main()
{	
	

	// PARALLAXMAPPING
	float TrueHeight = texture2D(normals, gl_TexCoord[0].st).a;
	float GeoHeight = Vertex.y;
	float HeightDiff = (TrueHeight-GeoHeight);
	
	float s = 0.042;
	float b = -s/2.0;
	float HeightDev = (HeightDiff*s)+b;
	
	vec3 nView = ViewPos-Vertex;
	vec2 ViewSlope = nView.xy/nView.z;
	
	vec2 NewTexCoord = gl_TexCoord[0].st + HeightDev*ViewSlope;
	

        // BUMP AND HORIZON MAPPING

	vec3 Normal = texture2D(normals, NewTexCoord).rgb*2.0-1.0;
	vec3 LightDir = vec3(-cos(angle*0.01745329), -sin(angle*0.01745329), 0.0);
	
	float LightSlope = LightDir.y/LightDir.x;
	float OffsetSlope = sin(10.0*0.01745329);
	float HorizonSlope = texture2D(horizons, NewTexCoord).x;
			
	float minslope = LightSlope - OffsetSlope/2.0;
	float maxslope = LightSlope + OffsetSlope/2.0;
		
	float Shadow = HorizonSlope < minslope ? 1.0 : HorizonSlope > maxslope ? 0.0 : (maxslope-HorizonSlope)/(maxslope-minslope);
			
	float Intensity = dot(LightDir, Normal)*Shadow;

		
	gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0)*Intensity ;

}

_________________________

				ShaderProgram->sendUniform("normals", 0);
				ShaderProgram->sendUniform("horizons", 1);
				ShaderProgram->sendUniform("angle", SunAngle);
				ShaderProgram->sendUniform("ViewPos", (float)m_Cam->Position.x, (float)m_Cam->Position.y, (float)m_Cam->Position.z );


[Edited by - Dragon_Strike on October 7, 2006 5:25:28 AM]

Share this post


Link to post
Share on other sites
Advertisement
ive amde a nother try.. but same problem.. now im just trying to do it on a flat surface...



//VERTEX

#version 110


uniform vec4 Eye;
varying vec3 EyeDir;
varying float Height;

void main()
{

// Also, transform the vertex into view-space.
vec3 m_Vector = vec3(gl_ModelViewMatrix * gl_Vertex);
Height = m_Vector.y;
vec3 dirEye = Eye.xyz - m_Vector;

vec3 m_Tangent = vec3(gl_ModelViewMatrix * vec4(1.0, 0.0, 0.0, 0.0));
vec3 m_Normal = vec3(gl_ModelViewMatrix * vec4(0.0, 0.0, 1.0, 0.0));
vec3 m_BiNormal = vec3(gl_ModelViewMatrix * vec4(1.0, 1.0, 0.0, 0.0));

EyeDir.x = dot(m_Tangent.xyz , dirEye);
EyeDir.y = dot(m_BiNormal.xyz , dirEye);
EyeDir.z = dot(m_Normal.xyz , dirEye);

gl_TexCoord[0] = gl_MultiTexCoord0;
gl_TexCoord[1] = gl_MultiTexCoord1;
gl_Position = ftransform();
}

// FRAGMENT

#version 110



uniform sampler2D tex;
uniform sampler2D bump;
uniform float angle;

varying float Height;
varying vec3 EyeDir;

void main()
{


vec3 EyeT = normalize(EyeDir);
float HeightDiff = texture2D(bump, gl_TexCoord[0].st).a;
vec4 Offset = vec4(HeightDiff,HeightDiff,HeightDiff,1.0);
Offset = Offset * 0.04 - 0.02;
vec2 TexCoords = Offset.xy * EyeT.xy + gl_TexCoord[0].st;

gl_FragColor = tex(bump, TexCoords );

}
______________

ShaderProgram->sendUniform("bump", 0);
ShaderProgram->sendUniform("tex", 1);
ShaderProgram->sendUniform("Eye", (float)m_Cam->Position.x, (float)m_Cam->Position.y, (float)m_Cam->Position.z, 1.0f );






this is waht i get...

Image Hosted by ImageShack.us

shouldnt parallax mapping be pssible without tangent vectors?

[Edited by - Dragon_Strike on October 7, 2006 8:49:29 AM]

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement