ARTOOLKIT例子中的simpleVRML.c改写(一)

       simpleVRML这个例子比较特殊,它使用的框架与之前的例子不同。VRML(Virtual Reality Modeling Language)即虚拟现实建模语言。是一种用于建立真实世界的场景模型或人们虚构的三维世界的场景建模语言,也具有平台无关性。是目前Internet上基于 WWW的三维互动网站制作的主流语言。VRML的场景模型文件的扩展名为.wrl,wrl文件是一种虚拟现实文本格式文件,可以用VrmlPad软件编辑,也可以在3Ds  MAX软件中画3D图形,然后导出为.wrl类型的文件。(simpleVRML.c原始代码的理解请查看我博客里的一篇文章“Artoolkit的例子simpleVRML详解”,这里讲的是我修改之后的程序)

      该例子的标识和模型路径为“Data/object_data_vrml”,内容如下。第1行表示pattern被识别的个数为2;第3行表示第一个pattern的模型路径为“Wrl/Teapot.dat”,标识路径为“Data/patt.hiro”,标识的宽度为80,标识的中心坐标为(0,0);第5行表示第一个pattern的模型路径为“Wrl/model.dat”,标识路径为“Data/patt.kanji”,标识的宽度为80,标识的中心坐标为(0,0)。(如果想使用自己的模型和标识,就要修改这个文件的内容)

#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

 


我在文件里添加了以下代码:
static void   drawCuboid()
{
	glColor3f(0,1,0);
	glBegin(GL_LINE_LOOP);	  		
        glVertex3f(150.0f,100.0f,0.0f);  
        glVertex3f(-150.0f,100.0f,0.0f);  
        glVertex3f(-150.0f,100.0f,250.0f);  
        glVertex3f(150.0f,100.0f,250.0f);
		glVertex3f(150.0f,-100.0f,250.0f);
		glVertex3f(-150.0f,-100.0f,250.0f);  
		glVertex3f(-150.0f,-100.0f,0.0f);
		glVertex3f(150.0f,-100.0f,0.0f); 
	glEnd();

	glBegin(GL_LINES);
		glVertex3f(150.0f,-100.0f,0.0f);  
		glVertex3f(150.0f,-100.0f,250.0f);
		glVertex3f(-150.0f,-100.0f,0.0f); 
		glVertex3f(-150.0f,100.0f,0.0f);
		glVertex3f(-150.0f,-100.0f,250.0f);  
		glVertex3f(-150.0f,100.0f,250.0f);
		glVertex3f(150.0f,100.0f,0.0f);  
		glVertex3f(150.0f,100.0f,250.0f);
	glEnd();
}
在static void Display(void)函数的某一段中添加一行代码如下,用来绘制线状的长方体。
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);
		glLoadMatrixd(m);

		arVrmlDraw(gObjectData[i].vrml_id);//根据前面加载的模型ID绘制模型
		
		drawCuboid();//添加的代码,绘制线性长方体
		}			
}
我修改代码之后,运行的结果如图1所示。我们可以看到在patt.hiro标识上显示的是一个茶壶,在patt.kanji标识上显示的是一个球和圆柱的组合体,而且我还给每个模型都添加了一个线状的长方体。

图1  修改simpleVRML.c后的运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值