// D3DWnd.cpp : 實作檔案
//
#include "stdafx.h"
#include "d3ddemo.h"
#include "D3DWnd.h"
#include "d3d9types.h"
//#include "d3d9.h"
// CD3DWnd
HWND m_hWnd;
int m_nRotateY;
struct CUSTOMVERTEX
{
float x,y,z;
DWORD color;
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE)
IMPLEMENT_DYNAMIC(CD3DWnd, CWnd)
CD3DWnd::CD3DWnd()
{
m_nRotateY =0;
}
CD3DWnd::~CD3DWnd()
{
Cleanup();
}
BEGIN_MESSAGE_MAP(CD3DWnd, CWnd)
END_MESSAGE_MAP()
LPDIRECT3D9 g_pD3D=NULL;//d3d物件
LPDIRECT3DDEVICE9 g_pd3dDevice=NULL;//d3d設備物件
LPDIRECT3DVERTEXBUFFER9 g_pVB=NULL;//頂點緩沖
LPDIRECT3DDEVICE9 pDevice =NULL;
void* pVertices;
void CD3DWnd::InitD3D()
{
m_pD3D=::Direct3DCreate9(D3D_SDK_VERSION);
m_pDevice=NULL;
HWND hDeviceWindow = m_hWnd;
D3DPRESENT_PARAMETERS d3dpp;
::ZeroMemory(&d3dpp,sizeof(d3dpp));
d3dpp.Windowed=TRUE;
d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat=D3DFMT_UNKNOWN;
//d3dpp.EnableAutoDepthStencil=TRUE;
//d3dpp.AutoDepthStencilFormat=D3DFMT_D16;
m_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,m_hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&m_pDevice);
m_pDevice->SetRenderState(D3DRS_LIGHTING,FALSE);
m_pDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
m_pDevice->SetRenderState(D3DRS_ZENABLE,D3DZB_FALSE);
}
void CD3DWnd::Cleanup()
{
m_pDevice->Release();
m_pD3D->Release();
m_pDevice=NULL;
}
// CD3DWnd 訊息處理程式
void CD3DWnd::SetupMatrices()
{
float angle =m_nRotateY* D3DX_PI /180;
D3DXMATRIX matWorld;
::D3DXMatrixRotationX(&matWorld,angle);
m_pDevice->SetTransform(D3DTS_WORLD,&matWorld);
D3DXVECTOR3 eye(0.0f,3.0f,-5.0f);
D3DXVECTOR3 lookat(0.0f,0.0f,0.0f);
D3DXVECTOR3 up(0.0f,1.0f,0.0f);
D3DXMATRIX matView;
::D3DXMatrixLookAtLH(&matView,&eye,&lookat,&up);
m_pDevice->SetTransform(D3DTS_VIEW,&matView);
D3DXMATRIXA16 matProj;
::D3DXMatrixPerspectiveFovLH(&matProj,D3DX_PI/4,1.0f,1.0f,100.0f);
m_pDevice->SetTransform(D3DTS_PROJECTION,&matProj);
}
void CD3DWnd::Render()
{
m_pDevice->Clear(
0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_ARGB(0,0,0,0),
1.0f,0);
m_pDevice->BeginScene();
SetupMatrices();
IDirect3DVertexBuffer9* pStreamData=https://bbs.csdn.net/topics/NULL;
UINT i0ffsetInBytes,iStride;
m_pDevice->GetStreamSource(0,&pStreamData,&i0ffsetInBytes,&iStride);
TRACE("%d \r\n",iStride);
m_pDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
m_pDevice->SetStreamSource(0,m_pVB,0,sizeof(CUSTOMVERTEX));
m_pDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,1);
m_pDevice->SetIndices(m_pIB);
m_pDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,4,0,4);
m_pDevice->EndScene();
m_pDevice->Present(NULL,NULL,NULL,NULL);
}
void CD3DWnd::InitGeometry()
{
CUSTOMVERTEX vertices[]=
{{0.0f,1.0f,0.0f,D3DCOLOR_XRGB(0,255,0)},
{-1.0F,-1.0F,-0.577f,D3DCOLOR_XRGB(255,0,0)},
{1.0f,-1.0f,-0.577f,D3DCOLOR_XRGB(0,255,255)},
{0.0f,-1.0f,1.155f,D3DCOLOR_XRGB(255,0,255)}};
/*indices = new int[];*/
WORD indices[]={0,2,1,0,3,2,0,1,3,1,2,3};
m_pDevice ->CreateVertexBuffer(sizeof(vertices),0,D3DFVF_CUSTOMVERTEX,D3DPOOL_DEFAULT,&m_pVB,NULL);
void* pVertices;
m_pIB->Lock(0,sizeof(vertices),(void**)&pVertices,0);
memcpy(pVertices,vertices,sizeof(vertices));
m_pVB->Unlock();
m_pDevice->CreateIndexBuffer(sizeof(indices),0,D3DFMT_INDEX16,D3DPOOL_DEFAULT,&m_pIB,NULL);
void *pIndices;
m_pIB->Lock(0,sizeof(indices),(void**)&pIndices,0);
memcpy(pIndices,indices,sizeof(indices));
m_pIB->Unlock();
- 出現錯誤提示的地方 hDeviceWindow 0x00000000 {unused=??? } HWND__ *
uj5u.com熱心網友回復:
中斷,斷在這個位置m_pDevice->SetRenderState(D3DRS_LIGHTING,FALSE);
m_pDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
m_pDevice->SetRenderState(D3DRS_ZENABLE,D3DZB_FALSE);
uj5u.com熱心網友回復:
代碼過編譯了,但是一除錯就出現這個問題轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/95816.html
標籤:基礎類
