|
|
[code][/code]
不知是不是硬件的问题?很迷惑不解
先看一段代码(这是书本的正确完整例子,为了说明问题,我略去了少许细节)
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_TEX1)
struct CUSTOMVERTEX
{
FLOAT x, y, z; //顶点位置
FLOAT u,v ; //顶点纹理坐标
};
//顶点数据
CUSTOMVERTEX g_Vertices[] =
{
{ -3, -3, 0.0f, 0.0f, 1.0f},
{ -3, 3, 0.0f, 0.0f, 0.0f},
{ 3, -3, 0.0f, 1.0f, 1.0f},
{ 3, 3, 0.0f, 1.0f, 0.0f }
};
//设置变换矩阵
VOID SetupMatrices()
{
//设置变换矩阵
//略
}
// 初始化Direct3D
HRESULT InitD3D( HWND hWnd )
{
//创建Direct3D设备对象
//在我的显卡上支持HAL和硬件顶点处理
g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&d3dpp, &g_pd3dDevice );
//顶点数据进VertexBuffer
//禁用照明效果
g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, FALSE );
//设置变换矩阵
SetupMatrices();
//创建纹理对象
D3DXCreateTextureFromFile( g_pd3dDevice, L"f:\\test.bmp", &g_pTexture );
}
//渲染图形
VOID Render()
{
//清空后台缓冲区
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(45, 50, 170), 1.0f, 0 );
//开始在后台缓冲区绘制图形
if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
{
g_pd3dDevice->SetTexture( 0, g_pTexture ); //设置纹理
g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2);
//结束在后台缓冲区绘制图形
g_pd3dDevice->EndScene();
}
//将在后台缓冲区绘制的图形提交到前台缓冲区显示
g_pd3dDevice-> resent( NULL, NULL, NULL, NULL );
}
以上代码运行正常,也显示出了纹理图片
下面对以上代码作少许修改,迷惑的事情来了
修改如下:
1.拿掉SetupMatrices()
2.修改FVF
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_TEX1)
3.修改顶点数据(顶点在屏幕定义的)
CUSTOMVERTEX g_Vertices[] =
{0, 400, 0,0,0,1,
0,0, 0, 0,0,0,
400, 400, 0, 0,1,1,
400, 0, 0, 0, 1, 0};
4.其它代码保持不变
编译成功,运行只看到一个灰蒙蒙的四方框
请问这是什么问题?
|
|