我要发帖 回复

高级会员

18

主题

4898

积分

0

专家分

:

私信
发表时间 : 2012-12-13 15:53:06 | 浏览 : 1749    评论 : 11
我根据《Vega Prime实时三维虚拟现实开发技术》一书中6.2节进行VP和OpenGL混合编程时遇到问题,请做过类似开发的高手们帮忙看看,我跟踪调试时发现程序进入到虚函数压栈操作时出现错误,见程序截图:
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);
      }
}
vp-opengl.JPG
vp-opengl error.JPG

最近VR访客

sichuanwww 评论于2012-12-14 09:53:40
仔细看看你的订阅类
努力挣钱,快乐生活!
tjliang_007 评论于2012-12-14 10:21:12
感谢您的解答。订阅类就是在Mysubscriber.h头文件里啊,我反复和书中比较了,这种问题是出在订阅类的什么地方呢?能否再明示一下?
tjliang_007 评论于2012-12-14 11:03:50
#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 *)
        {

        }
       
};
tjliang_007 评论于2012-12-14 11:04:26
这是订阅类,请楼上帮忙看看,谢谢!
ONE 评论于2012-12-14 12:11:17
最近也在看这些
menatplay 评论于2012-12-14 13:54:41
我感觉这本书写的太简单了  按照书上操作时经常遇到问题还不知道怎么办  我最近也在学习这本书呢
zy0622专家组 评论于2012-12-14 15:00:18
学习学习。
tjliang_007 评论于2012-12-17 11:35:04
谁能给指点一下啊,先谢谢了!
来自河北1 评论于2013-11-1 21:55:37
tjliang_007 发表于 2012-12-17 11:35 AM
谁能给指点一下啊,先谢谢了!

这个要配置一下工程的属性的
xiao_rong 评论于2013-12-20 12:54:58
楼上正解,vp2.2需要添加预处理器设置:
_HAS_ITERATOR_DEBUGGING=0
_SECURE_SCL=0
jia2563422 评论于2014-1-31 08:42:52
头都大了哦

手机版|VR开发网 ( 津ICP备18009691号 )|网站地图 统计 网安备12019202000257

GMT+8, 2019-2-24 02:56 AM

返回顶部