游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1465|回复: 1

求助!。。。。。。基本程序问题

[复制链接]

4

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2008-3-30 21:19:00 | 显示全部楼层 |阅读模式
#include <gl/glut.h>

GLfloat upDown = 0.0f;
GLfloat Angle = 0.0f;

void Render(void);
void ChangeSize(int w,int h);
void KeyIn(int key,int x,int y);
void Init();

int main()
{
        glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
        glutInitWindowSize(800,600);
        glutCreateWindow("Dome3");

        glutDisplayFunc(Render);
        glutReshapeFunc(ChangeSize);
        glutSpecialFunc(KeyIn);

        Init();
        glutMainLoop();
}

void Render(void)
{
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        glColor3ub(255,0,0);
        glTranslatef(0.0f,0.0f,upDown);

        glPushMatrix();
        glRotatef(Angle,0.0f,1.0f,0.0f);
        glutSolidCube(5.0f);
        glPopMatrix();

        glutSwapBuffers();
}

void ChangeSize(int w,int h)
{
        glViewport(0,0,w,h);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();

        gluPerspective(60.0f,(GLfloat)w/(GLfloat)h,1.0f,1000.0f);
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        glTranslatef(0.0f,0.0f,-50.0f);
}

void KeyIn(int key,int x,int y)
{
        if(key == GLUT_KEY_UP)
                upDown -= 0.5f;
        if(key == GLUT_KEY_DOWN)
                upDown += 0.5f;
        if(key == GLUT_KEY_LEFT)
                Angle-=0.5f;
        if(key == GLUT_KEY_RIGHT)
                Angle+=0.5f;

        if(Angle < -1.0f)
                Angle = 355.0f;
        if(Angle > 355.0f)
                Angle = 0.0f;

        glutPostRedisplay();
}

void Init()
{
        glClearColor(0.0f,0.0f,0.0f,1.0f);

        glEnable(GL_DEPTH_TEST);
}


//这个程序我想要的效果是 按UP或DOWN时 向Z轴移动
//按 LEFE或RIGHT时 向Y轴旋转

//但是遗憾的是,我先按UP然后再按DOWN时 他却还是向远处移动 需要过段时间才会移动
//然后按LEFE或RIGHT时 完全就乱套了。。。。不知道怎么形容 大家把程序拿去测试就知道了

//不知道怎么回事,我也不清楚那里错了,希望大家多多指教一下

2

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
QQ
发表于 2008-3-31 09:45:00 | 显示全部楼层

Re:求助!。。。。。。基本程序问题

我改动了一下效果不是很好,我想你绘制矩形换一个函数应该就可以实现旋转。
#include <gl/glut.h>

GLfloat upDown = 0.0f;
GLfloat Angle = 0.0f;

void Render(void);
void ChangeSize(int w,int h);
void KeyIn(int key,int x,int y);
void Init();

void main()
{
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
glutInitWindowSize(800,600);
glutCreateWindow("Dome3");

glutSpecialFunc(KeyIn);
glutReshapeFunc(ChangeSize);
glutDisplayFunc(Render);

Init();
glutMainLoop();
}

void Render(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glColor3ub(255,0,0);
glTranslatef(0.0f,0.0f,upDown);

glPushMatrix();
glRotatef(Angle,0.0f,1.0f,0.0f);
glBegin(GL_QUADS);
glVertex3f(-5.0f, 5.0f, upDown);
glVertex3f(5.0f, 5.0f, upDown);
glVertex3f(5.0f, -5.0f, upDown);
glVertex3f(-5.0f, -5.0f, upDown);
glEnd();
glPopMatrix();

glutSwapBuffers();
}

void ChangeSize(int w,int h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

gluPerspective(60.0f,(GLfloat)w/(GLfloat)h,1.0f,1000.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0f,0.0f,-50.0f);
}

void KeyIn(int key,int x,int y)
{
if(key == GLUT_KEY_UP)
upDown -= 0.5f;
if(key == GLUT_KEY_DOWN)
upDown += 0.5f;
if(key == GLUT_KEY_LEFT)
Angle-=0.5f;
if(key == GLUT_KEY_RIGHT)
Angle+=0.5f;

if(Angle < -1.0f)
Angle = 355.0f;
if(Angle > 355.0f)
Angle = 0.0f;

glutPostRedisplay();
}

void Init()
{
glClearColor(0.0f,0.0f,0.0f,1.0f);

glEnable(GL_DEPTH_TEST);
}

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-20 15:48

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表