资源简介
我是一个初学者,可能有的地方考虑不周到,但是我觉得还是可以放出来大家一起交流交流,在键盘控制的时候,方向键不能和+ - 响应,所以我用的glut的函数来写的~不知道是不能响应还是怎么~初学者还需要学习~
代码片段和文件信息
#include
#include
#include
static GLfloat x = 0.0f;
static GLfloat z = 0.0f;
static GLfloat y = 0.0f;
static GLfloat tx = 1.0f;
static GLfloat ty = 1.0f;
static GLfloat tz = 1.0f;
static GLfloat oldmy oldmx;
static GLfloat deltax deltay;
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(deltax 0.0 1.0 0.0);
glRotatef(deltay 1.0 0.0 0.0);
glTranslatef(x y z);
glScalef(tx ty tz);
glBegin(GL_TRIANGLES);
// 第1个三角形 前面
glColor3f(1.0f 0.0f 0.0f);
glVertex3f(0.0f 1.0f 0.0f);
glColor3f(0.0f 1.0f 0.0f);
glVertex3f(-1.0f -1.0f 1.0f);
glColor3f(0.0f 0.0f 1.0f);
glVertex3f(1.0f -1.0f 1.0f);
// 第2个三角形 左面
glColor3f(1.0f 0.0f 0.0f);
glVertex3f(0.0f 1.0f 0.0f);
glColor3f(0.0f 1.0f 0.0f);
glVertex3f(-1.0f -1.0f -1.0f);
glColor3f(0.0f 0.0f 1.0f);
glVertex3f(-1.0f -1.0f 1.0f);
// 第3个三角形 右边
glColor3f(1.0f 0.0f 0.0f);
glVertex3f(0.0f 1.0f 0.0f);
glColor3f(0.0f 1.0f 0.0f);
glVertex3f(1.0f -1.0f 1.0f);
glColor3f(0.0f 0.0f 1.0f);
glVertex3f(1.0f -1.0f -1.0f);
// 第4个三角形 后边
glColor3f(1.0f 0.0f 0.0f);
glVertex3f(0.0f 1.0f 0.0f);
glColor3f(0.0f 1.0f 0.0f);
glVertex3f(1.0f -1.0f -1.0f);
glColor3f(0.0f 0.0f 1.0f);
glVertex3f(-1.0f -1.0f -1.0f);
glEnd();
glBegin(GL_QUADS);//底面
glColor3f(0.5f 0.5f 0.5f);
glVertex3f(1.0f -1.0f 1.0f);
glColor3f(0.5f 0.5f 0.5f);
glVertex3f(1.0f -1.0f -1.0f);
glColor3f(0.5f 0.5f 0.5f);
glVertex3f(-1.0f -1.0f -1.0f);
glColor3f(0.5f 0.5f 0.5f);
glVertex3f(-1.0f -1.0f 1.0f);
glEnd();
glPopMatrix();
glutSwapBuffers();
}
void Mouse(int button int state int x int y) //处理鼠标点击
{
if (state == GLUT_DOWN) //第一次鼠标按下时记录鼠标在窗口中的初始坐标
oldmx = x oldmy = y;
}
void onmousemove(int x int y) //处理鼠标拖动
{
deltax += 360 * (x - oldmx) / 600;
deltay += 360 * (y - oldmy) / 600;
oldmx = x;
oldmy = y;
}
void SpecialKeys(int key int rx int ry)
{
if (key == GLUT_KEY_UP)
y += 0.1f;
if (key == GLUT_KEY_DOWN)
y -= 0.1f;
if (key == GLUT_KEY_LEFT)
x -= 0.1f;
if (key == GLUT_KEY_RIGHT)
x += 0.1f;
glutPostRedisplay();
}
void keyboard(unsigned char key int m_x int m_y)
{
switch (key) {
case ‘+‘:
tx = tx * 1.1;
ty = ty * 1.1;
tz = tz * 1.1;
glutPostRedisplay();
break;
case ‘-‘:
tx = tx / 1.1;
ty = ty / 1.1;
tz = tz / 1.1;
glutPostRedisplay();
break;
}
}
void init()
{
glEnable(GL_DEPTH_TEST);
}
void reshape(int w int h)
{
glViewport(0 0 w h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-2 2 -2 2 -10 10);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
int main(int argc char *argv[])
{
glutInit(&argc argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowPosition(300 100);
glutInitWindowSize(600 600);
glutCreateWindow(“
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3397 2020-06-10 19:27 opengl鼠标旋转,键盘缩放和平移.cpp
评论
共有 条评论