由于VP5不能实现“能量值”跟随效果,只能采用OpenGL来绘制,同时可以限制非中文字符。
#include <vsgu.h>
#include <vp.h>
#include <vpApp.h>
#include <vsChannel.h>
#pragma comment( lib, "opengl32.lib" )
#pragma comment( lib, "glu32.lib" )
#include <GL/gl.h>
#include <GL/glu.h>
#include ".\WxpVP.h"
#pragma once
class WxpOpenglDraw:public vsChannel::Subscriber
{
public:
vsFieldFrameData< vuMatrix< double > > m_objectPosition;
string str;
WxpOpenglDraw(void);
~WxpOpenglDraw(void);
void notify(vsChannel::Event event, const vsChannel *channel, vrDrawContext *context)
{
//压栈操作
vrElement::const_iterator_context it, ite = vrElement::end_context();
for (it=vrElement::begin_context();it!=ite;++it)
{
if (*it == vrTransform::ElementProjection::Id)
context->pushElement(*it, false);
else context->pushElement(*it, true);
}
//获取视点矩阵
vuMatrix<double> modelViewMat = channel->getViewMatrixInverse();
modelViewMat *= channel->getOffsetMatrix();
//读取数据
bool bMod;
const vuMatrix<double>* mat = m_objectPosition.getReadBuffer(&bMod,
vsThread::resolveFrameNumber());
if (mat == NULL) { return; }
//视角矩阵转换
modelViewMat.preMultiply(*mat);
vrTransform::ElementModelView modelViewElement;
vuMatrixTruncate(&modelViewElement.m_matrix, modelViewMat);
context->setElement(vrTransform::ElementModelView::Id,&modelViewElement);
//绘制单个能量值
glLineWidth(10.0f);
glColor3f(1.0f, 0.0f, 0.0f);
glEnable(GL_LINE_SMOOTH);
glBegin(GL_LINES);
glVertex3f( WxpVP::CurentObjPos.x,
WxpVP::CurentObjPos.y,
WxpVP::CurentObjPos.z+0.1);
glVertex3f( WxpVP::CurentObjPos.x,
WxpVP::CurentObjPos.y,
WxpVP::CurentObjPos.z+0.2);
glEnd();
glDisable(GL_LINE_SMOOTH);
glFlush();
//绘制文字
glColor3f(1.0f, 1.0f, 1.0f);
glEnable(GL_LINE_SMOOTH);
wglUseFontBitmaps(wglGetCurrentDC(),0,256,1000);
glListBase(1000);
glRasterPos3f(WxpVP::CurentObjPos.x,
WxpVP::CurentObjPos.y,
WxpVP::CurentObjPos.z+0.2);
str=WxpVP::pObjectPicked->getName();
glCallLists(str.length(),GL_UNSIGNED_BYTE,WxpVP::pObjectPicked->getName());
//出栈操作
context->popElements(false);
}
//
virtual void notify(vsChannel::Event, const vsChannel *,vsTraversalCull *)
{
}
};
应该注意使用类成员。