|
请问vs的二层贴图是不是可以在一层的基础上再定义一个u1 v1然后直接mov就行了。是否还要在settexturestate上设置一下?
用cd3dmesh创建mesh:
顶点定义:
struct D3DVERTEX
{
D3DXVECTOR3 p;
D3DXVECTOR3 n;
DWORD color1;
FLOAT tu, tv;
static const DWORD FVF;
};
const DWORD D3DVERTEX::FVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_DIFFUSE |D3DFVF_TEX1;
decl定义:
D3DVERTEXELEMENT9 declDolphin[] =
{
// First stream is first mesh
{ 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0},
{ 0, 12, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 0},
{ 0, 24, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0 },
{ 0, 28, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0},
// Second stream is second mesh
D3DDECL_END()
};
vs代码:
"vs_1_1 \n"\
"dcl_position v0 \n"\
"dcl_color0 v5 \n"\
"dcl_normal v4 \n"\
"dcl_texcoord0 v8 \n"\
"m4x4 oPos, v0, c0 \n"\
"mov oD0 ,v5 \n";
mesh本身为蓝色,无纹理。
显示的mesh有轮廓无颜色。
float color[4] = {1,0,0,0};
g_pd3dDevice->SetVertexShaderConstantF( 4, (float*)&color, 1 );
mov oD0 ,c4
为红色。
就好象v5没有取得材质色一样。
换有纹理的mesh。
mov oT0, v8
显示正常。
请问是怎么回事
|
|