OpenGL实现鼠标旋转缩放平移操作


OpenGL实现鼠标旋转缩放平移操作:VS2015+OpenGL;加载OFF文件,实现鼠标旋转缩放平移操作,添加2个光源。
资源截图
代码片段和文件信息
#include 
#include 
#include 
#include “windows.h“
#include


using namespace std;


#include 
#include 
#include 
#include 

//窗口参数
static int GLWindow_height = 600;
static int GLWindow_width = 600;

//平移、缩放、旋转
static int scaling = 0;
static int translating = 0;
static int rotating = 0;
static float scale = 1.0;
static float rotation[3] = { 0.0 0.0 0.0 };
static float translation[3] = { 0.0 0.0 -4.0 };

static int GLmouse[2] = { 00 };
static int GLbutton[3] = { 000 };

//点
struct point
{
GLfloat x;
GLfloat y;
GLfloat z;
GLfloat dx;
GLfloat dy;
GLfloat dz;
int num;
};
//三角面片
struct triangle
{
int p1;
int p2;
int p3;
GLfloat dx;
GLfloat dy;
GLfloat dz;
};

point Point[40000];
triangle Triangle[70000];

int m n t;
string s;

void GLRedraw(void)
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0 (GLfloat)GLWindow_width / (GLfloat)GLWindow_height 1 8000.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0 600 0 0 0 0 0 0 1);

//平移、缩放、旋转
glTranslatef(translation[0] translation[2] translation[1]);
glScalef(scale scale scale);
glRotatef(rotation[0] 1.0 0.0 0.0);
glRotatef(rotation[1] 0.0 1.0 0.0);
glRotatef(rotation[2] 0.0 0.0 1.0);

//光位置变化
static GLfloat light0_position[] = { 3.0 4.0 0.0 0.0 };
static GLfloat light1_position[] = { -3.0 -2.0 0.0 0.0 };
glLightfv(GL_LIGHT0 GL_POSITION light0_position);
glLightfv(GL_LIGHT1 GL_POSITION light1_position);

//窗口背景颜色
glClearColor(1.0 1.0 1.0 1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

//绘制面片
for (int i = 1;i <= n;i++)
{
glBegin(GL_TRIANGLES);  
glNormal3f(Point[Triangle[i].p1].dx Point[Triangle[i].p1].dy Point[Triangle[i].p1].dz);
glVertex3f(Point[Triangle[i].p1].x Point[Triangle[i].p1].y Point[Triangle[i].p1].z);
glNormal3f(Point[Triangle[i].p2].dx Point[Triangle[i].p2].dy Point[Triangle[i].p2].dz);
glVertex3f(Point[Triangle[i].p2].x Point[Triangle[i].p2].y Point[Triangle[i].p2].z);
glNormal3f(Point[Triangle[i].p3].dx Point[Triangle[i].p3].dy Point[Triangle[i].p3].dz);
glVertex3f(Point[Triangle[i].p3].x Point[Triangle[i].p3].y Point[Triangle[i].p3].z);
glEnd();
}

glutSwapBuffers();
}



void GLMotion(int x int y)
{
y = GLWindow_height - y;

// 鼠标移动
if (rotating) {
rotation[0] += 0.5 * (y - GLmouse[1]);
rotation[2] += 0.5 * (x - GLmouse[0]);
}
else if (scaling) {
scale *= exp( (float)(y - GLmouse[1]) / (float)GLWindow_width);
}
else if (translating) {
translation[0] -= (float)(x - GLmouse[0]) / 3;
translation[1] += (float)(y - GLmouse[1]) / 3;
}

// 当前鼠标坐标
GLmouse[0] = x;
GLmouse[1] = y;
}



void GLMouse(int button int state int x int y)
{
y = GLWindow_height - y;

rotating = (button == GLUT_LEFT_BUTTON);
scaling = (button =

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

     文件        691  2017-04-10 13:12  模型加载与绘制.gitconfig

     文件         73  2017-04-10 13:12  模型加载与绘制.gitdescription

     文件         23  2017-04-10 13:12  模型加载与绘制.gitHEAD

     文件        177  2017-04-10 13:12  模型加载与绘制.githooksREADME.sample

     文件        712  2017-04-10 13:12  模型加载与绘制.gitindex

     文件        113  2017-04-10 13:12  模型加载与绘制.gitinfoexclude

     文件        334  2017-04-10 13:12  模型加载与绘制.gitlogsHEAD

     文件        334  2017-04-10 13:12  模型加载与绘制.gitlogs
efsheadsmaster

     文件        150  2017-04-10 13:12  模型加载与绘制.gitms-persist.xml

     文件         89  2017-04-10 13:12  模型加载与绘制.gitobjectsd76fe4328089e5b63a9c4190badacfc35ef2624

     文件     965748  2017-04-10 13:12  模型加载与绘制.gitobjectsfd7388f67cb1c2cf7633462f9e0f32445e4e3a4

     文件       1863  2017-04-10 13:12  模型加载与绘制.gitobjects1c9a181a44b4f9a105f0dc71a40ad0284ab6a7c4

     文件        751  2017-04-10 13:12  模型加载与绘制.gitobjects1ff0c423042b46cb1d617b81efb715defbe8054d

     文件        188  2017-04-10 13:12  模型加载与绘制.gitobjects3f92743f04c3bb52fe05d5b290a4aa24bf0df95b

     文件        153  2017-04-10 13:12  模型加载与绘制.gitobjects4e64e8dcd3eaa4a168ad73abcbc342d560f25e16

     文件        497  2017-04-10 13:12  模型加载与绘制.gitobjects515997613c12dd58f3400df8ce5f9f18f53bebb

     文件        193  2017-04-10 13:12  模型加载与绘制.gitobjects604c79afd3ae0895b06eca47b1a40ba0aa06ff7b

     文件      45297  2017-04-10 13:12  模型加载与绘制.gitobjects782d13610342afd93462108f8489576cd4b05af3

     文件        439  2017-04-10 13:12  模型加载与绘制.gitobjects8a3679e83860c25d9e7ebcae8fe42ae5a20953be

     文件       4147  2017-04-10 13:12  模型加载与绘制.gitobjectsaf21f2034520ae27b9a99c8d45a9bb3d6eeba590

     文件       1274  2017-04-10 13:12  模型加载与绘制.gitobjectsca1c8c70724ef59efb966da6973819b882b34f23

     文件        162  2017-04-10 13:12  模型加载与绘制.gitobjectsd36fabac7d7090696ab21037e25dae00e09a65a5

     文件         41  2017-04-10 13:12  模型加载与绘制.git
efsheadsmaster

     文件       2581  2017-04-10 13:12  模型加载与绘制.gitattributes

     文件       3997  2017-04-10 13:12  模型加载与绘制.gitignore

    ..A..H.     30720  2017-04-15 17:21  模型加载与绘制.vsOpenGLv14.suo

     文件     120832  2017-04-15 17:21  模型加载与绘制DebugOpenGL.exe

     文件     618312  2017-04-15 17:21  模型加载与绘制DebugOpenGL.ilk

     文件    2805760  2017-04-15 17:21  模型加载与绘制DebugOpenGL.pdb

     文件    2279648  2010-12-13 14:19  模型加载与绘制OpenGLBunny.off

............此处省略53个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)