注意点
-
需要安装dx9.0和vs2019设置,可以参考这个
-
顶点缓存6个面中后面和下面是以左下角坐标逆时针写的,其他面都是顺时针的,这样导致画每个面的三角形按照顶点的渲染方式不一样,为什么后面和下面这样去渲染呢?如果6个面按照同样的方式就会有显示错误。
代码
structVertex{
Vertex(){
}Vertex(float x,float y,float z,float nx,float ny,float nz,float u,float v){
_x = x; _y = y; _z = z;
_nx = nx; _ny = ny; _nz = nz;
_u = u; _v = v;}float _x, _y, _z;float _nx, _ny, _nz;float _u, _v;};#defineFVF_VERTEX(D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1)
#include<d3dx9.h>classCube{
public:Cube(IDirect3DDevice9* device);~Cube();booldraw(D3DXMATRIX* world, D3DMATERIAL9* mtrl, IDirect3DTexture9* tex);private:
IDirect3DDevice9* _device;
IDirect3DVertexBuffer9* _vb;
IDirect3DIndexBuffer9* _ib;};
#include"Cube.h"#include"d3dUtility.h"#include"Vertex.h"Cube::Cube(IDirect3DDevice9* device){
_device = device;
device->CreateVertexBuffer(24*sizeof(Vertex), D3DUSAGE_WRITEONLY, FVF_VERTEX, D3DPOOL_MANAGED,&_vb,nullptr);
Vertex* v;
_vb->Lock(0,0,(void**)&v,0);
v[0]=Vertex(-1.0f,-1.0f,-1.0f,0.0f,0.0f,-1.0f,0.0f,0.0f);
v[1]=Vertex(-1.0f,1.0f,-1.0f,0.0f,0.0f,-1.0f,0.0f,1.0f);
v[2]=Vertex(1.0f,1.0f,-1.0f,0.0f,0.0f,-1.0f,1.0f,1.0f);
v[3]=Vertex(1.0f,-1.0f,-1.0f,0.0f,0.0f,-1.0f,1.0f,0.0f);
v[4]=Vertex(-1.0f,-1.0f,1.0f,0.0f,0.0f,1.0f,0.0f,0.0f);
v[5]=Vertex(1.0f,-1.0f,1.0f,0.0f,0.0f,1.0f,0.0f,1.0f);
v[6]=Vertex(1.0f,1.0f,1.0f,0.0f,0.0f,1.0f,1.0f,1.0f);
v[7]=Vertex(-1.0f,1.0f,1.0f,0.0f,0.0f,1.0f,1.0f,0.0f);
v[8]=Vertex(-1.0f,-1.0f,1.0f,-1.0f,0.0f,0.0f,0.0f,0.0f);
v[9]=Vertex(-1.0f,1.0f,1.0f,-1.0f,0.0f,0.0f,0.0f,1.0f);
v[10]=Vertex(-1.0f,1.0f,-1.0f,-1.0f,0.0f,0.0f,1.0f,1.0f);
v[11]=Vertex(-1.0f,-1.0f,-1.0f,-1.0f,0.0f,0.0f,1.0f,0.0f);
v[12]=Vertex(1.0f,-1.0f,-1.0f,1.0f,0.0f,0.0f,0.0f,0.0f);
v[13]=Vertex(1.0f,1.0f,-1.0f,1.0f,
发布评论