游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2088|回复: 2

求助:渲染三角形(DircetX 8)!

[复制链接]

7

主题

37

帖子

39

积分

注册会员

Rank: 2

积分
39
发表于 2006-6-21 22:30:00 | 显示全部楼层 |阅读模式
新手来的~按书上的教程做的,可有个错误解决不了~望那位帮小的一下~!
想渲染一个三角形~!运行后说:error C2065: 'g_Vertices' : undeclared identifier!
谢谢了~!!虽然有书教~可编程这东西还不是一般的难啊~~! !以下是我的代码!


#include<d3d8.h>
#define MY_WINCLASS_NAME "Direct3D"



LPDIRECT3D8 g_pD3D=NULL;
LPDIRECT3DDEVICE8 g_pd3dDevice=NULL;
LPDIRECT3DVERTEXBUFFER8   g_pVB=NULL;


////------------初始化D3D设备--------------
HRESULT InitD3D(HWND hWnd)
{
        if(NULL==(g_pD3D=Direct3DCreate8(D3D_SDK_VERSION)))
                return E_FAIL;
        //取得目前桌面的显示模式
        D3DDISPLAYMODE d3ddm;
        if(FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddm)))

                return E_FAIL;

        D3DPRESENT_PARAMETERS d3dpp;
        ZeroMemory(&d3dpp,sizeof(d3dpp));
        d3dpp.Windowed=TRUE;
        d3dpp.Windowed=FALSE;                      //是否为窗口模式
        d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
        d3dpp.BackBufferFormat=d3ddm.Format;
        d3dpp.BackBufferCount=1;
    d3dpp.BackBufferWidth  =d3ddm.Width;  
        d3dpp.BackBufferHeight =d3ddm.Height;
    d3dpp.hDeviceWindow=hWnd;                  //设置设备展示表面的输出窗口
   

        if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,
                                             D3DDEVTYPE_HAL,hWnd,
                                                                         D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                                                         &d3dpp,&g_pd3dDevice)))
        {
                return E_FAIL;
        }
        return S_OK;
}



////-----------------清除D3D对象----------------
VOID Cleanup()
{
        if(g_pd3dDevice!=NULL)
                g_pd3dDevice->Release();
        if(g_pD3D!=NULL)
                g_pD3D->Release();
        return;
}


////--------------windows消息处理------------------
LRESULT WINAPI MsgProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
        switch(msg)
        {
                case WM_DESTROY:
                        PostQuitMessage(0);
                        return 0;
                case WM_PAINT:
                                g_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(255,255,255),1.0f,0);
                                g_pd3dDevice-&gtresent(NULL,NULL,NULL,NULL);
                                ValidateRect(hWnd,NULL);
                                return 0;
        }
        return DefWindowProc(hWnd,msg,wParam,lParam);
}


/////---------------建立D3D绘图环境-----------
int APIENTRY WinMain(HINSTANCE hInstance,
                                         HINSTANCE hPrevInstance,
                                         LPSTR lpCmdLine,int nCmdShow)
{
        WNDCLASSEX wc={sizeof(WNDCLASSEX),CS_CLASSDC,MsgProc,0L,0L,
                           GetModuleHandle(NULL),NULL,NULL,NULL,NULL,MY_WINCLASS_NAME,NULL};

        RegisterClassEx(&wc);

        HWND hWnd=CreateWindow(MY_WINCLASS_NAME,"星 BOX",
                                   WS_OVERLAPPEDWINDOW,100,100,400,300,
                                                   GetDesktopWindow(),NULL,wc.hInstance,NULL);

        //初始化Direct3D
        if(SUCCEEDED(InitD3D(hWnd)))
        {
                //显示窗口
                ShowWindow(hWnd,SW_SHOWDEFAULT);
                UpdateWindow(hWnd);

                //接受windows消息
                MSG msg;
                while(GetMessage(&msg,NULL,0,0))
                {
                        TranslateMessage(&msg);
                        DispatchMessage(&msg);
                }

               
        }
        //清除DirectX对象
        Cleanup();
        UnregisterClass(MY_WINCLASS_NAME, wc.hInstance);
        return 0;
}


struct CUSTOMVERTEX
{
        FLOAT x,y,z,rhw;            //顶点位置
        DWORD color;                //顶点颜色值
};


#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)//@@@@@@@@@@@
HRESULT InitialiseVertexBuffer()
{


        //设置三个顶点的数据
        CUSTOMVERTEX g_Vertices[]=
        {
                {-1.0f,-1.0f,0.0f,1.0f,0xffff0000,},
                {1.0f,-1.0f,0.0f,1.0f,0xff0000ff,},
                {0.0f,1.0f,0.0f,1.0f,0xffffffff,},
        };
        //建立顶点缓冲区

        if(FAILED(g_pd3dDevice->CreateVertexBuffer(3*sizeof(CUSTOMVERTEX),
                                                       0,D3DFVF_CUSTOMVERTEX,
                                                                                           D3DPOOL_DEFAULT,&g_pVB)))
        {
                return E_FAIL;
        }

        VOID*pVertices;
        //锁住顶点缓冲区
        if(FAILED(g_pVB->Lock(0,sizeof(g_Vertices),(BYTE**)&pVertices,0)))
                return E_FAIL;

        //将顶点数据填入顶点缓冲区
        memcpy(pVertices,g_Vertices,sizeof(g_Vertices));
        g_pVB->Unlock();
        return S_OK;
}


void RenderScene()
{
        //将后缓冲区清除设为黑色
        g_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,
                               D3DCOLOR_XRGB(0,0,255),1.0f,0);

        //开始绘制场景
        g_pd3dDevice->BeginScene();
        //设置D3DDEVICE8的着色方式
        g_pd3dDevice->SetVertexShader(D3DFVF_CUSTOMVERTEX);
        g_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST,1,g_Vertices,sizeof(CUSTOMVERTEX));
        //结束绘制场景
        g_pd3dDevice->EndScene();
        //进行换页
        g_pd3dDevice->Present(NULL,NULL,NULL,NULL);

        return;
}  

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2006-6-22 12:28:00 | 显示全部楼层

Re:求助:渲染三角形(DircetX 8)!

g_Vertices未定义,你照抄的时候可能没把它的头文件也抄进来,所以会有这种错误,你还是应该先看看C++的书之后再来搞DX

14

主题

51

帖子

56

积分

注册会员

Rank: 2

积分
56
发表于 2006-6-23 19:32:00 | 显示全部楼层

Re:求助:渲染三角形(DircetX 8)!


CUSTOMVERTEX g_Vertices[]=
{
{-1.0f,-1.0f,0.0f,1.0f,0xffff0000,},
{1.0f,-1.0f,0.0f,1.0f,0xff0000ff,},
{0.0f,1.0f,0.0f,1.0f,0xffffffff,},
};
移动到
struct CUSTOMVERTEX
{
FLOAT x,y,z,rhw;            //顶点位置
DWORD color;                //顶点颜色值
};
的下面!
楼主确实应该先学好C/C++!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-24 19:20

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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