perl-opengl-glutMotionFunc鼠标事件

#!/usr/bin/perl -w
use strict;
use warnings;
use OpenGL qw/ :all /;
use OpenGL::Config;   

#!/usr/bin/perl -w
use strict;
use warnings;
use OpenGL qw/ :all /;
use OpenGL::Config;   


my $a=rand(1);
my $b=rand(1);
my $c=1;
my $look=0.1;
my $lookx=0.1;
my $looky=0.1;
my $ispress=0;

glutInit();
glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);
glutInitWindowPosition(100,100);
glutInitWindowSize(400,400);
glutCreateWindow("my  OpenGL program");
glClearColor(0,0,0,255);
glClear(GL_COLOR_BUFFER_BIT);  
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-3,3,-3,3,-3,3);
gluLookAt($look,$look,$look,0.0,0.0,0.0,0.0,$look,0.0); 
glMatrixMode(GL_MODELVIEW);
glutDisplayFunc(\&mydis);
glutMotionFunc(\&mymouse);
glutMainLoop();

 sub mydis()
{
  glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  glClearColor(0,0,0,255);
  glClear(GL_COLOR_BUFFER_BIT); 
  &qiu();
}

sub mymouse()
{
	my ($myx,$myy)=@_;
	$look=($myx+$myy)/2/400;	
 	$lookx=($myx-200)/200;
	$looky=(200-$myy)/200;	
    glLoadIdentity();
    gluLookAt($lookx,$looky,$look,0.0,0.0,0.0,0.0,$look,0.0);	
	glutPostRedisplay();
	print "mouse x:$myx-y:$myy-look:$look\n";
}

sub qiu()
{
  my $x;
  my $y;
  my $z;
  my $c=3.1415926/180;
  for (my $phi=-80.00;$phi<=80.00;$phi+=20.00)
  {

      my $phir=$c*$phi;
      my $phir20=$c*($phi+20);     
      glBegin(GL_QUAD_STRIP); 
	  glColor3f($a,$b,$c);
      for (my $theta=-180.00;$theta<=180.00;$theta+=20.00)
      {
          my $thetar=$c*$theta;
          $x=sin($thetar)*cos($phir);
          $y=cos($thetar)*cos($phir);
          $z=sin($phir);
          glVertex3d($x,$y,$z);	
          $x=sin($thetar)*cos($phir20);
          $y=cos($thetar)*cos($phir20);
          $z=sin($phir20);          
          glVertex3d($x,$y,$z);				  
	  }  
      glEnd();	
	  glFlush();
  }
}

 按下鼠标按钮时,球体会随着鼠标的操作而转动 


 



 

 

7.6 glutMotionFunc, glutPassiveMotionFunc

  glutMotionFunc and glutPassiveMotionFunc set the motion and passive motion callbacks respectively for the current window.

Usage

void glutMotionFunc(void (*func)(int x, int y));
void glutPassiveMotionFunc(void (*func)(int x, int y));
func
The new motion or passive motion callback function.

 

Description

glutMotionFunc and glutPassiveMotionFunc set the motion and passive motion callback respectively for the current window. The motion callback for a window is called when the mouse moves within the window while one or more mouse buttons are pressed. The passive motion callback for a window is called when the mouse moves within the window while no mouse buttons are pressed.

The x and y callback parameters indicate the mouse location in window relative coordinates.

Passing NULL to glutMotionFunc or glutPassiveMotionFunc disables the generation of the mouse or passive motion callback respectively.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值