游戏开发论坛

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

DIRECTX写一个旋转的立方体问题

[复制链接]

3

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2010-7-20 19:51:00 | 显示全部楼层 |阅读模式
本来是一个旋转的彩色立方体 我这个出来只有一个蓝色的背景 求大侠看看问题在哪啊 我都是照书上写的
#pragma comment(lib,"dxerr.lib")
#pragma comment(lib,"dxguid.lib")
#pragma comment(lib,"d3dx9d.lib")
#pragma comment(lib,"d3d9.lib")
#pragma comment(lib,"winmm.lib")
#pragma comment(lib,"comctl32.lib")
#include <windows.h>
#include<d3d9.h>
#include <d3dx9.h>
LPDIRECT3D9       g_pD3D = NULL;
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL;
LPDIRECT3DVERTEXBUFFER9 g_pVB=NULL;
LPDIRECT3DINDEXBUFFER9  g_pIB = NULL;


struct CUSTOMVERTEX
{
    FLOAT x, y, z; // The transformed position for the vertex
    DWORD color;        // The vertex color
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)

//------------------------------------------
//初始化D3D
//------------------------------------------





HRESULT InitializeD3D(HWND hWnd)
{
        if (NULL==(g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
                return false;
        D3DPRESENT_PARAMETERS d3dpp;
        ZeroMemory(&d3dpp,sizeof(d3dpp));
        d3dpp.Windowed = TRUE;
        d3dpp.SwapEffect =D3DSWAPEFFECT_DISCARD;
        d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
        if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&g_pd3dDevice)))
        {
                return E_FAIL;
        }
        

        return TRUE;
}



HRESULT InitVB()
{
            CUSTOMVERTEX Vertices[] =
    {
        { -1.0f,-1.0f, -1.0f, D3DCOLOR_XRGB(255,0,0)},
         { -1.0f,1.0f, -1.0f, D3DCOLOR_XRGB(0,255,0)},
        { 1.0f,1.0f, -1.0f, D3DCOLOR_XRGB(0,0,255)},
                 { 1.0f,-1.0f, -1.0f, D3DCOLOR_XRGB(255,255,0)},
                  { -1.0f,-1.0f, 1.0f, D3DCOLOR_XRGB(255,0,255)},
                   { -1.0f,1.0f, 1.0f, D3DCOLOR_XRGB(0,255,255)},
                    { 1.0f,1.0f, 1.0f, D3DCOLOR_XRGB(0,0,0)},
                         { 1.0f,-1.0f, 1.0f, D3DCOLOR_XRGB(255,255,255)}
    };
                 if( FAILED( g_pd3dDevice->CreateVertexBuffer( 3 * sizeof( CUSTOMVERTEX ),
                                                  0, D3DFVF_CUSTOMVERTEX,
                                                  D3DPOOL_DEFAULT, &g_pVB, NULL ) ) )
    {
        return E_FAIL;
    }
                 g_pd3dDevice->CreateIndexBuffer(
                36 * sizeof(WORD),
                D3DUSAGE_WRITEONLY,
                D3DFMT_INDEX16,
                D3DPOOL_MANAGED,
                &g_pIB,
                0);
        
                  VOID* pVertices;
    if( FAILED( g_pVB->Lock( 0, sizeof( Vertices ), ( void** )&pVertices, 0 ) ) )
        return E_FAIL;
    memcpy( pVertices, Vertices, sizeof( Vertices ) );
    g_pVB->Unlock();

        WORD* indices = 0;
        g_pIB->Lock(0,0,(void**)&indices,0);
        indices[0]  = 0; indices[1]  = 1; indices[2]  = 2;
        indices[3]  = 0; indices[4]  = 2; indices[5]  = 3;

        // back side
        indices[6]  = 4; indices[7]  = 6; indices[8]  = 5;
        indices[9]  = 4; indices[10] = 7; indices[11] = 6;

        // left side
        indices[12] = 4; indices[13] = 5; indices[14] = 1;
        indices[15] = 4; indices[16] = 1; indices[17] = 0;

        // right side
        indices[18] = 3; indices[19] = 2; indices[20] = 6;
        indices[21] = 3; indices[22] = 6; indices[23] = 7;

        // top
        indices[24] = 1; indices[25] = 5; indices[26] = 6;
        indices[27] = 1; indices[28] = 6; indices[29] = 2;

        // bottom
        indices[30] = 4; indices[31] = 0; indices[32] = 3;
        indices[33] = 4; indices[34] = 3; indices[35] = 7;
        g_pIB->Unlock();



        D3DXVECTOR3 position(0.0f,0.0f,-5.0f);
        D3DXVECTOR3 target(0.0f,0.0f,0.0f);
        D3DXVECTOR3 up(0.0f,1.0f,0.0f);
    D3DXMATRIX V;
        D3DXMatrixLookAtLH(&V,&position,&target,&up);
        g_pd3dDevice->SetTransform(D3DTS_VIEW, &V);



         D3DXMATRIXA16 Proj;
    D3DXMatrixPerspectiveFovLH( &amproj, D3DX_PI * 0.5f, (float)800/(float)600, 1.0f, 1000.0f );
    g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &Proj );

         g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, FALSE );
         
        


    return S_OK;



}
VOID Render()
{
        g_pd3dDevice->Clear(0,  NULL, D3DCLEAR_TARGET,D3DCOLOR_XRGB( 0, 0, 255 ), 1.0f, 0 );
        if(SUCCEEDED(g_pd3dDevice->BeginScene()))
        {
                D3DXMATRIXA16 matWorld_X;

    D3DXMatrixIdentity(&matWorld_X);

        D3DXMatrixRotationX(&matWorld_X,timeGetTime()/500.0f);

        D3DXMATRIXA16 matWorld_Y;

         D3DXMatrixIdentity(&matWorld_Y);

        D3DXMatrixRotationY(&matWorld_Y,timeGetTime()/500.0f);

        D3DXMATRIXA16 matWorld_Z;

         D3DXMatrixIdentity(&matWorld_Z);

        D3DXMatrixRotationZ(&matWorld_Z,timeGetTime()/500.0f);

        g_pd3dDevice->SetTransform(D3DTS_WORLD,&(matWorld_X*matWorld_Y*matWorld_Z));



                 g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof( CUSTOMVERTEX ) );
        g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
        g_pd3dDevice->DrawIndexedPrimitive( D3DPT_TRIANGLESTRIP, 0,0,8,0, 12 );

        

                g_pd3dDevice->EndScene();
        }
        g_pd3dDevice->Present(NULL,NULL,NULL,NULL);
}
VOID Cleanup()
{
        if( g_pVB != NULL )
        g_pVB->Release();
        if( g_pIB != NULL )
        g_pIB->Release();

        if(g_pd3dDevice != NULL)
                g_pd3dDevice->Release();

        if (g_pD3D !=NULL)
                g_pD3D->Release();
}
LRESULT WINAPI MsgProc(HWND hWnd ,UINT msg,WPARAM wParam,LPARAM lParam)
{
        switch(msg)
        {
        case WM_DESTROY:
                        Cleanup();
                        PostQuitMessage(0);
                        return 0;
        
        }
        return DefWindowProc(hWnd,msg,wParam,lParam);
}
INT WINAPI WinMain(HINSTANCE hInst,HINSTANCE ,LPSTR,INT)
{
        WNDCLASSEX wc =
        {
                sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
                GetModuleHandle( NULL ), NULL, NULL, NULL, NULL,
                L"ClassNAME",NULL
        };
                RegisterClassEx( &wc );
                HWND hWnd = CreateWindow( L"ClassName",L"DirectX9游戏编程第三章WIN32框架",
                                              WS_OVERLAPPEDWINDOW,100,100,800,600,
                                                                  NULL , NULL , wc.hInstance, NULL);
                if (SUCCEEDED(InitializeD3D(hWnd)))
                {
                        if(SUCCEEDED(InitVB()))
                        {

                        ShowWindow(hWnd,SW_SHOWDEFAULT);
                        UpdateWindow(hWnd);
                        MSG msg;
                        ZeroMemory(&msg,sizeof(msg));
                        while(msg.message!=WM_QUIT)
                        {
                                if(PeekMessage(&msg,NULL,0U,0U,PM_REMOVE))
                                {
                                        TranslateMessage(&msg);
                                        DispatchMessage(&msg);
                                }
                else
               
                        Render();
               
                        }
                        }
                }
                UnregisterClass(L"ClassName",wc.hInstance);
                return 0;
}

3

主题

14

帖子

21

积分

注册会员

Rank: 2

积分
21
发表于 2010-7-20 20:32:00 | 显示全部楼层

Re:DIRECTX写一个旋转的立方体问题

Render()函数里边没有把索引缓冲设置到渲染管线,在Render()里边加一句
g_pd3dDevice->SetIndices(g_pIB);
就可以了出来了,不过不是立方体。应该是你的索引顺序有问题。再改改看

3

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
 楼主| 发表于 2010-7-21 11:12:00 | 显示全部楼层

Re: Re:DIRECTX写一个旋转的立方体问题

sniper527: ReIRECTX写一个旋转的立方体问题

Render()函数里边没有把索引缓冲设置到渲染管线,在Render()里边加一句
g_pd3dDevice->SetIndices(...

多谢大哥 就是这个问题 527是我的生日啊 呵呵

3

主题

14

帖子

21

积分

注册会员

Rank: 2

积分
21
发表于 2010-7-22 10:24:00 | 显示全部楼层

Re: Re: Re:DIRECTX写一个旋转的立方体问题

sh308178685: Re: ReIRECTX写一个旋转的立方体问题


多谢大哥 就是这个问题 527是我的生日啊 呵呵

我住的寝室号是9幢527室 简称9527 哈哈

2

主题

29

帖子

29

积分

注册会员

Rank: 2

积分
29
发表于 2011-4-11 16:16:00 | 显示全部楼层

Re:DIRECTX写一个旋转的立方体问题

我怎么改都不行呢  不知道顺序是怎样的
不过高人已经做到这个地步就很不错了啊
佩服
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-8 05:57

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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