求一个C语言Opengl代码

http://zhidao.baidu.com/question/164682552.html

 

用Opengl做一个小球在正方形空间内移动,碰到墙壁就反弹的动画,急用。百度一下的不要来,谢谢。
      

最佳答案
// Bounce.c
// Demonstrates a simple animated rectangle program with GLUT
// OpenGL SuperBible, 2nd Edition
// Richard S. Wright Jr.
#include"stdafx.h"
#include <windows.h>
#include <gl/glut.h>

// Initial square position and size
GLfloat x1 = 100.0f;
GLfloat y1 = 150.0f;
GLsizei rsize = 50;

// Step size in x and y directions
// (number of pixels to move each time)
GLfloat xstep = 1.0f;
GLfloat ystep = 1.0f;

// Keep track of windows changing width and height
GLfloat windowWidth;
GLfloat windowHeight;


// Called to draw scene
void RenderScene(void)
 {
 // Clear the window with current clearing color
 glClear(GL_COLOR_BUFFER_BIT);

    // Set current drawing color to red
 //     R  G    B
 glColor3f(1.0f, 0.0f, 0.0f);

 // Draw a filled rectangle with current color
 glRectf(x1, y1, x1+rsize, y1+rsize);

 // Flush drawing commands
    glutSwapBuffers();
 }

// Called by GLUT library when idle (window not being
// resized or moved)
void TimerFunction(int value)
 {

 // Reverse direction when you reach left or right edge
 if(x1 > windowWidth-rsize || x1 < 0)
  xstep = -xstep;

 // Reverse direction when you reach top or bottom edge
 if(y1 > windowHeight-rsize || y1 < 0)
  ystep = -ystep;


 // Check bounds.  This is incase the window is made
 // smaller and the rectangle is outside the new
 // clipping volume
 if(x1 > windowWidth-rsize)
  x1 = windowWidth-rsize-1;

 if(y1 > windowHeight-rsize)
  y1 = windowHeight-rsize-1;
 // Actually move the square
 x1 += xstep;
 y1 += ystep;

 // Redraw the scene with new coordinates
    glutPostRedisplay();
 glutTimerFunc(33,TimerFunction, 1);
 }

// Setup the rendering state
void SetupRC(void)
    {
    // Set clear color to blue
    glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
    }



// Called by GLUT library when the window has chanaged size
void ChangeSize(GLsizei w, GLsizei h)
 {
 // Prevent a divide by zero
 if(h == 0)
  h = 1;

 // Set Viewport to window dimensions
    glViewport(0, 0, w, h);

 // Reset coordinate system
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();

 // Keep the square square, this time, save calculated
 // width and height for later use
 if (w <= h) 
  {
  windowHeight = 250.0f*h/w;
  windowWidth = 250.0f;
  }
    else 
  {
  windowWidth = 250.0f*w/h;
  windowHeight = 250.0f;
  }

 // Set the clipping volume
 glOrtho(0.0f, windowWidth, 0.0f, windowHeight, 1.0f, -1.0f);

 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();
 }



// Main program entry point
void main(void)
    {
 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
 glutCreateWindow("Bounce");
 glutDisplayFunc(RenderScene);
    glutReshapeFunc(ChangeSize);
    glutTimerFunc(33, TimerFunction, 1);

 SetupRC();

 glutMainLoop();
    }

//是正方形的,你改一下吧~
程序还是自己试着编,这样才会进步,加油哈!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值