⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hgraphic3d.h

📁 通过使机器人进行简单的图像识别
💻 H
字号:
/********************************************************************
*
* =-----------------------------------------------------------------=
* =                          ____          _________                =
* =                         / _  \         \___  __/                =
* =                        / /_/ /     ____   / /                   =
* =                       /  _   \ ● / _  \ / /                    =
* =                      /  /_/  // // / / // /                     =
* =                      \______//_//_/ /_//_/                      =
* =                                                                 =
* =             Copyright (c) BIN Technology studio,2004            =
* =                           LET'Z BT                              =
* =-----------------------------------------------------------------=
*
*	FileName	: hGraphic3D.h
*	Description	: 3D图像引擎接口,支持桌面为16Bit或32Bit
*
*	Author		: 风间苍月(TuQbasic)
*	Email		: tuqbasic@sohu.com
*
*	Create		: 2004.02.03
*	LastChange	: 2004.02.14
*
*	History		: 
********************************************************************/ 
#pragma once
#include <d3d8.h>
#include <d3dx8.h>
#pragma comment(lib,"d3d8.lib")
#pragma comment(lib,"d3dx8.lib")

#include "hGraphic2D.h"

// 3D对象文件映像类型
#define MODEL_XXX	0x1
#define MODEL_MDX	0x2
#define MODEL_3DS	0x3

// 子图形顶点
#define VERTEX_LEFT_TOP		0x0
#define VERTEX_RIGHT_TOP	0x1
#define VERTEX_RIGHT_BOTTOM	0x2
#define VERTEX_LEFT_BOTTOM	0x3

// ************************************************************************************
// *--------------------------Direct3DTexture8接口-------------------------------------
class IDXTexture : public IBasicImage
{
public:
	virtual ~IDXTexture(void) {}

	// 获得Direct3DTexture8
	virtual LPDIRECT3DTEXTURE8 GetDirectTexture8(void) = 0;

	// 衰减和增强Alpha通道(同时也可衰减颜色),只在拥有Alpha通道下使用
	virtual bool AttenuationAlpha(DWORD dwColor) = 0;
	virtual bool AdditiveAlpha(DWORD dwColor) = 0;
};
typedef IDXTexture *  LPI_DXTEXTURE;
typedef IDXTexture *  LPI_DXALPHATEX;

// ************************************************************************************
// *---------------------世界观察眼睛,类似第一人称视角的观察控制----------------------
class IEyeWorld
{
public:
	virtual ~IEyeWorld(void) {}

	// 观察者的位置,默认为(0,0,1)
	virtual void GetEyePosition(D3DVECTOR& vec) = 0;
	virtual void SetEyePosition(const D3DVECTOR& vec) = 0;
	// 眼睛观察的方向,默认为(0,0,0)
	virtual void GetEyeLookat(D3DVECTOR& vec) = 0;
	virtual void	SetEyeLookat(const D3DVECTOR& vec) = 0;
	// 观察者头顶的方向,默认为(0,1,0)
	virtual void GetUpVector(D3DVECTOR& vec) = 0;
	virtual void SetUpVector(const D3DVECTOR& vec) = 0;
	// 眼睛的能见范围
	virtual void GetEyeAbility(float *fNear, float *fFar) = 0;
	virtual void SetEyeAbility(float fNear, float fFar) = 0;

	// 应用当前的眼睛设置
	virtual HRESULT ActiveEye(void) = 0;
};
typedef IEyeWorld * LPI_EYEWORLD;

#define MAX_LIGHT	8
// ************************************************************************************
// *---------------------Direct灯光对象管理,管理8个灯光-------------------------------
class ILight
{
public:
	virtual ~ILight(void) {}

	// 设置环境光
	virtual HRESULT SetAmbientLight(D3DCOLOR d3dclr) = 0;

	// 设置灯光是否有效
	virtual HRESULT SetAmbientEnable(bool bEnable) = 0;

	// 初始化一个点光源
	virtual HRESULT SetPointLight(D3DVECTOR Position/*光源在空间中的位置*/, 
							float Range/*光照的的最大距离,在这个距离以外将不起作用*/,
							DWORD Diffuse/*光的漫反射颜色*/,
							DWORD Specular= 0/*镜面反射颜色*/,
							DWORD Ambient= 0/*总体颜色(相当于环境光)*/,
							unsigned long uIndex= 0/*0...7*/) = 0;

	// 初始化一个聚光灯
	virtual HRESULT SetSpotLight(D3DVECTOR Position/*光源在空间中的位置*/,
							D3DVECTOR Direction/*光照的方向*/,
							float Range/*光照的的最大距离,在这个距离以外将不起作用*/,
							DWORD Diffuse/*光的漫反射颜色*/,
							DWORD Specular= 0/*镜面反射颜色*/,
							DWORD Ambient= 0/*总体颜色(相当于环境光)*/,
							float Theta= D3DX_PI / 4/*聚光灯的内圈大小(单位:弧度)*/,
							float Phi= D3DX_PI / 2/*聚光灯的外圈大小(单位:弧度)*/,
							unsigned long uIndex= 0) = 0;

	// 初始化一个平行光
	virtual HRESULT SetDirectionalLight(D3DVECTOR Direction/*光照的方向*/,
										float Range/*光照的的最大距离,在这个距离以外将不起作用*/,
										DWORD Diffuse/*光的漫反射颜色*/,
										DWORD Specular= 0/*镜面反射颜色*/,
										DWORD Ambient= 0/*总体颜色(相当于环境光)*/,
										unsigned long uIndex= 0) = 0;

	// 设置一个自定义灯光
	virtual HRESULT SetUserLight(D3DLIGHT8 d3dLight, unsigned long uIndex= 0) = 0;

	// 选择一个灯光到设备上
	virtual HRESULT SelectLight(unsigned long uIndex= 0) = 0;

	// 设置灯光是否有效
	virtual HRESULT EnableLight(bool bEnable, unsigned long uIndex= 0) = 0;
};
typedef ILight * LPI_LIGHT;


class IDisplay3D;
typedef IDisplay3D * LPI_DISPLAY3D;

// ************************************************************************************
// *---------------------------在2D空间绘制的子图形------------------------------------
class IDXSprite : public ITUnknown
{
public:
	virtual ~IDXSprite(void) {}

	// 绘制子图形,bAlpha将使用alpha通道
	virtual HRESULT DrawSprite(LPI_DISPLAY3D pDisplay, bool bAlpha= false) = 0;

	// 设置子图形的深度
	virtual bool SetSpriteDepth(float fDepth) = 0;

	// 设置顶点的位置,vIndex指示哪个顶点,默认为(0, 0)-(width, height)
	virtual bool SetVertexPosition(POINT& pt, long vIndex) = 0;

	// 获取一个顶点的信息
	virtual bool GetVertexPostion(POINT& pt, long vIndex) = 0;

	// 平移整个子图形
	virtual bool MoveVertex(POINT& pt) = 0;

	// 设置顶点的位置成矩形
	virtual bool SetVertexPosition(RECT *rect) = 0;

	// 设置定点颜色,默认为白色
	virtual bool SetVertexColor(DWORD dwColor, long vIndex) = 0;

	// 设置子图形使用纹理的区域,rect 不为空
	virtual bool SetTextureRect(RECT *rect) = 0;

	// 激活子图形的设置
	virtual bool ActiveSprite(void) = 0;

	// 设置子图形应用的纹理,引用计数加1
	virtual bool SetTexture(LPI_DXTEXTURE pTexture) = 0;

	// 获取子图形使用的纹理
	virtual LPI_DXTEXTURE GetTexture(void) = 0;
};
typedef IDXSprite * LPI_DXSPRITE;

// ************************************************************************************
// *---------------------------------3D子图形------------------------------------------
class IDXSprite3D : public ITUnknown
{
public:
	virtual ~IDXSprite3D(void) {}

	// 绘制子图形,bAlpha将使用alpha通道
	virtual HRESULT DrawSprite(LPI_DISPLAY3D pDisplay, bool bAlpha= false) = 0;

	// 设置顶点的位置,vIndex指示哪个顶点,默认为(0, 0, 0)-(-1, 1, 0)
	virtual bool SetVertexPosition(D3DVECTOR& vec, long vIndex) = 0;

	// 获取一个顶点的信息
	virtual bool GetVertexPostion(D3DVECTOR& vec, long vIndex) = 0;

	// 平移整个子图形
	virtual bool MoveVertex(D3DVECTOR& vec) = 0;

	// 设置定点颜色,默认为白色
	virtual bool SetVertexColor(DWORD dwColor, long vIndex) = 0;

	// 设置子图形使用纹理的区域,rect 不为空
	virtual bool SetTextureRect(RECT *rect) = 0;

	// 激活子图形的设置
	virtual bool ActiveSprite(void) = 0;

	// 设置子图形应用的纹理,引用计数加1
	virtual bool SetTexture(LPI_DXTEXTURE pTexture) = 0;

	// 获取子图形使用的纹理
	virtual LPI_DXTEXTURE GetTexture(void) = 0;
};
typedef IDXSprite3D * LPI_DXSPRITE3D;

// ************************************************************************************
// *-----------------------------------3D网格模型--------------------------------------
class IXModel : public ITUnknown
{
public:
	virtual ~IXModel(void) {}

	// 模型的位置
	virtual void GetModelPosition(float *x, float *y, float *z) = 0;
	virtual void SetModelPosition(float x, float y, float z) = 0;

	// 模型自身的旋转,设置时将返回上一个设置值
	virtual float	SetRationX(float Angle) = 0;
	virtual float	GetRationX(void) = 0;
	virtual float	SetRationY(float Angle) = 0;
	virtual float	GetRationY(void) = 0;
	virtual float	SetRationZ(float Angle) = 0;
	virtual float	GetRationZ(void) = 0;
	virtual void	SetRation(float xAngle, float yAngle, float zAngle) = 0;

	// 模型的缩放
	virtual float	SetScaleX(float Scale) = 0;
	virtual float	GetScaleX(void) = 0;
	virtual float	SetScaleY(float Scale) = 0;
	virtual float	GetScaleY(void) = 0;
	virtual float	SetScaleZ(float Scale) = 0;
	virtual float	GetScaleZ(void) = 0;
	virtual void	SetScale(float xScale, float yScale, float zScale) = 0;

	// 应用当前的模型控制设置
	virtual HRESULT	ActiveModel(void) = 0;

	// 在设备中渲染物体
	virtual HRESULT RenderModel(LPI_DISPLAY3D pDisplay) = 0;

	// 获取总共需要的纹理数目
	virtual long	GetTextureNumber(void) = 0;
	// 获取纹理的文件名
	virtual const char * GetTextureName(long index) = 0;
 	// 设置纹理
	virtual bool	SetTexture(LPI_DXTEXTURE pTexture, long index) = 0;
	// 返回纹理
	virtual LPI_DXTEXTURE	GetTexture(long index) = 0;
};
typedef IXModel * LPI_XMODEL;


// ************************************************************************************
// *----------------------------------3D对象创建接口----------------------------------
class IHardWare3D : public IDisplay2D
{
public:
	virtual ~IHardWare3D(void) {}

	virtual LPI_BASICIMAGE Get3DBackBuffer(void) = 0;
	virtual LPDIRECT3DDEVICE8 GetDirect3DDevice8(void) = 0;

	// 创建用于输出到后台缓冲的文字
	virtual LPD3DXFONT	CreateD3DXFont(LOGFONT& font) = 0;

	// 创建与当前显示位数一致的纹理,不含Alpha通道
	virtual LPI_DXTEXTURE CreateTexture(int nWidth, int nHeight, long lType= TYPE_MEMORY) = 0;
	virtual LPI_DXTEXTURE CreateTextureFromIMG(const char *szFileName, long Image= IMAGE_BMP, long lType= TYPE_MEMORY, LPI_PACKAGE pPackFile= NULL) = 0;
	
	// 创建与当前显示位数一致的纹理,不含Alpha通道,如果图像格式不含Alpha通道,则Alpha为最大
	virtual LPI_DXALPHATEX CreateAlphaTexture(int nWidth, int nHeight, long lType= TYPE_MEMORY) = 0;
	virtual LPI_DXALPHATEX CreateAlphaTextureFromIMG(const char *szFileName, long Image= IMAGE_BMP, long lType= TYPE_MEMORY, LPI_PACKAGE pPackFile= NULL) = 0;

	// 创建一个子图形
	virtual LPI_DXSPRITE CreateSprite(LPI_DXTEXTURE pTexture) = 0;
	virtual LPI_DXSPRITE CreateSpriteFromIMG(const char *szFileName, long Image= IMAGE_BMP, long lType= TYPE_MEMORY, LPI_PACKAGE pPackFile= NULL) = 0;
	virtual LPI_DXSPRITE CreateAlphaSpriteFromIMG(const char *szFileName, long Image= IMAGE_BMP, long lType= TYPE_MEMORY, LPI_PACKAGE pPackFile= NULL) = 0;

	// 创建3D子图形
	virtual LPI_DXSPRITE3D Create3DSprite(LPI_DXTEXTURE pTexture) = 0;
	virtual LPI_DXSPRITE3D Create3DSpriteFromIMG(const char *szFileName, long Image= IMAGE_BMP, long lType= TYPE_MEMORY, LPI_PACKAGE pPackFile= NULL) = 0;
	virtual LPI_DXSPRITE3D Create3DAlphaSpriteFromIMG(const char *szFileName, long Image= IMAGE_BMP, long lType= TYPE_MEMORY, LPI_PACKAGE pPackFile= NULL) = 0;

	// 从文件映像创建一个模型
	virtual LPI_XMODEL	CreateModelFromIMG(const char *szFileName, long Model= MODEL_XXX, LPI_PACKAGE pPackFile= NULL) = 0;
};

// ************************************************************************************
// *----------------------------------3D显示接口---------------------------------------
class IDisplay3D : public IHardWare3D
{
public:
	virtual ~IDisplay3D(void) {}

	// 清除场景中的内容
	virtual HRESULT ClearDevice(DWORD clr= 0L) = 0;

	// 开始绘制场景
	virtual HRESULT BeginScene(void) = 0;

	// 结束场景绘制
	virtual HRESULT EndScene(void) = 0;

	// 将绘制的场景绘制到前台画面
	virtual HRESULT Present3D(void) = 0;

	// 获取视点接口
	virtual LPI_EYEWORLD GetEye(void) = 0;

	// 获取灯光管理接口
	virtual LPI_LIGHT GetLight(void) = 0;

	// 绘制文本
	virtual HRESULT DrawFont(int x, int y, DWORD dwColor, const char *szText) = 0;

	// 设置设备状态
	virtual HRESULT SetRenderState(D3DRENDERSTATETYPE State, DWORD Value) = 0;
};
//----------------------------------------------------------------------------------------------------
SAM_API HRESULT CreateDisplay3D(HWND hWnd, int nScreenWidth, int nScreenHeight, LPI_DISPLAY3D* ppDisplay3D, bool bWindowed= true, int iDepth= 16);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -