#include <vsgu.h>
#include <vp.h>
#include <vpApp.h>
#include <vsChannel.h>
#include <GL/glaux.h>
#include <GL/gl.h>
//引入OpenGL库
#pragma comment(lib,"opengl32.lib")
#pragma comment(lib,"glu32.lib")
#include <GL/gl.h>
#include <GL/glu.h>
#pragma once
class Mysubscriber : public vsChannel::Subscriber
{
public:
vsFieldFrameData< vuMatrix<double> > m_objectPosition;
Mysubscriber(void)
{
vuMatrix<double> objectPositionMatrix;
m_objectPosition.init(&objectPositionMatrix);
}
~Mysubscriber(void)
{
}
virtual 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);
//绘制线段
vuVec3<float> origin(0.0f, 0.0f, 0.0f);
vuVec3<float> axisX(20.0f, 0.0f, 0.0f);
glColor3f(1.0f, 0.0f, 0.0f);
glBegin(GL_LINES);
glVertex3f(origin[0], origin[1], origin[2]);
glVertex3f(axisX[0], axisX[1], axisX[2]);
glEnd();
vuVec3<float> axisY(0.0f, 20.0f, 0.0f);
glColor3f(0.0f, 1.0f, 0.0f);
glBegin(GL_LINES);
glVertex3f(origin[0], origin[1], origin[2]);
glVertex3f(axisY[0], axisY[1], axisY[2]);
glEnd();
vuVec3<float> axisZ(0.0f, 0.0f, 20.0f);
glColor3f(0.0f, 0.0f, 1.0f);
glBegin(GL_LINES);
glVertex3f(origin[0], origin[1], origin[2]);
glVertex3f(axisZ[0], axisZ[1], axisZ[2]);
glEnd();
glFlush();
//出栈操作
context->popElements(false);
}
virtual void notify(vsChannel::Event,const vsChannel *,vsTraversalCull *)
{
}
};
|