我要发帖 回复

正式会员

5

主题

29

积分

0

专家分

:

私信
发表时间 : 2009-7-23 09:48:24 | 浏览 : 1418    评论 : 6
#include <vsgu.h>
#include <vp.h>
#include <vpApp.h>
#include <vpChannel.h>
#include <GL/GLAux.h>
#include "vuAllocTracer.h"
vuAllocTracer tracer(true, true);

class myApp:public vpApp,public vsChannel::Subscriber   
{   
public:   
        myApp(){};   
        ~myApp(){};   
  
        int configure()   
        {   
                vpApp::configure();   
                  
                vpChannel *chan = *vpChannel::begin();   
                chan->addSubscriber(vsChannel::EVENT_POST_DRAW,this);   
  
                return vsgu::SUCCESS;   
        }   
  
                virtual void notify(vsChannel::Event, const vsChannel *channel, vrDrawContext *context)   
                {   
                        context->pushElements(true);   
  
                        glBegin(GL_QUADS);   
                        glColor4f(1.0f, 0.0f, 0.0f,1.0f);   
                        glVertex3f( 0.5f, 1.0f, -0.1f);   
                        glVertex3f( 0.5f, 0.5f, -0.1f);   
                        glVertex3f( 1.0f, 0.5f, -0.1f);   
                        glVertex3f( 1.0f, 1.0f, -0.1f);   
                        glEnd();   
  
                        glShadeModel(GL_SMOOTH);   
                        glColor4f(1.0f, 0.0f, 0.0f,0.5f);   
                        glLoadIdentity();   
                        glTranslatef(0.75f,0.75f,-0.3f);   
                        auxSolidSphere(0.2);   
  
                        GLfloat mat_specular[] = {1.0, 1.0, 1.0, 1.0};   
                        GLfloat mat_shininess[] = {50.0};   
                        GLfloat light_position[] = {0.5, 0.5, -0.5, 0.0};   
  
                        glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);   
                        glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);   
                        glLightfv(GL_LIGHT0, GL_POSITION, light_position);   
  
                        glEnable(GL_LIGHTING);   
                        glEnable(GL_LIGHT0);   
                        glDepthFunc(GL_LESS);   
                        glEnable(GL_DEPTH_TEST);   
  
                        context->popElements();   
                }   
  
                virtual void notify(vsChannel::Event, const vsChannel *,   
                        vsTraversalCull *) {}   
  
};

int main(int argc, char *argv[])
{
    // initialize vega prime
    vp::initialize(argc, argv);

    // initialize addition modules here
//   vpModule::initializeModule( "vppath" );

    // create a vpApp instance
    vpApp *app = new vpApp;

    // load acf file
    if (argc <= 1)
        app->define( "test.acf" );
    else
        app->define(argv[1]);

    // configure my app
    app->configure();

    // runtime loop
    app->run();
   
    // unref my app instance
    app->unref();
   
    // shutdown vega prime
    vp::shutdown();

    return 0;
}

怎么什么都不显示OpenGL写的内容啊?
问题出在哪啊?
请高手指点

最近VR访客

superdemo 评论于2009-7-23 22:30:43
glBegin(GL_QUADS)之前缺少设置Projection:
glDisable(GL_DEPTH_TEST);
        glMatrixMode(GL_PROJECTION);
        glPushMatrix();
        glLoadIdentity();
        gluOrtho2D(0.0, 1.0, 0.0, 1.0);
        glMatrixMode(GL_MODELVIEW);
        glPushMatrix();
        glLoadIdentity();

vrDepthTest::Element depthTestElement;
        depthTestElement.m_enable = false;
        context->setElement(vrDepthTest::Element::Id, &depthTestElement);
        
        vrTransform::ElementProjection projectionElement;
        projectionElement.makeOrthographic(0.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f);
        context->setElement(vrTransform::ElementProjection::Id,
            &projectionElement);
xiaoyuer 评论于2009-7-24 08:59:44
问题解决了
谢谢
accountwcx 评论于2009-7-24 11:05:16
好高深
2004sww 评论于2009-7-27 15:07:22
一个无法解析的外部符号在virtual void notify(vsChannel::Event, const vsChannel *,  vsTraversalCull *) {}

这是什么意思啊?
pillwkai26 评论于2009-7-28 10:00:48

请教superdemo

原帖由 superdemo 于 2009-7-23 10:30 PM 发表
glBegin(GL_QUADS)之前缺少设置Projection:
glDisable(GL_DEPTH_TEST);
        glMatrixMode(GL_PROJECTION);
        glPushMatrix();
        glLoadIdentity();
        gluOrtho2D(0.0, 1.0, 0.0, 1.0);
...

第二个glPushMatrix()是不是应该是glPopMatrix()呀?
还用为什么要关闭深度测试呢,因为要显示的是二维字符图?
如果要是画三维的物体,怎么办呢?
hyhws 评论于2009-7-30 22:38:23
回答楼上的问题:需要设置一下投影矩阵和观察矩阵,深度检测打开,就可以在VP中画OPENGL三维物体       
                  context->pushElements(true);
                vrDepthTest::Element depthTestElement;
                depthTestElement.m_enable = true;
                context->setElement(vrDepthTest::Element::Id, &depthTestElement);
                vrTransform::ElementProjection projectionElement;
                projectionElement.m_matrix = channel->getVrChannel()->getProjectionMatrix();
                vrTransform::ElementModelView modelViewElement;
                modelViewElement.m_matrix = channel->getVrChannel()->getViewMatrixInverse();       
                context->setElement(vrTransform::ElementProjection::Id,&projectionElement, true);
                vuMatrix<float> rotMat;
                rotMat.makeRotate(0.0f,-90.0f,0.0f);
                modelViewElement.m_matrix.postMultiply(rotMat);
                context->setElement(vrTransform::ElementModelView::Id,&modelViewElement, true);
                  opengl 代码。。。。。。。。。。。。。。。。。。
                context->popElements();

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

GMT+8, 2020-9-29 09:24 AM

返回顶部