← index
Old.Learning.Projects/WireFrame/wireframe/wireframe.cpp
Source: Old.Learning.Projects/WireFrame/wireframe/wireframe.cpp
#include"mx3d.h"

#include "mxmath.h"


struct customVertex {
	float x,y,z;
	DWORD color;
};


inline void not(UINT *x) {
	if(*x == MF_CHECKED)
		*x = MF_UNCHECKED;
	else if(*x == MF_UNCHECKED)
		*x = MF_CHECKED;
}

UINT tea_item = MF_UNCHECKED,box_item = MF_CHECKED;

class WireFrame : public mxApp {

	
public:

	WireFrame() {
		pmesh = ppmesh = 0;
	}
	virtual void init() {
		if(Init("WireFrame",false,0,0,640,480,WndProc,LoadIcon(NULL,IDI_APPLICATION)) == true && InitDX(false,24) == true) {
			this->screen.pd3d_dev->SetRenderState( D3DRS_LIGHTING, FALSE );
			screen.pd3d_dev->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);
			initVB();
			InitLoop();
		}
		else
			ErrorMsg("Error Initalizing Direct3D!\n");

	}

	virtual ~WireFrame() {
		if(pmesh) pmesh->Release();
		if(ppmesh) ppmesh->Release();
	}
	
	HRESULT initVB() {

		D3DXCreateBox(screen.pd3d_dev,.5f,.5f,.5f,&pmesh,0);
		D3DXCreateTeapot(screen.pd3d_dev,&ppmesh,0);

		return S_OK;
	}


	ID3DXMesh *pmesh,*ppmesh;
	void setupMatrices() {
	D3DXMATRIXA16 mat,mat2,mat3,mat4,matrt,matval;
     UINT  iTime  = timeGetTime() % 1000;
    FLOAT fAngle = iTime * (2.0f * D3DX_PI) / 1000.0f;
	
  	D3DXMatrixRotationX( &mat, fAngle );
	D3DXMatrixRotationY( &mat3, fAngle);
	D3DXMatrixTranslation(&mat2,1.0f,1.0f,-1.0f);
	matval = mat * mat2 * mat3;
	this->screen.pd3d_dev->SetTransform( D3DTS_WORLD,&matval);
    D3DXVECTOR3 vEyePt( 3.0f, 3.0f, 3.0f);
    D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f );
    D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f );
    D3DXMATRIXA16 matView;
    D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec );
    this->screen.pd3d_dev->SetTransform( D3DTS_VIEW, &matView );
    D3DXMATRIXA16 matProj;
    D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f );
    this->screen.pd3d_dev->SetTransform( D3DTS_PROJECTION, &matProj );
	
	}

	virtual void render(int screen) {
		this->screen.pd3d_dev->BeginScene();
		setupMatrices();
		if(tea_item == MF_CHECKED)
			ppmesh->DrawSubset(0);
		else
			pmesh->DrawSubset(0);
		//ppmesh->DrawSubset(0);

        this->screen.pd3d_dev->EndScene();
	}

	static LRESULT APIENTRY WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) {
		switch(msg) {
			case WM_DESTROY:
				PostQuitMessage(0);
				break;
			case WM_ACTIVATEAPP:
				wire.active = wParam;
				break;
			case WM_KEYDOWN:
				break;
			case WM_COMMAND: {
				static HMENU menu = GetMenu(hwnd);
				switch(wParam)
				{
				case ID_FILE_EXIT:
					SendMessage(hwnd,WM_CLOSE,0,0);
					break;
				case ID_DRAW_TEAPOT:
					not(&tea_item);
					CheckMenuItem(menu,ID_DRAW_TEAPOT,tea_item);
					break;
				case ID_HELP_ABOUT:
					MessageBox(hwnd,"Written by Jared Bruni.\n",":)",MB_OK | MB_ICONINFORMATION);
					break;
				}
				}
			    break;
			default:
				return DefWindowProc(hwnd,msg,wParam,lParam);
		}

		return 0;
	}

	static WireFrame wire;
private:
	LPDIRECT3DVERTEXBUFFER9 _vb;

};

WireFrame WireFrame::wire;

int PASCAL WinMain(HINSTANCE hInst,HINSTANCE hPrev, LPSTR lpszLine, int nCmdShow) {
	WireFrame wire;
	wire.init();
	return 0;
}