admin 管理员组

文章数量: 1184232

注意点

  • 需要安装dx9.0和vs2019设置,可以参考这个
  • 顶点缓存6个面中后面和下面是以左下角坐标逆时针写的,其他面都是顺时针的,这样导致画每个面的三角形按照顶点的渲染方式不一样,为什么后面和下面这样去渲染呢?如果6个面按照同样的方式就会有显示错误。

代码

  • Vertex.h
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)
  • Cube.h
#include<d3dx9.h>classCube{
   
   public:Cube(IDirect3DDevice9* device);~Cube();booldraw(D3DXMATRIX* world, D3DMATERIAL9* mtrl, IDirect3DTexture9* tex);private:
	IDirect3DDevice9* _device;
	IDirect3DVertexBuffer9* _vb;
	IDirect3DIndexBuffer9* _ib;};
  • Cube.cpp
#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,

本文标签: 中心里的 编程 系统