Node3D:里面记录了对象的空间信息,矩阵信息,颜色信息之类的。
直接贴代码吧
Node3D.h
#pragma once
#include "GLmath.h"
#include "Shape.h"
//#define MESH_RESOLUTION 4.0f // 每个顶点使用的像素
//#define MESH_HEIGHTSCALE 1.0f // 高度的缩放比例//#define NO_VBOS // 如果定义将不使用VBO扩展
定义VBO扩展它们在glext.h头文件中被定义
//
//#define GL_ARRAY_BUFFER_ARB 0x8892
//#define GL_STATIC_DRAW_ARB 0x88E4
//typedef void (APIENTRY * PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer);
//typedef void (APIENTRY * PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers);
//typedef void (APIENTRY * PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers);
//typedef void (APIENTRY * PFNGLBUFFERDATAARBPROC) (GLenum target, int size, const GLvoid *data, GLenum usage);
VBO 扩展函数的指针
//PFNGLGENBUFFERSARBPROC glGenBuffersARB = NULL; // 创建缓存名称
//PFNGLBINDBUFFERARBPROC glBindBufferARB = NULL; // 绑定缓存
//PFNGLBUFFERDATAARBPROC glBufferDataARB = NULL; // 绑定缓存数据
//PFNGLDELETEBUFFERSARBPROC glDeleteBuffersARB = NULL; // 删除缓存
//
namespace U3D
{
class CNode
{
friend class CScene;
protected:
CNode *parent; //父节点
Matrix3D local_matrix; //自身矩阵
Matrix3D world_matrix; //世界矩阵
sColor local_color; //自身颜色
sColor world_color; //世界颜色
Vector3D pos; //坐标偏移
Vector3D scale; //缩放
Vector3D anchor; //锚点
Vector3D angle;
bool visible; //是否可见
bool flip; //是否翻转
bool isUseRotMatrix = false;
char DirectoryPath[256];
GLuint m_nVBOVertices; // 顶点缓存对象的名称
GLuint m_nVBOTexCoords;// 顶点纹理缓存对象的名称
int nVertexCount; //顶点数
Vector3D* pVertices; //定点数据的指针;
Vector2*pTexCoords; //大图点纹理坐标;
Matrix3D rotate_matrix;
public:
//set///
void BuildVBOs(Vector3D *pVertices, Vector2 *pTexCoord);//创建拓展VBO
void setParent(CNode *parent) { this->parent = parent; }
void setVisible(bool visible) { this->visible = visible; }
void setAlpha(float alpha) { local_color.a =alpha; }
void setPosition(float x, float y, float z) {pos.x = x;pos.y = y; pos.z = z;}
void setPosition(Vector3D p) {pos = p; }
void setX(float x) { pos.x = x; }
void setY(float y) { pos.y = y; }
void setZ(float z) { pos.z = z; }
void setScale(float sx, float sy, float sz) {scale.x = sx;scale.y = sy; scale.z= sz; }
void setFilp(bool flip) { this->flip = flip; }
void setColor(float r, float g, float b) { local_color.r =r; local_color.g =g; local_color.b =b; }
void setAnchor(float ox, float oy, float oz) { anchor.x = ox; anchor.y = oy; anchor.z = oz; }
void setAngle(Vector3D angle) { this->angle = angle; }
void setAngleX(float angle) { this->angle.x = angle; }
void setAngleY(float angle) { this->angle.y = angle; }
void setAngleZ(float angle) { this->angle.z = angle; }
void setRotateMatrix(Matrix3D mat) { this->rotate_matrix =mat;isUseRotMatrix = true; }
void UseRotateMatrix() { isUseRotMatrix = true;}
void setLocalMatrix(Matrix3D m) { local_matrix = m;}
void setWorldMatrix(Matrix3D m) { world_matrix = m;}
//get///
CNode*getPraent() { return parent; }
sColor &getWorldColor() { return world_color; }
sColor &getlocalColor() { return local_color; }
Matrix3D &getWorldMatrix() { return world_matrix; }
Matrix3D &getlocalMatrix() { return local_matrix; }
float getAlpha() { return local_color.a; }
Vector3D getPosition() { return pos; }
float getX() { return pos.x; } //返回X偏移值
float getY() { return pos.y; } //返回Y偏移值
float getZ() { return pos.z; } //返回Z偏移值
float getScaleX() { return scale.x; }//水平翻转比值
float getScaleY() { return scale.y; }//垂直翻转比值
float getScaleZ() { return scale.z; }
Vector3D getAngle() { return angle; }
bool getIsUseRotateMatrix() { return isUseRotMatrix; }
//bool//
bool isVisible() { return visible; }//是否可见
bool isFlip() { return flip; }
CNode();
virtual ~CNode() {};
};
class CElement :public CNode
{
private:
char elementName[256];
public:
virtual void draw(float deltaTime) {};
virtual void drawDebug() {};
virtual GLAABB3D getBoundBox() { return GLAABB3D(Vector3D(-9999, -9999, -9999), Vector3D(9999, 9999, 9999)); }
char *getElementName() { return elementName; }
void setElementName(const char *name) { strcpy(elementName, name); }
virtual ~CElement() {};
};
class CNode;
class CUI;
class Cobject;
class CAnimate;
class CAnimateEx;
class CAnimation;
enum MovementEvent;
typedef void (CNode::*event_selector)(CUI*);
typedef void (CNode::*animate_selector)(CAnimate*, MovementEvent);
typedef void (CNode::*animation_selector)(CAnimation*, MovementEvent, char *);
typedef void (CNode::*collider_selector)(Cobject*);
}