我要发帖 回复

中级会员

24

主题

149

积分

0

专家分

:

私信
发表时间 : 2007-12-13 10:59:51 | 浏览 : 2357    评论 : 15
superdemo大大做的望远镜里面如何加个水平和垂直的刻度呢?是再加一个刻度的纹理,还是其他的方法?
像下面这个望远镜下的刻度怎么做?

[ 本帖最后由 hunanlyp 于 2007-12-13 11:15 AM 编辑 ]

望远镜

望远镜

最近VR访客

hunanlyp 评论于2007-12-13 12:13:41
请高手指教怎么做望远镜上的刻度标尺啊!
superdemo 评论于2007-12-13 12:15:54
我是在通道里用opengl命令画的。
hunanlyp 评论于2007-12-13 13:59:41
SUPERDEMO大大能给我发一个做这个标尺刻度的opengl命令画的程序例子不?
我的邮箱:139hunancdlyp@163.com

[ 本帖最后由 hunanlyp 于 2007-12-13 02:03 PM 编辑 ]
hunanlyp 评论于2007-12-14 18:01:27
高手教我怎么做望远镜里面的刻度吧。。。
superdemo 评论于2007-12-14 21:58:20
参考http://www.52vr.com/bbs/viewthre ... &extra=page%3D2

通道的Subscribers里面画线(GL_LINES):

void OpenglSubscribers::notify(vsChannel::Event event, const vsChannel *chan, vrDrawContext *context)
{
        switch(event) {
       
        case vsChannel::EVENT_POST_DRAW:
                {
                       
                        vrTransform::ElementProjection m_projectionElement;
                        context->pushElements(true);

                        int nFullWidth=GetSystemMetrics(SM_CXSCREEN);//
                        int nFullHeight=GetSystemMetrics(SM_CYSCREEN);
                        glMatrixMode(GL_PROJECTION);
                        glLoadIdentity();
                        glOrtho(0.0,nFullWidth,0.0,nFullHeight,-1.0,1.0);//
                        glMatrixMode(GL_MODELVIEW);
                        glLoadIdentity();

                        int x,y,w,h;
                        chan->getVrChannel()->getViewport(&x,&y,&w,&h);
                       

                        glDisable(GL_BLEND);
                       
                        glColor3f(1.0,0.0,0.0);

                       
                        //画箭头分划
                        int l,r,b,t;
                        vpWindow *win = *vpWindow::begin();
                        //chan->getDrawArea(&l,&r,&b,&t);
                        win->getOrigin(&l,&b);
                        int width;
                        int height;
                        win->getSize(&width,&height);
                        r = l + width;
                        t = b + height;

                        glLineWidth( 1.5 );                        //
                        glColor3f(0,0,0);
                        glBegin(GL_LINES);       
                               

                       
                        //画大十字线
                        //glVertex2f(l + (width - height)/2.0f - 8 ,b + height/2);
                        //glVertex2f(r - (width - height)/2.0f + 8 ,b + height/2);
                        //glVertex2f(l + width/2,b);
                        //glVertex2f(l + width/2,t);
                       

                        //画箭头及刻度
                        glVertex2f(l + width /2.0f - 10 ,b + height/2 - 20);
                        glVertex2f(l + width/2.0f,b + height/2);
                        glVertex2f(l + width /2.0f + 10 ,b + height/2 - 20);
                        glVertex2f(l + width/2.0f,b + height/2);
               
                        //......
                        glEnd();
                       

                        context->setElement(vrTransform::ElementProjection::Id,&m_projectionElement);
                        context->popElements();
                }// end of postdraw event
                break;
        }// end of switch       
}
hunanlyp 评论于2007-12-14 23:49:52
谢谢superdemo大大
hunanlyp 评论于2007-12-15 00:13:21
想问一下superdemo大大,你有个VP_glass例子(有汽车后视镜和放大镜)的例子里面的放大镜的实现方式和我粘贴的附件中的这个望远镜的实现方式不一样吧?
放大镜的例子是你在creator中画了一个圆形的模型,然后通过纹理替换的方式实现了放大镜;
而附件中的这个望远镜的例子是不是在VP里面定义了一个通道(chanel),然后调节通道的大小,再加放大算法实现的吗?
如果我想做CS里面狙击枪的瞄准镜那种,通过一个键切换瞄准镜的模式,瞄准镜和枪固连,枪随动的时候,瞄准也随动,怎么实现这个随动呢?
我的新手,问的问题比较多,希望superdemo大大能给我解释解释,真的谢谢了!
superdemo 评论于2007-12-15 11:19:03
放大镜的效果都是先设置一channel,调整其视场角(FOV),把这生成的视景做为动态纹理贴到目的地,比如通过pbuffer方式替换其它纹理,或在其它通道Subscribers里面画自己的形状并附上那动态纹理。枪及其瞄准镜的实现,与汽车后视镜一样原理,镜子是枪上的一部分,可以在cr里面就一块做好。
cityhunter2002 评论于2010-4-30 07:13:49
谢谢superdemo大大
sichuanwww 评论于2010-4-30 07:47:28
你的OPENGL刻度在望远镜运动时不闪烁吗?
努力挣钱,快乐生活!
RAY1234 评论于2010-5-24 11:05:03
这就是 在回调函数里+OpenGL啊
RAY1234 评论于2010-5-24 11:09:50
我想问下如何把transform 绑定到DOF节点上
jgy86324 评论于2011-1-5 16:15:19
我现在也在研究这个放大镜。。
在控制台程序下随便怎么改都可以实现放大镜,但是一旦把代码移植到项目中就不起作用,关键是setForSymmetric()和setLODVisibilityRangScale()函数不起作用
无论我是在主通道还是在侧通道调用这两个函数都不起作用
shirro 评论于2011-1-7 20:41:57
刻度也可以用overlay中的line来实现
gubingjie 评论于2011-8-30 05:28:49
正在学习中的。

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

GMT+8, 2021-9-18 01:06 AM

返回顶部