• 大小: 138KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-23
  • 语言: C/C++
  • 标签: 坐标  opengl  VC++  

资源简介

在VC++环境中调用opengl函数,在opengl窗口中捕捉鼠标位置,并将坐标位置显示在窗口左下角

资源截图

代码片段和文件信息

#pragma once
#include 
#include 
#include“glut.h“

//定义全局变量记录当前鼠标的位置信息
static int initWidth initHeight;
static int mousex mousey;

//鼠标移动回调函数
void mousemove(int x int y)
{
mousex = x;
mousey = glutGet(GLUT_WINDOW_HEIGHT) - y;
glutPostRedisplay();
}

/*-------------------------------------------------------------------*//*!
* \摘要  在窗口中指定位置指定大小的矩形内显示鼠标的当前位置
* \参数   x:           指定矩形的左小角的x坐标
            y:           指定矩形的左小角的y坐标
width:       指定矩形的宽度
height:      指定矩形的高度
win_width:   窗口的宽度
win_height:  窗口的高度
* \返回值   
* \标注     当前光标的坐标为:mousex mousey
*//*-------------------------------------------------------------------*/
void put_coordinate(float x float y float width float height float win_width float win_height)
{
GLfloat w_ratio = win_width / 330; 
GLfloat h_ratio = win_height / 220; 

//正投影
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-win_width/2 win_width/2 -win_height/2 win_height/2 1.0 -1.0);
glViewport(00widthheight);

glMatrixMode(GL_MODELVIEW);
glPushMatrix();

glLoadIdentity();

glTranslatef(x-win_width/2 y-win_height/2+110*h_ratio 0);           //将要显示的文字沿y轴上移110个单位(像素)
glScalef(w_ratio h_ratio 1);                                        //将要显示的文字的xy坐标大小缩放至原来的0.1倍

//生成文字的固有大小为(330220)
glutStrokeCharacter(GLUT_STROKE_ROMAN 88);                   //输入要显示文字“X”的ASC码值
glutStrokeCharacter(GLUT_STROKE_ROMAN 58);                   //输入要显示文字“:”的ASC码值
glutStrokeCharacter(GLUT_STROKE_ROMAN 48+(mousex/100));      //计算当前位置的x坐标的百位数字
glutStrokeCharacter(GLUT_STROKE_ROMAN 48+(mousex%100)/10);   //计算当前位置的x坐标的十位数字
glutStrokeCharacter(GLUT_STROKE_ROMAN 48+(mousex%10));       //计算当前位置的x坐标的个位数字

glLoadIdentity();
glTranslatef(x-win_width/2 y-win_height/2 0);
glScalef(w_ratio h_ratio 1);                                        //将要显示的文字的xy坐标大小缩放至原来的0.1倍
glutStrokeCharacter(GLUT_STROKE_ROMAN 89);                   //输入要显示文字“Y”的ASC码值
glutStrokeCharacter(GLUT_STROKE_ROMAN 58);                   //输入要显示文字“:”的ASC码值
glutStrokeCharacter(GLUT_STROKE_ROMAN 48+(mousey/100));      //计算当前位置的y坐标的百位数字
glutStrokeCharacter(GLUT_STROKE_ROMAN 48+(mousey%100)/10);   //计算当前位置的y坐标的十位数字
glutStrokeCharacter(GLUT_STROKE_ROMAN 48+(mousey%10));       //计算当前位置的y坐标的个位数字

glPopMatrix();
}

//将用户坐标映射到窗口坐标;当窗口的大小改变时,该函数会被调用
void ChangeSize(GLsizei w GLsizei h)
{
glViewport(00wh);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

//正投影
GLfloat aspectRatio = (GLfloat)w / (GLfloat)(h+1) ;           //h+1防止除数为零
if(w<=h)
{
int windowWidth = 100;
int windowHeight = 100/aspectRatio;
glOrtho(-100.0 100.0 -windowHeight windowHeight 1.0 -1.0);
}
else
{
int windowWidth = 100*aspectRatio;
int windowHeight = 100;
glOrtho(-windowWidth windowWidth -100.0 100.0 1.0 -1.0);
}
}

void RenderScene( void )
{
//设置背景颜色
glClearColor( 0.0f 0.5f 0.0f 1.0f );

//用当前清除颜色清除

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      40960  2007-12-11 18:25  zuobiao\debug\zuobiao.exe

     文件     169984  2007-06-19 13:02  zuobiao\glut.dll

     文件      21440  2007-12-10 11:56  zuobiao\glut.h

     文件      79654  2007-06-19 13:02  zuobiao\glut.lib

     文件     169984  2007-06-19 12:58  zuobiao\glut32.dll

     文件      79898  2007-06-19 12:58  zuobiao\glut32.lib

     文件       4099  2007-12-11 18:25  zuobiao\Simple.cpp

     文件        346  2007-12-11 16:03  zuobiao\zuobiao.sln

    ..A..H.     12288  2007-12-11 18:34  zuobiao\zuobiao.suo

     文件       3970  2007-12-11 17:55  zuobiao\zuobiao.vcproj

     文件       1413  2007-12-11 18:25  zuobiao\zuobiao.vcproj.ACTIONS.yyuan.user

     目录          0  2009-04-22 12:32  zuobiao\debug

     目录          0  2009-04-22 12:32  zuobiao

----------- ---------  ---------- -----  ----

               584036                    13


评论

共有 条评论