游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3627|回复: 4

请教一个问题:纹理图形显示不出来。

[复制链接]

106

主题

743

帖子

745

积分

高级会员

Rank: 4

积分
745
QQ
发表于 2006-7-31 22:07:00 | 显示全部楼层 |阅读模式
思路:⒈创建纹理对象,并填充纹理。
dxsbzz->CreateTexture(120,60,1,0,D3DFMT_A8R8G8B8,D3DPOOL_MANAGED,&wldxzz,0);

D3DLOCKED_RECT lsxx;
wldxzz->LockRect( 0,&lsxx,0,0);
byte *wlncdz=(byte *)lsxx.pBits;
for(int i=0;i<7200;i=i+4)
{
wlncdz=255;
wlncdz[i+1]=255;
}
wldxzz->UnlockRect(0);

⒉顶点渲染指令。纹理坐标直接输出。
char xrzl[]="vs_2_0 \n  dcl_position v0 \n  dcl_normal v1 \n  dcl_texcoord0 v2  def c4,0.9f,0.9f,0.9f,0.0f \n  def c5,0.5f,0.7f,0.2f,0.0f  m4x4 oPos,v0,c0 \n  dp3 r1,v1,c5  mul r2,r1,c4  mul oD0,r2,c6  mov oT0.xy,v2";
⒊像素渲染指令。纹理坐标经过采样,加上漫反射颜色,然后输出。
char xszl[]="ps_2_0 \n  def c1,0.9f,0.5f,0.3f,0.0f \n  dcl_2d s0  dcl v0 \n  dcl t0  texld r0,t0,s0  add r0,r0,v0  mov oC0,r0";

⒋顶点中已包含纹理坐标。

结果:显示的图形不包含纹理图。
疑问:是否还要经过其他步骤才能显示?

106

主题

743

帖子

745

积分

高级会员

Rank: 4

积分
745
QQ
 楼主| 发表于 2006-7-31 22:10:00 | 显示全部楼层

Re:请教一个问题:纹理图形显示不出来。

原代码:

#include <d3dx9.h>
#include <d3d9.h>
#include <d3dx9math.h>
//#include <stdio.h>
//#include <dinput.h>
//#include <windows.h>
//#include <winuser.h>
//--------------------------------------------------------------------------
LPDIRECT3D9    dxdxzz = NULL;                                 // Direct3D对象指针
LPDIRECT3DDEVICE9  dxsbzz = NULL;         // Direct3D设备指针
LPDIRECT3DVERTEXBUFFER9 ddhcq1  = NULL;// 顶点缓冲区指针
LPDIRECT3DVERTEXBUFFER9 ddhcq2=0;
LPDIRECT3DINDEXBUFFER9 syhcq1=0;//索引缓冲区
//LPDIRECTINPUT8 didxzz = NULL;//IDirectInput对象指针
//IDirectInput8 *didxzz=0;
LPDIRECT3DTEXTURE9      wldxzz   = NULL;//纹理对象指针
LPDIRECT3DVERTEXDECLARATION9 ddsmdx;//顶点声明对象。
IDirect3DVertexShader9* ddxrhs=0;//顶点渲染函数。
IDirect3DVertexShader9* ddxrhs2=0;
IDirect3DPixelShader9 *xsxrhs=NULL;//像素渲染函数。
IDirect3DPixelShader9 *xsxrhs2=0;
HWND ckjb;//定义窗口句柄。

//-----------------------------------------------------------------------------函数声明。
LRESULT WINAPI  chuangkouguocheng(HWND ckjb, UINT msg, WPARAM wParam, LPARAM lParam);
void huitu();//绘图。
void shifangziyuan();//释放资源。
//void zuobiaozhuanhuan();//坐标转换。
//void guangzhao();//光照。
void chushihuadx();//初始化dx。
void xuanran();//渲染。
void zbzh();//坐标转换。
void chuangjianwenli();//创建纹理。
//-----------------------------------------------------------------------------变量声明。
float x=1.0f,y=3.0f,z=5.0f,xjd=0,yjd=0,zjd=0;

float a[19]={0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,-5.0f,0.0f,0.0f,0.0f,0.0f,1.0f,0.0f                        ,90.0f,1.0f,1.0f,100.0f};
float a1[19]={1.0f,1.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,-5.0f,0.0f,0.0f,0.0f,0.0f,1.0f,0.0f                        ,90.0f,1.0f,1.0f,100.0f};
float a2[12]={-1.0f,-5.0f,0.0f,0.1f,0.0f,0.0f,0.0f,0.0f,-10.0f,0.0f,0.0f,0.0f};
//-----------------------------------------------------------------------------定义结构体。
struct ddjg
{
        D3DXVECTOR3 x;
        D3DXVECTOR3 y;
        D3DXVECTOR2 wl;
//        float u,v;
};
struct xsjg
{
byte r,g,b,a;
};
//-----------------------------------------------------------------------------入口函数。
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
        WNDCLASS chuangkoulei;//定义窗口类。
//窗口风格,P671。
    chuangkoulei.style=0;//CS_HREDRAW | CS_VREDRAW;
//指向窗口过程。
    chuangkoulei.lpfnWndProc=chuangkouguocheng;
//指定紧随WNDCLASS数据结构后分配的字节数,系统将起初始化为0。
    chuangkoulei.cbClsExtra=0;
//指定紧随窗口实例之后分配的字节数,系统将起初始化为0。P671
    chuangkoulei.cbWndExtra=0;
//标识了该窗口类的窗口过程所在的模块实例的句柄,不能为NULL。
    chuangkoulei.hInstance=hInstance;
//标识了该窗口类的图标。P672
    chuangkoulei.hIcon=LoadIcon(NULL,IDI_ERROR);//读标准图标。
//标识了该窗口类的光标。P672
    chuangkoulei.hCursor=LoadCursor(NULL,IDC_ARROW);//读标准光标。
//背景颜色。P672
    chuangkoulei.hbrBackground=0;//(HBRUSH)GetStockObject(BLACK_BRUSH);//设置背景。
//菜单名。P672
    chuangkoulei.lpszMenuName=NULL;
//定义窗口类的名字。
    chuangkoulei.lpszClassName="chuangkouleiming";
//注册窗口类。
        RegisterClass(&chuangkoulei);
//创建窗口。
//CreateWindow(窗口类名,标题栏,窗口样式P11,X1,Y1,X2,Y2,指向创建此窗口的父窗口,
//                        指向菜单的句柄,模块实例句柄,指向结构指针P11。)
//GetDesktopWindow()获取桌面窗口句柄,无返回值。
        ckjb=CreateWindow("chuangkouleiming","biaotilan",WS_OVERLAPPEDWINDOW,
                                                100,100,800,600,GetDesktopWindow(),0,hInstance,0);
//初始化dx。
        chushihuadx();
//显示窗口。
        ShowWindow(ckjb,SW_SHOWDEFAULT);
//更新窗口。
        UpdateWindow(ckjb);
//消息循环。
        MSG msg;
        ZeroMemory( &msg, sizeof(msg) );
//GetMessage(指向MSG结构,标识要检查其消息的窗口 如果为NULL 则获取调用该函数的程序的任一
//                窗口,要获取的消息的最小整数值,--最大整数值。最后两个参数为0则获取所有消息。)
        while(GetMessage(&msg,NULL,0,0))
        {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
        }
        shifangziyuan();//释放资源,退出程序。
        UnregisterClass("chuangkoulei",chuangkoulei.hInstance);
        return 0;
}
//-------------------------------------------------------------------------窗口过程。
LRESULT WINAPI  chuangkouguocheng(HWND ckjb, UINT msg, WPARAM wParam, LPARAM lParam)
{

switch(msg)
{
case WM_KEYDOWN:
        {
                switch (wParam)
                {
                        case VK_ESCAPE:
                                PostQuitMessage(0);
                                break;
                        case VK_UP:
                                        y=y-0.2f;
                        //                huitu();
                                        break;
                        case VK_DOWN:
                                        y=y+0.2f;
                                //        huitu();
                                        break;
                        case VK_LEFT:
                                        x=x-0.2f;
                                //        huitu();
                                        break;
                        case VK_RIGHT:
                                        x=x+0.2f;
                                //        huitu();
                                        break;
                        case 71://g
                                a1[4]=a1[4]-0.1f;
                                break;
                        case 69://e
                                a1[1]=a1[1]+0.1f;
                                break;
                        case 68://d
                                a1[1]=a1[1]-0.1f;
                                break;
                        case 83://s
                                a1[0]=a1[0]-0.1f;
                                break;
                                case 70://f
                                a1[0]=a1[0]+0.1f;
                                break;
                        case 72://h
                                xjd=xjd-0.1f;
                                break;
                        case 73://i
                                zjd=zjd+0.1f;
                                break;
                        case 74://j
                                zjd=zjd-0.1f;
                                break;
                }
        }
//case WM_DESTROY://窗口结束消息。
//        PostQuitMessage(0);
//        return 0;
case WM_PAINT://无消息。P704
        xuanran();
//        ValidateRect( ckjb, NULL );
        return 0;
}

return DefWindowProc(ckjb,msg,wParam,lParam);//其他消息。
return 0;
}

//----------------------------------------------------------------------渲染。
void xuanran()
{

dxsbzz->Clear( 0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,//?
                       D3DCOLOR_XRGB(0,0,0), 1.0f, 0 );
        dxsbzz->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );

dxsbzz->BeginScene();
//*
        dxsbzz->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_MODULATE );
        dxsbzz->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
        dxsbzz->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
        dxsbzz->SetTextureStageState( 0, D3DTSS_ALPHAOP,   D3DTOP_DISABLE );
        dxsbzz->SetSamplerState(0,D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
//*/
        float yanse[]={0.2f,0.3f,0.8f};
        dxsbzz->SetVertexShaderConstantF( 6, (float*)&yanse, 1 );
        zbzh();
//设置当前渲染的顶点声明对象,表示渲染的渲染数据流的顶点信息,
dxsbzz->SetVertexDeclaration( ddsmdx );//(顶点声明对象)
//顶点缓冲区中的内容与相应的渲染数据流关联。
//SetStreamSource(渲染数据流序号,顶点缓冲区指针,启始位置,顶点大小)
dxsbzz->SetStreamSource( 0, ddhcq1, 0, sizeof(ddjg) );
//设置当前的顶点渲染函数。
dxsbzz->SetVertexShader( ddxrhs );//(顶点渲染函数)
dxsbzz->SetPixelShader( xsxrhs);  //(像素渲染函数)
//dxsbzz:rawPrimitive(图元类型P36,绘制的起始顶点索引值,图元数量。)
//        dxsbzz->DrawPrimitive( D3DPT_TRIANGLELIST, 0,2);
//关联索引缓冲区。
dxsbzz->SetIndices(syhcq1);
//DrawIndexedPrimitive(图元类型P36,索引缓冲区的启始地址,最小的索引值,绘制的顶点数目,
                                        //第几个点开始绘制,图形数量。)
dxsbzz->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,8,0,12);
        memcpy(a,a1,76);
        zbzh();
        float yanse1[]={0.55f,0.7f,0.4f};
        dxsbzz->SetVertexShaderConstantF( 6, (float*)&yanse1, 1 );
        dxsbzz->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,8,0,12);

        float yanse2[]={0.2f,0.8f,0.3f};
        dxsbzz->SetVertexShaderConstantF( 6, (float*)&yanse2, 1 );

        memcpy(a,a2,48);
        zbzh();

dxsbzz->SetStreamSource( 0, ddhcq2, 0, sizeof(ddjg) );
//dxsbzz->SetVertexShader( ddxrhs );//(顶点渲染函数)
//dxsbzz->SetPixelShader( xsxrhs);
//dxsbzz->SetIndices(syhcq1);
dxsbzz->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,6,36,4);
//
dxsbzz->EndScene();
dxsbzz-&gtresent( NULL, NULL, NULL, NULL );
}
//-----------------------------------------------------------------------释放资源。
void shifangziyuan()
{
dxsbzz->Release();
dxdxzz->Release();
ddhcq1->Release();
ddhcq2->Release();
//wldxzz->Release();
}

//-----------------------------------------------------------------------初始化DX。
void chushihuadx()
{
dxdxzz = Direct3DCreate9( D3D_SDK_VERSION );//创建DX对象。
//创建DX设备对象。P17
//设置传递给LPDIRECT3D9::CreateDevice的参数
//D3DDISPLAYMODE d3ddm;
//dxdxzz->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm );//查询显示模式信息。
        D3DPRESENT_PARAMETERS d3dpp;//设备信息结构。
        ZeroMemory( &d3dpp, sizeof(d3dpp) );//用0填充内存区域。
        d3dpp.Windowed = TRUE;//显示方式,TRUE=窗口,FALSE=全屏。
        d3dpp.SwapEffect =D3DSWAPEFFECT_DISCARD;//后台缓存复制到前台后,清除后台缓存内容。
        d3dpp.hDeviceWindow=ckjb;//关联窗口句柄。
        d3dpp.BackBufferFormat =D3DFMT_UNKNOWN;//d3ddm.Format;//D3DFMT_UNKNOWN;
        d3dpp.EnableAutoDepthStencil = TRUE;//打开深度缓冲区。
        d3dpp.AutoDepthStencilFormat = D3DFMT_D16;//深度缓冲区中一个像素由16位整数表示。
//CreateDevice(显示卡序号,DX设备类型,所属窗口句柄,DX设备进行3D运算的方式P18,
//存储DX设备信息的变量地址,返回DX设备接口指针的地址。)
dxdxzz->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
                                ckjb,D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                &d3dpp, &dxsbzz );
//创建顶点缓冲区。P42
//CreateVertexBuffer(大小 字节,属性,顶点格式,内存位置,ddhcqzz,保留)
dxsbzz->CreateVertexBuffer( 10240,0, 0,D3DPOOL_DEFAULT, &ddhcq1,NULL );
dxsbzz->CreateVertexBuffer( 10240,0, 0,D3DPOOL_DEFAULT, &ddhcq2,NULL );
//创建索引缓冲区。
//CreateIndexBuffer(大小 字节,属性,元素格式16位或32位索引,内存位置,syhcqzz,保留)
dxsbzz->CreateIndexBuffer(100,0,D3DFMT_INDEX16,D3DPOOL_DEFAULT,&syhcq1,0);
//创建纹理。P116
        dxsbzz->CreateTexture(120,60,1,0,D3DFMT_A8R8G8B8,D3DPOOL_MANAGED,&wldxzz,0);
        chuangjianwenli();
//        dxsbzz->SetTexture( 0, wldxzz );



//绘图。
huitu();
//P256。
        D3DVERTEXELEMENT9 ddgs1[] =//顶点格式1。
        {
                { 0, 0,  D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
                { 0, 12, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, 3, 0 },
                {0,24,D3DDECLTYPE_FLOAT2,D3DDECLMETHOD_DEFAULT,5,0},
                D3DDECL_END()
        };
//创建顶点声明对象。CreateVertexDeclaration(顶点格式,顶点声明对象指针的存储地址)
        dxsbzz->CreateVertexDeclaration( ddgs1, &ddsmdx );

//*创建顶点渲染函数。
        //编译渲染指令。c0变换矩阵,c4亮度,c5光的方向向量,c6反射系数。
        LPD3DXBUFFER zldmdz;//指令代码地址。
        char xrzl[]="vs_2_0 \n                dcl_position v0 \n                dcl_normal v1 \n                dcl_texcoord0 v2                def c4,0.9f,0.9f,0.9f,0.0f \n                def c5,0.5f,0.7f,0.2f,0.0f                m4x4 oPos,v0,c0 \n                dp3 r1,v1,c5                mul r2,r1,c4                mul oD0,r2,c6                mov oT0.xy,v2";
        //D3DXAssembleShader(渲染指令,渲染指令长度,顶点渲染预定义0,D3D效果文件使用0,
        //                                        编译指令选项0,指令代码地址,生成错误信息 0=不生成,P257)
        D3DXAssembleShader(xrzl,strlen(xrzl),0,0,0,&zldmdz,0);
        //创建顶点渲染函数CreateVertexShader(指令地址,生成的顶点渲染函数指针。)
        dxsbzz->CreateVertexShader((DWORD*)zldmdz->GetBufferPointer(),&ddxrhs);
        zldmdz->Release();
//*/                mul oD0,r2,c6\                add r0,r0,v0\                texld r0,t0,s0

//创建像素渲染函数。
        LPD3DXBUFFER xszldz;//像素指令地址。
        char xszl[]="ps_2_0 \n                def c1,0.9f,0.5f,0.3f,0.0f \n                dcl_2d s0                dcl v0 \n                dcl t0                texld r0,t0,s0                add r0,r0,v0                mov oC0,r0";//像素指令
        //D3DXAssembleShader(渲染指令,渲染指令长度,顶点渲染预定义0,D3D效果文件使用0,
        //                                        编译指令选项0,指令代码地址,生成错误信息 0=不生成,P257)
        D3DXAssembleShader(xszl,strlen(xszl),0,0,0,&xszldz,0);
dxsbzz->CreatePixelShader((DWORD*)xszldz->GetBufferPointer(),
                                                                          &xsxrhs);
        xszldz->Release();



}
//-----------------------------------------------------------------------------绘图。
void huitu()
{


//*
        ddjg* nczzdz;//内存指针地址。
//ddhcqzz:ock(加锁内存起始地址,加锁内存大小,返回内存指针地址,属性P44。)
        ddhcq1->Lock( 0, 0, (void**)&nczzdz, 0 );
//定义三角形顶点数据。
        nczzdz[0].x=D3DXVECTOR3(1.0f,0.0f,0.0f);//1 0 0   0
        nczzdz[0].y=D3DXVECTOR3(1.0f,1.0f,0.0f);
        nczzdz[0].wl=D3DXVECTOR2(0.0f,0.0f);
        nczzdz[1].x=D3DXVECTOR3(0.0f,1.0f,0.0f);//0 1 0   1
        nczzdz[1].y=D3DXVECTOR3(0.0f,1.0f,0.0f);
        nczzdz[1].wl=D3DXVECTOR2(0.0f,1.0f);
        nczzdz[2].x=D3DXVECTOR3(0.0f,0.0f,0.0f);//0 0 0   2
        nczzdz[2].y=D3DXVECTOR3(1.0f,0.0f,0.0f);
        nczzdz[2].wl=D3DXVECTOR2(1.0f,0.0f);
        nczzdz[3].x=D3DXVECTOR3(1.0f,1.0f,0.0f);//1 1 0   3
        nczzdz[3].y=D3DXVECTOR3(1.0f,1.0f,1.0f);
        nczzdz[3].wl=D3DXVECTOR2(1.0f,1.0f);
        nczzdz[4].x=D3DXVECTOR3(0.0f,1.0f,1.0f);//0 1 1   4
        nczzdz[4].y=D3DXVECTOR3(0.0f,0.0f,1.0f);
        nczzdz[4].wl=D3DXVECTOR2(0.0f,1.0f);
        nczzdz[5].x=D3DXVECTOR3(0.0f,0.0f,1.0f);//0 0 1   5
        nczzdz[5].y=D3DXVECTOR3(0.0f,0.0f,1.0f);
        nczzdz[5].wl=D3DXVECTOR2(1.0f,0.0f);
        nczzdz[6].x=D3DXVECTOR3(1.0f,1.0f,1.0f);//1 1 1   6
        nczzdz[6].y=D3DXVECTOR3(0.4f,0.2f,0.3f);
        nczzdz[6].wl=D3DXVECTOR2(0.0f,0.0f);
        nczzdz[7].x=D3DXVECTOR3(1.0f,0.0f,1.0f);//1 0 1   7
        nczzdz[7].y=D3DXVECTOR3(0.4f,0.2f,0.3f);
        nczzdz[7].wl=D3DXVECTOR2(0.0f,1.0f);

        ddhcq1->Unlock();
//*
        ddjg* nczzdz2;
        ddhcq2->Lock(0,0,(void**)&nczzdz2,0);
        nczzdz2[0].x=D3DXVECTOR3(-2.0f,0.0f,-2.0f);
        nczzdz2[0].y=D3DXVECTOR3(0.4f,1.0f,0.6f);
        nczzdz2[0].wl=D3DXVECTOR2(0.0f,1.0f);
        nczzdz2[1].x=D3DXVECTOR3(2.0f,0.0f,-2.0f);
        nczzdz2[1].y=D3DXVECTOR3(0.4f,1.0f,0.6f);
        nczzdz2[1].wl=D3DXVECTOR2(1.0f,0.5f);
        nczzdz2[2].x=D3DXVECTOR3(2.0f,0.0f,2.0f);
        nczzdz2[2].y=D3DXVECTOR3(0.4f,1.0f,0.6f);
        nczzdz2[2].wl=D3DXVECTOR2(0.5f,0.0f);
        nczzdz2[3].x=D3DXVECTOR3(-2.0f,0.0f,2.0f);
        nczzdz2[3].y=D3DXVECTOR3(0.4f,1.0f,0.6f);
        nczzdz2[3].wl=D3DXVECTOR2(1.0f,0.0f);
        nczzdz2[4].x=D3DXVECTOR3(6.0f,0.0f,-2.0f);
        nczzdz2[4].y=D3DXVECTOR3(0.4f,1.0f,0.6f);
        nczzdz2[4].wl=D3DXVECTOR2(0.5f,0.0f);
        nczzdz2[5].x=D3DXVECTOR3(6.0f,0.0f,2.0f);
        nczzdz2[5].y=D3DXVECTOR3(0.4f,1.0f,0.6f);
        nczzdz2[5].wl=D3DXVECTOR2(0.0f,0.5f);
        ddhcq2->Unlock();
//*/
        WORD lssz[]={2,0,1,0,1,3,3,0,7,7,6,3,1,3,4,3,4,6,2,0,5,5,0,7,5,7,4,4,7,6,1,4,5,1,5,2                                ,0,1,2,0,2,3,1,2,4,4,2,5};
        void *synczzdz;//索引内存指针地址。
        syhcq1->Lock( 0, 0, (void**)&synczzdz, 0 );
        memcpy(synczzdz,lssz,sizeof(lssz));
        syhcq1->Unlock();

}
void zbzh()
{
D3DXMATRIXA16 MatResult;

    D3DXMATRIXA16 matWorld;
        D3DXMATRIXA16 pyjz;
        D3DXMATRIXA16 xzjzx;
        D3DXMATRIXA16 xzjzy;
        D3DXMATRIXA16 xzjzz;
//    UINT  iTime  = timeGetTime() % 1000;
//    FLOAT fAngle = iTime * (2.0f * D3DX_PI) / 1000.0f;
        D3DXMatrixTranslation(&pyjz,a[0],a[1],a[2]);
D3DXMatrixRotationX( &xzjzx,a[3]);
D3DXMatrixRotationY( &xzjzy,a[4]);
D3DXMatrixRotationZ( &xzjzz,a[5]);
D3DXMatrixMultiply(&matWorld,&xzjzx,&xzjzy);
D3DXMatrixMultiply(&matWorld,&matWorld,&xzjzz);
D3DXMatrixMultiply(&matWorld,&matWorld,&pyjz);
//   D3DXMatrixTranslation( &matWorld, 0,0,0 );

    D3DXVECTOR3 vEyePt( a[6],a[7],a[8] );
    D3DXVECTOR3 vLookatPt( a[9], a[10], a[11] );
    D3DXVECTOR3 vUpVec( a[12], a[13], a[14] );
    D3DXMATRIXA16 matView;
    D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec );

    D3DXMATRIXA16 matProj;
    D3DXMatrixPerspectiveFovLH( &matProj, a[15], a[16], a[17], a[18] );


        D3DXMatrixMultiply (&MatResult,&matWorld,&matView);
        D3DXMatrixMultiply (&MatResult,&MatResult,&matProj);
        D3DXMatrixTranspose( &MatResult, &MatResult );
//第几个开始定义,定义的常量值,定义的数目。
        dxsbzz->SetVertexShaderConstantF( 0, (float*)&MatResult, 4 );
}
//---------------------------------------------------------------------创建纹理。

void chuangjianwenli()
{
//*

//        dxsbzz->CreateTexture(120,60,1,0,D3DFMT_X8R8G8B8,D3DPOOL_MANAGED,&wldxzz,0);
D3DLOCKED_RECT lsxx;//返回的加锁区域信息。临时信息。
        wldxzz->LockRect( 0,&lsxx,0,0);
byte *wlncdz=(byte *)lsxx.pBits;//纹理内存地址。

        for(int i=0;i<7200;i=i+4)
        {
        wlncdz=255;
        wlncdz[i+1]=255;
//        wlncdz[i+2]=255;
        }
        wldxzz->UnlockRect(0);
//*/


}

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2006-8-1 08:24:00 | 显示全部楼层

Re:请教一个问题:纹理图形显示不出来。

你没调用ID3DDevice9::SetTexture,所以不会显示...因为ps代码在显存里找不到纹理。
另:下次别贴这么多乱糟糟的代码上来啊....看的好难受,把关键代码贴上来就行了。

106

主题

743

帖子

745

积分

高级会员

Rank: 4

积分
745
QQ
 楼主| 发表于 2006-8-1 20:58:00 | 显示全部楼层

Re:请教一个问题:纹理图形显示不出来。

多谢楼上指点,终于可以显示出来了。

4

主题

36

帖子

54

积分

注册会员

Rank: 2

积分
54
发表于 2006-8-2 10:14:00 | 显示全部楼层

Re:请教一个问题:纹理图形显示不出来。

显示一个纹理也用不到这么多代码吧
我的10行就搞定了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 01:23

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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