Sign in to follow this  

texture projection

This topic is 3874 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

I have just solved my problem. The problem was that I was passing vertex's position to the vertex shader as float3, whereas position.w was not defined. That was the only problem :) If anybody is interested in texture projection, I present my code here Code that comes from application
void UpdateMatrices()
{
	D3DXMATRIX proj_matrix, view_matrix;
	D3DXMATRIX tex_proj_matrix, tex_view_matrix, tex_normalize_matrix;



	D3DXMatrixPerspectiveFovLH(&proj_matrix,D3DX_PI/4.0f,(float)((float)800.0f/(float)600.0f),1.0f,1000.0f);
	D3DXMatrixLookAtLH(&view_matrix,&D3DXVECTOR3(-25.0f,25.0f,-25.0f),&D3DXVECTOR3(0.0f,0.0f,0.0f),&D3DXVECTOR3(0.0f,1.0f,0.0f));



	D3DXMatrixPerspectiveFovLH(&tex_proj_matrix,D3DX_PI/2.0f,1.0f,1.0f,10.0f);
	D3DXMatrixLookAtLH(&tex_view_matrix,&D3DXVECTOR3(-5.0f,5.0f,-5.0f),&D3DXVECTOR3(0.0f,0.0f,0.0f),&D3DXVECTOR3(0.0f,1.0f,0.0f));
	
	{
		tex_normalize_matrix(0, 0) = 0.5f;
		tex_normalize_matrix(1, 0) = 0.0f;
		tex_normalize_matrix(2, 0) = 0.0f;
		tex_normalize_matrix(3, 0) = 0.5f;

		tex_normalize_matrix(0, 1) = 0.0f;
		tex_normalize_matrix(1, 1) = 0.5f;
		tex_normalize_matrix(2, 1) = 0.0f;
		tex_normalize_matrix(3, 1) = 0.5f;

		tex_normalize_matrix(0, 2) = 0.0f;
		tex_normalize_matrix(1, 2) = 0.0f;
		tex_normalize_matrix(2, 2) = 0.5f;
		tex_normalize_matrix(3, 2) = 0.5f;

		tex_normalize_matrix(0, 3) = 0.0f;
		tex_normalize_matrix(1, 3) = 0.0f;
		tex_normalize_matrix(2, 3) = 0.0f;
		tex_normalize_matrix(3, 3) = 1.0f;
	}



	D3DXMATRIX mWorldViewProj = view_matrix * proj_matrix;
	D3DXMATRIX mTexture = tex_view_matrix * tex_proj_matrix * tex_normalize_matrix;

	vs_constant_table->SetMatrix(device3d, "mWorldViewProj", &mWorldViewProj);
	vs_constant_table->SetMatrix(device3d, "mTexture", &mTexture);
}
Vertex shader:
uniform float4x4 mWorldViewProj;
uniform float4x4 mTexture;

struct VS_OUTPUT
{
    float4 position: POSITION;
    float4 diffuse: COLOR;
    float4 texCoordProj: TEXCOORD0;
};

VS_OUTPUT main(in float4 position: POSITION, in float4 diffuse: COLOR, in float2 texCoord: TEXCOORD0)
{
    VS_OUTPUT output;

    output.position = mul(float4(position.xyz, 1.0f), mWorldViewProj);
    output.diffuse = diffuse;
    output.texCoordProj = mul(position, mTexture);
    
    return output;
}
Pixel shader:
struct PS_OUTPUT
{
    float4 color: COLOR;
};

uniform sampler2D decal0;

PS_OUTPUT main(in float4 texCoordProj: TEXCOORD0)
{
    PS_OUTPUT output;
	
    output.color = tex2Dproj(decal0, texCoordProj);
    
    return output;
}
[Edited by - Maxest on May 8, 2007 6:27:11 PM]

Share this post


Link to post
Share on other sites

This topic is 3874 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.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this