游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2305|回复: 7

不知是不是硬件的问题?很迷惑不解

[复制链接]

7

主题

28

帖子

28

积分

注册会员

Rank: 2

积分
28
发表于 2009-5-31 03:27:00 | 显示全部楼层 |阅读模式

[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-&gtresent( 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.其它代码保持不变
编译成功,运行只看到一个灰蒙蒙的四方框
请问这是什么问题?

7

主题

28

帖子

28

积分

注册会员

Rank: 2

积分
28
 楼主| 发表于 2009-5-31 03:33:00 | 显示全部楼层

Re:不知是不是硬件的问题?很迷惑不解

顶点结构变成这样:
struct CUSTOMVERTEX
{
FLOAT x, y, z, w;   //顶点位置  
FLOAT u,v ;         //顶点纹理坐标
};

7

主题

28

帖子

28

积分

注册会员

Rank: 2

积分
28
 楼主| 发表于 2009-5-31 03:39:00 | 显示全部楼层

Re:不知是不是硬件的问题?很迷惑不解

我检查过N遍了,就是找不到问题。每次看它好像都是正确的
如果说硬件不支持纹理加速,那么前面的代码也不能显示纹理啊,
但前面的代码运行起来正常,纹理图片也能见,
但换成在屏幕上定义的顶点它就没显示纹理图片了。我迷惑了。。

7

主题

28

帖子

28

积分

注册会员

Rank: 2

积分
28
 楼主| 发表于 2009-6-1 12:15:00 | 显示全部楼层

Re:不知是不是硬件的问题?很迷惑不解

怎么没人帮忙看看

7

主题

28

帖子

28

积分

注册会员

Rank: 2

积分
28
 楼主| 发表于 2009-6-1 12:25:00 | 显示全部楼层

Re: 不知是不是硬件的问题?很迷惑不解

帮忙运行一下,我好有个底

7

主题

28

帖子

28

积分

注册会员

Rank: 2

积分
28
 楼主| 发表于 2009-6-1 12:30:00 | 显示全部楼层

Re: 不知是不是硬件的问题?很迷惑不解

[em7]

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
发表于 2009-6-1 17:36:00 | 显示全部楼层

Re: 不知是不是硬件的问题?很迷惑不解

再我这里运行好好的,图片能正常显示

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
发表于 2009-6-1 17:43:00 | 显示全部楼层

Re:不知是不是硬件的问题?很迷惑不解

你运行下dx sdk里的例子程序, 如果不能正常运行肯定是硬件的问题。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-20 04:34

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表