ARToolKit例子中simpleTest.c改写-----旋转标识卡,显示出旋转角度

旋转标示卡后,旋转角可以用反正切atan来求,用法:double atan(double x);输出范围: -pi/2--pi/2。先在simpleTest.c的声明部分添加下面的代码。

#include<math.h>
#define PI 3.14159
double angle=0;
const int n = 100;
const GLfloat R = 40.0f;

static void DrawCircle();
static void getResultRaw(ARMarkerInfo *marker_info );
static void print_string(char *string );
然后将static void mainLoop(void)函数作一些修改。

// if( k == -1 ) {
	    if( k != -1 ) {
        glDisable(GL_DEPTH_TEST);
		getResultRaw( &marker_info[k] );//显示旋转角度
        //argSwapBuffers();    //屏幕缓冲
        //return;
    }
再将static void draw(void)函数作以下修改。

glTranslatef( 0.0, 0.0, 40.0 );
//glutSolidTeapot(50.0);
DrawCircle();
最后写自己定义的三个函数。
static void DrawCircle()
{
    int i;
	glLineWidth(5);
	glBegin(GL_LINE_LOOP); 
    glColor3f(1, 1, 0);
	for(i=0; i<n; i++)
        glVertex2f(R*cos(2*PI/n*i), R*sin(2*PI/n*i));
    glEnd();

	glPointSize(5);
	glBegin(GL_POINTS); 
	for(i=0; i<12; i++)
        glVertex2f((R-5)*cos(2*PI/12*i),(R-5)*sin(2*PI/12*i));
	glEnd();

	glColor3f(1,0,0);
           
    glBegin(GL_TRIANGLES);
        glVertex3f(0,40,0);
        glVertex3f(3,0,0);
        glVertex3f(-3,0,0);
    glEnd();
    return;
}
static void getResultRaw(ARMarkerInfo *marker_info )
{  
	char        string[256];
	
	angle= atan(-marker_info->line[0][0]/marker_info->line[0][1])/PI*180;


	glRasterPos3f(-0.7f, 0.4f,0.3f);
	sprintf(string,"ANGLE:  %3.1f\n",angle);
	print_string( string );

        return;
}
static void print_string(char *string )
{
  int     i;


  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();

  /* display the position data */
  glTranslatef(-0.95, -0.20, 0.0);
  /* draw red text  */
  glColor3f(0.75, 0.0, 0.0);
  glRasterPos2i(0.0, 0.0);//改变光栅位置
  for (i=0; i<(int)strlen(string); i++) {
      if(string[i] != '\n' ) {
          glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, string[i]);//用于在glut窗口某位置显示字符,只能显示英文字符,而且字体、大小都不能任意设置
      }
      else {
          glTranslatef(0.0, -0.07, 0.0);
          glRasterPos2i(0.0, 0.0);
      }
  }
   return;
}
显示结果如图1、图2所示。

                                           
图1   没有旋转标示卡的状态                                                                                                   图2  将标示卡顺时针旋转大约90度的状态       



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值