中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > C/C++
Vega中拾取物体
作者:未知 时间:2005-09-13 23:28 出处:Blog.ChinaUnix.net 责编:chinaitpower
              摘要:Vega中拾取物体
其实就是vgPicker的用法了。。。

#include <stdio.h>
#include "vg.h"
#include "pf.h"
#include "assert.h"

vgPicker    *picker = NULL;
vgObserver  *obs    = NULL;
vgChannel   *chan   = NULL;
vgEnv       *env    = NULL;
vgWindow    *win    = NULL;
vgGfx       *gfx    = NULL;
vgScene     *scn    = NULL;

void setPointers();
void createPicker();
void checkPickEvent();

void
setPointers()
{
    win = vgGetWin(0);
    assert(win);

    obs = vgGetObserv(0);
    assert(obs);

    chan = vgGetObservChan(obs, 0);
    assert(chan);

    gfx = vgGetObservGfx(obs);
    assert(gfx);

    env = vgGetEnv(0);
    assert(env);

    scn = vgGetScene(0);
    assert(scn);
}


/*
 * 创建vgPicker
 */
void
createPicker()
{
    picker = vgNewPicker();
    assert(picker);
    vgName(picker, "picker");

    /* 
     * 指定vgPicker作用的场景和通道
     */
    vgPickerScene(picker, scn);
    vgPickerChannel(picker, chan);

    /* 
     * 设置vgPicker属性,选择物体红色显示
     */
    vgPickerHighLightColor(picker, 1.0f, 0.0f, 0.0f);
    vgProp(picker, VGPICK_TRANSFORM, VGPICK_TRANSLATE);
    vgProp(picker, VGPICK_TRANSCOORDS, VGPICK_OBJECT_AXES);
    vgProp(picker, VGPICK_HL_LEVEL, VGPICK_OBJECT);
    vgProp(picker, VGPICK_HL_STYLE, VGPICK_HL_BBOX_LINES);
    vgProp(picker, VGPICK_TERRAIN_CLAMP, VG_OFF);
    vgProp(picker, VGPICK_TRANSOVERRIDE, VG_OFF);
    vgProp(picker, VGPICK_DISPLAY_STDOUT, VG_OFF);
    vgProp(picker, VGPICK_MULTIPLE_PICKS, VG_OFF);
    vgProp(picker, VGPICK_AUTOTRANSFORM, VG_OFF);
    vgProp(picker, VGPICK_TRACKPLANE, VGPICK_TRACK_XY);
    vgProp(picker, VGPICK_AUTOTRACKPLANE, VG_OFF);
    vgProp(picker, VGPICK_DRAG_FACTOR, 1.0f);
    vgProp(picker, VGPICK_RENDER_ISECT, VG_OFF);

    /* 
     * 设置vgPicker的相交矢量 
     */
    vgPickerClampIsector(picker, 0x10000000);
    vgPickerIsector(picker, 0x10000000);

    /* 启用vgPicker */
    vgProp(picker, VGCOMMON_ENABLED, VG_ON);
}

void
checkPickEvent()
{
    static vgMouse mouse;
    static vgPosition *pos = NULL;

    if (pos == NULL)
    {
        pos = vgNewPos();
        assert(pos);
    }
    vgGetMouse(&mouse);

    /* 鼠标左键:拾取或取消拾取物体 */
    if(mouse.lb && !mouse.mb && !mouse.rb)
    {
        vgGetPos(obs, pos);
        vgPerformPickProcessing(picker, pos);
    }
}

int
main(int argc, char** argv)
{
        int i;

    if (argc < 1)
    {
        printf("%s <config-file>\n", argv[0]);
        exit(-1);
    }

    vgInitSys();
    vgDefineSys(argv[1]);
    vgConfigSys();

    setPointers();
    createPicker();

    /*
     * 设置物体mask掩码与vgPicker相一致,使得所有的物体都可以被选中 
     */
    for (i = 0; i < vgGetNumObj(); i++)
    {
        vgObject *obj = vgGetObj(i);
        unsigned int mask = vgGetObjClass(obj);
        mask |= vgGetPickerIsector(picker);
        vgObjClass(obj, mask);
    }

    while (1)
    {
        vgSyncFrame();
        vgFrame();
        checkPickEvent();
    }

    return 0;
}
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有