D3D中一个明暗处理的问题(D3DSHADE_FLAT) (问题,希望DX解答)
来源:互联网 发布:没备案的域名能解析吗 编辑:程序博客网 时间:2024/06/09 14:15
程序生成了一个U形的连续面。大概样子如下图。
令我无法理解的是两个对称的面上明暗竟不一样!
下图是 将U形的模型前后旋转后的效果。同样的位置两个面表现出来的效果不一样?!!
代码如下 :
生成VB:
int iCount = 6;
if( FAILED( lpDevice->CreateVertexBuffer( 2*iCount*sizeof(D3DVERTEX),0,D3DVERTEX::FVF,D3DPOOL_SYSTEMMEM,&g_pVB,NULL ) ) )
return false;
D3DVERTEX* pVertex;
if( FAILED( g_pVB->Lock( 0,2*iCount*sizeof(D3DVERTEX),(void**)&pVertex,0 ) ) )
...{
SAFE_RELEASE( g_pVB );
return false;
}
D3DXVECTOR3 vec3;
int i = 0;
pVertex[i].p = D3DXVECTOR3( 0,-10,0 );
pVertex[i].n = D3DXVECTOR3( 0,0,-1 );
i++;
pVertex[i].p = D3DXVECTOR3( 0,0,0 );
pVertex[i].n = D3DXVECTOR3( 0,0,-1 );
i++;
pVertex[i].p = D3DXVECTOR3( 10,-10,0 );
pVertex[i].n = D3DXVECTOR3( 0,0,-1 );
i++;
pVertex[i].p = D3DXVECTOR3( 10,0,0 );
pVertex[i].n = D3DXVECTOR3( 0,0,-1 );
i++;
pVertex[i].p = D3DXVECTOR3( 20,-10,0 );
vec3 = D3DXVECTOR3(1.0f,0,-1.0f);
D3DXVec3Normalize( &pVertex[i].n ,&vec3 );
i++;
pVertex[i].p = D3DXVECTOR3( 20,0,0 );
vec3 = D3DXVECTOR3(1.0f,0,-1.0f);
D3DXVec3Normalize( &pVertex[i].n ,&vec3 );
i++;
/**////////////////////////////////////////////////////////
pVertex[i].p = D3DXVECTOR3( 20,-10,10 );
vec3 = D3DXVECTOR3(1.0f,0,1.0f);
D3DXVec3Normalize( &pVertex[i].n ,&vec3 );
i++;
pVertex[i].p = D3DXVECTOR3( 20,0,10 );
vec3 = D3DXVECTOR3(1.0f,0,1.0f);
D3DXVec3Normalize( &pVertex[i].n ,&vec3 );
i++;
pVertex[i].p = D3DXVECTOR3( 10,-10,10 );
pVertex[i].n = D3DXVECTOR3( 0,0,1 );
i++;
pVertex[i].p = D3DXVECTOR3( 10,0,10 );
pVertex[i].n = D3DXVECTOR3( 0,0,1 );
i++;
pVertex[i].p = D3DXVECTOR3( 0,-10,10 );
pVertex[i].n = D3DXVECTOR3( 0,0,1 );
i++;
pVertex[i].p = D3DXVECTOR3( 0,0,10 );
pVertex[i].n = D3DXVECTOR3( 0,0,1 );
g_pVB->Unlock();
if( FAILED( lpDevice->CreateVertexBuffer( 2*iCount*sizeof(D3DVERTEX),0,D3DVERTEX::FVF,D3DPOOL_SYSTEMMEM,&g_pVB,NULL ) ) )
return false;
D3DVERTEX* pVertex;
if( FAILED( g_pVB->Lock( 0,2*iCount*sizeof(D3DVERTEX),(void**)&pVertex,0 ) ) )
...{
SAFE_RELEASE( g_pVB );
return false;
}
D3DXVECTOR3 vec3;
int i = 0;
pVertex[i].p = D3DXVECTOR3( 0,-10,0 );
pVertex[i].n = D3DXVECTOR3( 0,0,-1 );
i++;
pVertex[i].p = D3DXVECTOR3( 0,0,0 );
pVertex[i].n = D3DXVECTOR3( 0,0,-1 );
i++;
pVertex[i].p = D3DXVECTOR3( 10,-10,0 );
pVertex[i].n = D3DXVECTOR3( 0,0,-1 );
i++;
pVertex[i].p = D3DXVECTOR3( 10,0,0 );
pVertex[i].n = D3DXVECTOR3( 0,0,-1 );
i++;
pVertex[i].p = D3DXVECTOR3( 20,-10,0 );
vec3 = D3DXVECTOR3(1.0f,0,-1.0f);
D3DXVec3Normalize( &pVertex[i].n ,&vec3 );
i++;
pVertex[i].p = D3DXVECTOR3( 20,0,0 );
vec3 = D3DXVECTOR3(1.0f,0,-1.0f);
D3DXVec3Normalize( &pVertex[i].n ,&vec3 );
i++;
/**////////////////////////////////////////////////////////
pVertex[i].p = D3DXVECTOR3( 20,-10,10 );
vec3 = D3DXVECTOR3(1.0f,0,1.0f);
D3DXVec3Normalize( &pVertex[i].n ,&vec3 );
i++;
pVertex[i].p = D3DXVECTOR3( 20,0,10 );
vec3 = D3DXVECTOR3(1.0f,0,1.0f);
D3DXVec3Normalize( &pVertex[i].n ,&vec3 );
i++;
pVertex[i].p = D3DXVECTOR3( 10,-10,10 );
pVertex[i].n = D3DXVECTOR3( 0,0,1 );
i++;
pVertex[i].p = D3DXVECTOR3( 10,0,10 );
pVertex[i].n = D3DXVECTOR3( 0,0,1 );
i++;
pVertex[i].p = D3DXVECTOR3( 0,-10,10 );
pVertex[i].n = D3DXVECTOR3( 0,0,1 );
i++;
pVertex[i].p = D3DXVECTOR3( 0,0,10 );
pVertex[i].n = D3DXVECTOR3( 0,0,1 );
g_pVB->Unlock();
渲染:
pd3dDevice->SetRenderState( D3DRS_SHADEMODE,D3DSHADE_FLAT );
if( g_pVB )
...{
pd3dDevice->SetStreamSource( 0,g_pVB,0,sizeof(D3DVERTEX) );
pd3dDevice->SetFVF( D3DVERTEX::FVF );
pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP,0,10 );
}
if( g_pVB )
...{
pd3dDevice->SetStreamSource( 0,g_pVB,0,sizeof(D3DVERTEX) );
pd3dDevice->SetFVF( D3DVERTEX::FVF );
pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP,0,10 );
}
不如哪位高手可以指点一下?!
- D3D中一个明暗处理的问题(D3DSHADE_FLAT) (问题,希望DX解答)
- 关于DX中纹理平移的一个小问题
- 一个论坛发帖的问题,比较菜,希望能得到大虾们的解答!谢谢!!
- csdn一个有关影像处理问题帖子的解答
- (191)明暗处理
- 对一个问题的解答
- 对一个问题的解答
- 一个小问题的解答
- 菜鸟的问题,希望各位前辈帮我解答一下!
- eclipse的dx问题
- android的EditText明暗切换时的全角问题
- 一个归档日志格式的问题(希望有人回答)
- Servlet处理流的问题(求解答)
- 解答一个C++问题
- 一个solaris的内核问题的解答
- 一个solaris的内核问题的解答
- 针对事务的一个问题的解答
- 针对事务的一个问题的解答
- include
- 安装freebsd其他软件
- freebsd输入法
- 数据结构(严蔚敏)计算1-1/x+1/x*x…(第一章)
- 继续看,继续看
- D3D中一个明暗处理的问题(D3DSHADE_FLAT) (问题,希望DX解答)
- 笔试题1
- 一个非阻塞IO的java客户和服务器端交换时间的例子。
- 笔试题2:
- A Relational Model of Data for Large Shared Data Banks
- Microsoft .NET Framework 3.0 运行库发布,可以下载离线安装包
- 应用程序之间的通信[2006-11-14]
- 分页
- 分页2