上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
ProjectiveTexturing
ProjectiveTextureMapping
射影テクスチャ
投影テクスチャ
射影マッピング
投影マッピング

projtexmap.jpg

D3DXMATRIX mV, mP; //ビュー、プロジェクション行列
//テクスチャの中心に合わせる行列
D3DXMATRIX mT(
0.5f, 0.0f, 0.0f, 0.0f,
0.0f, -0.5f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
0.5f, 0.5f, 0.0f, 1.0f);

D3DXMatrixLookAtLH(&mV, &(TexPos + D3DXVECTOR3(0,10,0)), &TexPos, &D3DXVECTOR3(0,0,1));
D3DXMatrixOrthoLH(&mP, fTexSize, fTexSize, 0.1f, 1.0f); //正射影

//回転させてみる
static float Angle = 0;
Angle += ToRadian(1);
D3DXVECTOR3 N(0,0,1);
D3DXVec3Normalize(&N, &N);
D3DXQUATERNION qt;
qt.x = qt.y = qt.z = 0;qt.w = 1.0f;
D3DXQuaternionRotationAxis(&qt, &N, Angle);
D3DXMATRIX matQt;
D3DXMatrixRotationQuaternion(&matQt, &qt);

D3DXMATRIX mVPQT = mV * mP * matQt * mT;
D3DXMATRIX mWVPQT;

Shader.SetTechnique("tecProjTex");
Shader.SetTexture("texProj", g_ProjTex.m_pTexture);
//map描画
Shader.SetVector("Ambient", &D3DXVECTOR4(1.0f,1.0f,1.0f,1));//ライティング無効
mWVPQT = Course.GetMatrix() * mVPQT;
Shader.SetMatrix("matProjTex", &mWVPQT);
Course.Render(Shader);
//player描画
Shader.SetVector("Ambient", &D3DXVECTOR4(0.3f,0.3f,0.3f,1));//ライティング有効
mWVPQT = Player.GetMatrix() * mVPQT;
Shader.SetMatrix("matProjTex", &mWVPQT);
Player.Render(Shader);


ここからfxファイル

//============================================================
// ProjectiveTexturing
//============================================================
texture texProj; //合成するテクスチャ
float4x4 matProjTex; //テクスチャの射影行列
sampler ProjSamp=sampler_state {
Texture=;
MipFilter=None;
MinFilter=LINEAR;
MagFilter=LINEAR;
AddressU = Clamp;
AddressV = Clamp;
BorderColor = float4(1,1,1,1);
};
struct VS_OUTPUT_PROJTEX
{
float4 Pos : POSITION;
float2 UV : TEXCOORD0;
float4 Col : COLOR;
float4 ProjUV : TEXCOORD1;
};
VS_OUTPUT_PROJTEX ProjTexVS(
float4 pos : POSITION,
float3 normal : NORMAL,
float2 uv : TEXCOORD0,
float4 col : COLOR
)
{
VS_OUTPUT_PROJTEX Out = (VS_OUTPUT_PROJTEX)0;
//頂点座標
Out.Pos = mul(pos, WVProj);
//テクスチャUV
Out.UV = uv;
Out.ProjUV = mul(pos, matProjTex);
//ライトを考慮した頂点カラーの計算
float3 N = normalize(mul(normal, (float3x3)World));//ワールド法線
float3 L = -normalize(WLight);//ライトの逆ベクトル
Out.Col = col * Diffuse * max( Ambient, dot(N, L) );
return Out;
}
float4 ProjTexPS( VS_OUTPUT_PROJTEX In ) : COLOR
{
return tex2D(MeshSamp, In.UV)
*tex2Dproj(ProjSamp, In.ProjUV)
*In.Col;
}
technique tecProjTex {
pass P0 {
VertexShader = compile vs_1_1 ProjTexVS();
PixelShader = compile ps_2_0 ProjTexPS();
}
}

//参考にしたサイト
http://asura.iaigiri.com/OpenGL/gl45.html
http://www.atelier-blue.com/program/mdirectx/3d/3d02-09.htm
魔方陣画像はこちらよりお借りしました
http://syuu0622.blog18.fc2.com/blog-entry-356.html
コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://perillasoft.blog75.fc2.com/tb.php/5-9862894b
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。