可以移动的恐龙--用键盘让恐龙具有生命 dino.dat文件绘制恐龙 a d w s移动恐龙 源代码
2013-10-25 18:13
134 查看
#include<windows.h>
#include<math.h>
#include <gl/Glut.h>
#include <fstream>
#include <iostream>
#include<vector>
using namespace std;
void myDisplay(void);
void myInit(void);
void readFromFile(char *fileName);
void myKeyboard(unsigned char key,int x , int y);
struct GLPoint{
GLint x, y;
};
bool moved = true; //为了一开始能够显示
GLint xDirection = 0;
GLint yDirection = 0;
static GLint numPolys = 0; //总共线条的个数
//static GLint numLines = 0;
vector <GLPoint> pt ; //用来存放各个顶点的值
vector <GLint> numPoints; //每条线包含的顶点个数
const GLint screenWidth = 640;
const GLint screenHeight = 480;
int main(int argc, char ** argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(screenWidth,screenHeight);
glutInitWindowPosition(100,150);
glutCreateWindow("Dinosaur");
glutDisplayFunc(myDisplay);
glutKeyboardFunc(myKeyboard);
myInit();
glutMainLoop();
return 0;
}
void readFromFile(char *fileName){
//cout<<a<<" "<<s<<" "<<d<<" "<<w<<endl;
fstream inStream;
GLint num; //记录每条线的顶点个数
inStream.open(fileName,ios::in);
if (inStream.fail())
{
return;
}
cout<<"file open succeed"<<endl;
glClear(GL_COLOR_BUFFER_BIT);
inStream>>numPolys; //线带的总条数(因为每条线带是多个顶点,顾用poly)
for(int j=0;j<numPolys;j++){ //每条折线
inStream>>num;
numPoints.push_back(num); //每条线带 所包含的 顶点个数
for(int i=0;i<num;++i){
GLPoint *pp = new GLPoint();
inStream>>pp->x>>pp->y;
pt.push_back(*pp); //顶点值存入数组中
}
}
inStream.close();
cout<<"file closed"<<endl;
}
void myKeyboard(unsigned char key,int x , int y){
switch (key)
{
case 'w':moved = true;xDirection=0;yDirection=1;glutPostRedisplay();
break;
case 'd':moved = true;xDirection = 1;yDirection=0;glutPostRedisplay();
break;
case 's':moved = true;xDirection = 0;yDirection=-1;glutPostRedisplay();
break;
case 'a':moved = true;xDirection = -1;yDirection=0;glutPostRedisplay();
break;
default:break;
}
}
void myDisplay(void){
glClear(GL_COLOR_BUFFER_BIT);
cout<<endl;
cout<<endl;
cout<<endl;
GLint number = 0;
for (int j=0;j<numPolys;j++) //多少条线,就有多少次循环
{
cout<<"线条个数:"<<numPolys<<endl;
glBegin(GL_LINE_STRIP);
cout<<"顶点坐标:";
for (int i = 0;i<numPoints[j];i++)
{
pt[number].x += xDirection;
pt[number].y += yDirection;
glVertex2i(pt[number].x,pt[number].y);
number++;
}
glEnd();
cout<<endl;
}
glutSwapBuffers();
}
void myInit(void){
glClearColor(1.0,1.0,1.0,0.0);
glColor3f(0.0f, 0.0f, 0.0f);
glPointSize(1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0,(GLdouble)screenWidth,0.0,(GLdouble)screenHeight);
readFromFile("D:\\dino.dat");
}
#include<math.h>
#include <gl/Glut.h>
#include <fstream>
#include <iostream>
#include<vector>
using namespace std;
void myDisplay(void);
void myInit(void);
void readFromFile(char *fileName);
void myKeyboard(unsigned char key,int x , int y);
struct GLPoint{
GLint x, y;
};
bool moved = true; //为了一开始能够显示
GLint xDirection = 0;
GLint yDirection = 0;
static GLint numPolys = 0; //总共线条的个数
//static GLint numLines = 0;
vector <GLPoint> pt ; //用来存放各个顶点的值
vector <GLint> numPoints; //每条线包含的顶点个数
const GLint screenWidth = 640;
const GLint screenHeight = 480;
int main(int argc, char ** argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(screenWidth,screenHeight);
glutInitWindowPosition(100,150);
glutCreateWindow("Dinosaur");
glutDisplayFunc(myDisplay);
glutKeyboardFunc(myKeyboard);
myInit();
glutMainLoop();
return 0;
}
void readFromFile(char *fileName){
//cout<<a<<" "<<s<<" "<<d<<" "<<w<<endl;
fstream inStream;
GLint num; //记录每条线的顶点个数
inStream.open(fileName,ios::in);
if (inStream.fail())
{
return;
}
cout<<"file open succeed"<<endl;
glClear(GL_COLOR_BUFFER_BIT);
inStream>>numPolys; //线带的总条数(因为每条线带是多个顶点,顾用poly)
for(int j=0;j<numPolys;j++){ //每条折线
inStream>>num;
numPoints.push_back(num); //每条线带 所包含的 顶点个数
for(int i=0;i<num;++i){
GLPoint *pp = new GLPoint();
inStream>>pp->x>>pp->y;
pt.push_back(*pp); //顶点值存入数组中
}
}
inStream.close();
cout<<"file closed"<<endl;
}
void myKeyboard(unsigned char key,int x , int y){
switch (key)
{
case 'w':moved = true;xDirection=0;yDirection=1;glutPostRedisplay();
break;
case 'd':moved = true;xDirection = 1;yDirection=0;glutPostRedisplay();
break;
case 's':moved = true;xDirection = 0;yDirection=-1;glutPostRedisplay();
break;
case 'a':moved = true;xDirection = -1;yDirection=0;glutPostRedisplay();
break;
default:break;
}
}
void myDisplay(void){
glClear(GL_COLOR_BUFFER_BIT);
cout<<endl;
cout<<endl;
cout<<endl;
GLint number = 0;
for (int j=0;j<numPolys;j++) //多少条线,就有多少次循环
{
cout<<"线条个数:"<<numPolys<<endl;
glBegin(GL_LINE_STRIP);
cout<<"顶点坐标:";
for (int i = 0;i<numPoints[j];i++)
{
pt[number].x += xDirection;
pt[number].y += yDirection;
glVertex2i(pt[number].x,pt[number].y);
number++;
}
glEnd();
cout<<endl;
}
glutSwapBuffers();
}
void myInit(void){
glClearColor(1.0,1.0,1.0,0.0);
glColor3f(0.0f, 0.0f, 0.0f);
glPointSize(1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0,(GLdouble)screenWidth,0.0,(GLdouble)screenHeight);
readFromFile("D:\\dino.dat");
}
相关文章推荐
- 源码推荐:仿写映客直播 ,快速切换主题 ,星星评分控件,表格样式,可以横向移动的表格, 仿微信键盘-
- Mouse without Borders是微软的一个软件实验项目,这款软件可让鼠标自由在局域网中的多台电脑间移动,键盘输入实现无缝切换,还可以直接用鼠标相互拖拽文件。 如果经常需要同时使用两台以
- 移动开发过程中, 动画是必不可少的,有了动画,仿佛我们的程序有了生命一样.动画可以让我们的程序界面变化更流畅, 而不是很突兀的感觉.今天,就说一下CATransition过渡动画.
- win32强化练习3.4_绘制坦克及四向移动(键盘进阶)
- 用CRectTracker绘制一个矩形区域,并且可以移动该矩形
- opengl绘制花环(点的个数可以手动输入) 源代码
- 编写一个通讯录,功能与以前的诺基亚手机一样,可以通过键盘进行箭头的移动,回车进入选项,用“W”键代表手机手机左键,“backspace”键代表返回上一级。能够实现基本的人性化的增删改查及文件的导入导出
- as3中解决响应键盘事件时停顿一下的问题,让对象可以八方移动
- 自定义div 拖动。键盘上下左右键移动,ctrl+Q控制是否可以移动,ctrl+回车,返回初始状态
- 11079 可以移动的石子合并
- javascript:用键盘移动盒子代码(键盘事件)
- canvas画一个移动的小车,并且可以选择哪个部分被消除
- canvas 绘制跟随鼠标移动的线条
- 我的学生具有的优势,是保证他们大部分可以成为某个(IT)行业的顶尖人才的基础
- react Ant Design 日历插件input导致移动设备弹出键盘问题
- 让 View 可以移动
- 每一个可以移动的棋子都要移动——Every-SG 游戏
- 什么服务可以利用移动的优点
- Unity3d 控制角色移动 键盘按键与虚拟摇杆
- 移动硬盘可以识别但无法读取的处理方法