ARToolkit例子中的simpleVRML.c改写(二)

       我在ARTOOLKIT例子中的simpleVRML.c改写(一)中修改代码后显示了自己绘制的模型,并且我还在每个模型的外面都画了一个线状的长方体。

       现在我只想在茶壶的外面显示线状的长方体,那么怎么实现呢?我们来看一下代码中的static void Display(void)函数,其中在对标识进行遍历的过程中如果该标识被设置为可见且ID正确,那么就用arVrmlDraw()函数根据前面加载的模型ID绘制模型。我们可以在这一段修改代码。我们再来看一下该例子的标识和模型路径 “Data/object_data_vrml”中的内容,可以看到茶壶对应的vrml_id=0,那么我们就可以利用vrml_id来控制线状长方体。

#the number of patterns to be recognized 2

#pattern 1VRML	Wrl/Teapot.dat Data/patt.hiro  80.0  0.0 0.0

#pattern 2VRML	Wrl/model.dat  Data/patt.kanji 80.0 0.0 0.0

 



      修改的代码如下。

for (i = 0; i < gObjectDataCount; i++) {//对标识进行遍历
			if ((gObjectData[i].visible != 0) && (gObjectData[i].vrml_id >= 0))
			{    //如果该标识被设置为可见(该设置在Idle()函数中完成)且ID正确那么就执行以下代码
				//fprintf(stderr, "About to draw object %i\n", i);
				arglCameraViewRH(gObjectData[i].trans, m, VIEW_SCALEFACTOR_4);//创建一个视景矩阵,传递给OpenGL设置虚拟相机的视景变换。转换标识转换矩阵
				                                //成OpenGL视景矩阵,这16个值就是真实相机的位置和方向,使用他们设置虚拟相机的位置,使三维目标准确的放置在物理标识上。
				glLoadMatrixd(m);//这里是设置虚拟相机的位置。

				//第三步:在标识上画出虚拟物体。
				arVrmlDraw(gObjectData[i].vrml_id);//根据前面加载的模型ID绘制模型

				if(gObjectData[i].vrml_id==0){//z指定在茶壶周围绘制长方体
					glColor3f(0,1,0);
					drawCuboid();//绘制线状长方体				
				}
			}			
		}

     运行结果如图1所示。可以与图2作一个对比,图2是ARToolkit例子中的simpleVRML.c改写(一)运行之后在每个模型外面都显示线状的长方体。

                                

图1  只在茶壶外面显示线状的长方体                                                            图2 在每个模型外面都显示线状的长方体



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值