Jump to content
  • Advertisement
Sign in to follow this  
maxest

texture projection

This topic is 4087 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
Advertisement
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!