原创 OpenGL学习笔记——03

2009-7-12 16:12 2705 7 8 分类: 软件与OS

d6727c70-9c0a-4354-8b22-a66943a06253.jpg


#include <GL/glut.h>
#include <stdlib.h>


static int year = 0, day = 0;


void init()
{
 glClearColor(0.0, 0.0, 0.0, 0.0);
 glShadeModel(GL_FLAT);
}


void change(void)
{
 year = (year + 1) % 360;
 day = (day + 1) % 360;
 glutPostRedisplay();
}


void display(void)
{
 glClear(GL_COLOR_BUFFER_BIT);
 glColor3f(1.0, 1.0, 1.0);


 glPushMatrix();
 glRotatef((GLfloat) year, 0.0, 1.0, 0.0);
 glutWireSphere(1.0, 20, 16);
 glTranslatef(2.0, 0.0, 0.0);
 glRotatef((GLfloat) day, 0.0, 1.0, 0.0);
 glutWireSphere(0.2, 10, 8);
 glPopMatrix();
 glutSwapBuffers(); 
}


void reshape(int w, int h)
{
 glViewport(0, 0, (GLsizei) w, (GLsizei) h);
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
 //glOrtho(-50.0, 50.0, -50.0, 50.0, -1.0, 1.0);
 gluPerspective(60.0, (GLfloat) w/(GLfloat)h, 1.0, 20.0);
 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();
 gluLookAt(0.0, 5.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
}


void keyboard(unsigned char key, int x, int y)
{
 switch (key)
 {
  
 case 'd' :
  day = (day + 10) % 360;
  glutPostRedisplay();
  break;
 case 'y' :
  year = (year + 10) % 360;
  glutPostRedisplay();
  break;
  
 case 'a':
  glutIdleFunc(change);
  break;
 case 's':
  glutIdleFunc(NULL);
  break;
 default:
  break;
 }
}


int main(int argc, char** argv)
{
 glutInit(&argc, argv);
 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
 glutInitWindowSize(500, 500);
 glutInitWindowPosition(100, 100);
 glutCreateWindow("OpenGL Test");
 init();
 glutDisplayFunc(display);
 glutReshapeFunc(reshape);
 //glutMouseFunc(mouse);
 glutKeyboardFunc(keyboard);
 glutMainLoop();
 return 0;
}


按A键自动旋转,按S键停止,按D键小球自转,按Y键小球绕着大球转。

文章评论1条评论)

登录后参与讨论

tengjingshu_112148725 2009-7-13 10:31

谢谢介绍,为我打开了一扇窗户
相关推荐阅读
用户124183 2010-10-04 18:48
[Craftor原创]基于Verilog的I2C总线驱动设计
摘要:此版本的设计中,笔者将协议里对总线的操作细分为4个,即起始(Start)、写(Write)、读(Read)、停止(Stop),并给对应的操作编码:起始(1000)、写(0100)、读(0010)...
用户124183 2010-09-03 10:42
4/8/16/32/64位乘法器的设计
4/8/16/32/64位乘法器的设计,单个时钟周期运算出结果。思路如下:4位乘法器a,b输入,y输出。使用case语句,对于输入a,y输出是b输入的16种可能。单个周期内可以输出结果。8位乘法器a,...
用户124183 2010-09-02 15:32
除法器的设计与仿真(Verilog&VHDL)
最近在做算法,要用到除法。本来想使用除法器的IP核,但发现Xilinx的除法器IP核是流水线的,如果是批量的数做除法,自然是很快,也很方便。而我的算法中需要将前一次的结果算出来之后,再到下一次运算里做...
用户124183 2010-08-06 09:58
Modelsim中添加Xilinx仿真库
不少朋友在刚接触Xilinx的FPGA时,对仿真库的编译和使用不是很了解,而官方的说明也不是很详细,而且看起来有些费劲,这里Craftor给出在Modelsim中编译和使用Xilinx库的详细教程,P...
用户124183 2010-08-02 22:51
周末写了个51单片机软核
为了弥补这段时间的罪过,这个周末决定做宅男,写程序。其实酝酿51软核已经有好几个月时间了,之前是因为在一个地方卡住了,中间停止了。上周五上班的时候突然来了灵感,一下子想通了,呵呵代码不长,1000多行...
用户124183 2010-06-19 15:41
深入研究Modelsim之使用do文件仿真(1)
Modelsim的仿真功能非常强大,本文介绍使用do脚本仿真单个Verilog或者VHDL文件的操作过程,希望对大家有用!以带时钟和复位信号的计数器为例,代码如下:module counter (  ...
我要评论
1
7
关闭 站长推荐上一条 /2 下一条