天地之灵学习小组
我们学习小组的OpenGL学习笔记 大家一定要互相折磨呀~~
posts - 150,  comments - 156,  trackbacks - 0
说来还是比较惭愧的,都说要写玛丽医生这么长时间了,至到今天下午为止还没正式的玩过玛丽医生。上午的时候开始想了关于药片的问题,由于还没正是玩过,所以上午的时候全凭的是空想。开始的时候只知道药片要旋转的,至于具体年怎么旋转就不知道了,上午上课的时候想了一点借鉴了一点俄罗斯方块的思想就是把药片放在一个2*2的矩阵里面,药片的颜色根据定义的颜色随机生成。旋转的时候,把矩阵顺时针旋转90度就可以了。四种状2态如下图所示
                                                           

但是下午回来的时候玩了一下玛丽医生,发现实际情况还是与我想象的不同的,在[0][1]的位置始终是没有填充颜色的。如果药片是两种颜色的话,那它也就有四种状态,分别如下图

                                                                     

但是如果药片只有一种颜色的话,药片就仅仅只有两种状态,即上图组中的前两个(图略)。
以上仅仅是关于药片的比较直观的一点想法,难免会有一点不符合实际,还请各位不吝赐教。关于药片的具体用代码实现的我会陆续写出来的。明天晚上将准是提交出关于玛丽医生的第一版计划。
posted @ 2008-10-17 22:54 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(255) | 评论 (3)编辑 收藏

      今天没有多想玛丽医生,一来是因为白天一如既往的疲惫,伟大的1050造就的;二是周五晚上来得总是比周日晚上开心,虽然翘掉了选修课,但是还是没有写俺的伪码,因为还没想明白呢。
      之前的那个伪码如果算是思路正常有解的话那也不是OpenGL的玛丽医生,充其量是个C++版的。根据猫讲的状态机的概念,我想重新设计一个。但是仍然有东西明白不了。比如,我理解了是要一个frame一个frame的不停地画,从而形成动画效果。也就是用那个画方块的OpenGL某函数,只要获得坐标值和颜色就好了,而这些坐标值是由操作影响的,也是可以实现的。但就是每一frame都是要重新画的,一片空白上再操作,那这样的话越往后需要画的东西就越多,它不光要有一个OpenGL某函数,它要有很多的啊,因为之前也掉落了很多胶囊的,这些胶囊的坐标有的是不再变换了,有的还要变,这些也能处理,但是需要储存这些数据,那岂不是很繁琐?而且还要调用很多次某函数。这就不是一条语句可以解决的啊。
      后来看了那个SwapBuffer,隐约了解了一点儿,但还是没看出来哪里能实现这个不断地画的循环,还有它的坐标值是怎么存储的。去吃饭的路上risky说了那叫MainLoop,然后还小鄙视了一下我不知道Loop是循环的意思。于是想到了猫的留言,说是某Loop替我画了,这样子就体会到OpenGL和C++的区别了,它更像是一个接口,就像管道和管道之间的那个东西一样,很多东西它帮你实现,它都封装好了,你只需要告诉它做什么就好了,不需要知道它怎么做,也更不需要自己去做。难道是这样吗?不解,我只知道自己还是不知道这些东西。概念模糊,或者就没有概念。由此不小心想到了专业英语,一些翻译过来的东西有的时候很糟糕,或者那些东西在中国还没有定义,或者译者没能理解那些东西在英语中的意思。要是程序用汉语写,计算机从中国起步那该多美好啊。
      周末不能写太多,这个习惯不能养成,不然以后就没生活了。收笔,睡觉的时候再想想,弄明白了明天写伪码~~Over...

posted @ 2008-10-17 21:02 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(105) | 评论 (0)编辑 收藏
昨天没有写笔记,请大家责骂。
原因是,不小心断网了,发送键点出去返回给我一个无情的该页无法显示。中午本想补上,结果greenbrower死掉一次,写了一大片都这样不见了,巨崩溃,懒得写第三遍。直接上代码。
  1 #include <GL/glut.h>
  2 #include <ctime>
  3 
  4 static const int WindowWidth = 640;
  5 static const int WindowHeight = 480;
  6 
  7 int count = 0;
  8 int speed = 4;
  9 
 10 enum GridType
 11 {
 12     NOTHING, CAPSULE, WORM
 13 };
 14 
 15 enum Connect
 16 {
 17     NOT_CONNECTED, LEFT, RIGHT, UP, DOWN
 18 };
 19 
 20 enum Color
 21 {
 22     BLACK, YELLOW, BLUE, RED
 23 };
 24 
 25 enum DoctorDirect
 26 {
 27     DD_NODIRECT, DD_UP, DD_DOWN, DD_LEFT, DD_RIGHT
 28 };
 29 
 30 
 31 class Bottle
 32 {
 33 private:
 34     GridType b_grid_type[8][16];
 35     Color b_color[8][16];
 36     int b_x,b_y; //bottle的位置
 37     Connect b_connect;
 38 public:
 39     void drawBottle( void )
 40     {
 41         //画瓶子的外壳
 42         //画瓶子的内部,根据b_x,b_y和瓶子的内容物
 43     }
 44     Bottle( int level )
 45     {
 46         //生成level*4个虫子
 47     }
 48 };
 49 
 50 class Doctor
 51 {
 52 private:
 53     int d_x,d_y; //活动药丸(左下角)相对于瓶子的位置
 54     bool d_state; //横的0,竖的1
 55     Color d_color[2]; //俩药丸的颜色
 56     DoctorDirect d_direct;
 57 public:
 58     void drawDoctor( void )
 59     {
 60         //画医生的形象
 61         //画活动药丸
 62     }
 63     Doctor( void )
 64     {
 65         //确定初始位置
 66         //随机生成两药丸颜色
 67     }
 68     void move( void )
 69     {
 70         //伪码就先不写了,我纸上写了一堆,思路很清晰
 71     }
 72     void fall( void )
 73     {
 74         d_direct = DD_DOWN;
 75         move();
 76     }
 77     void setDirect( DoctorDirect direct )
 78     {
 79         d_direct = direct;
 80     }
 81 };
 82 
 83 static Bottle* bottle = NULL;
 84 static Doctor* doctor = NULL;
 85 
 86 void init( void )
 87 {
 88     //new两个类
 89 }
 90 
 91 void key( unsigned char key_char, int not_use, int not_use_1 )
 92 {
 93     switch ( key_char )
 94     {
 95     case 'w':
 96     case 'W':
 97         doctor->setDirect( DD_UP );
 98         break;
 99     case 's':
100     case 'S':
101         doctor->setDirect( DD_DOWN );
102         break;
103     case 'a':
104     case 'A':
105         doctor->setDirect( DD_LEFT );
106         break;
107     case 'd':
108     case 'D':
109         doctor->setDirect( DD_RIGHT );
110         break;
111     default:
112         doctor->setDirect( DD_NODIRECT );
113     }
114 }
115 
116 void step( void )
117 {
118     if ( dead() ) return ;
119     //还没写完
120     ++count; if ( count == speed ) { count = 0; doctor->fall(); }
121 }
122 
123 void timer( int not_use )
124 {
125     step();
126     glutPostRedisplay();
127     if ( !dead() )
128     {
129         glutTimerFunc( 1000/speed, timer, 0 );
130     }
131 }
132 
133 void draw()
134 {
135     bottle->drawBottle();
136     doctor->drawDoctor();
137 }
138 
139 void display( void )
140 {
141     glClear( GL_COLOR_BUFFER_BIT );
142     draw();
143     glutSwapBuffers();
144 }
145 
146 int main( int argc, char * argv[] )
147 {
148     glutInit( &argc, argv );
149     glutInitDisplayMode( GLUT_RGBA|GLUT_DOUBLE );
150     glutInitWindowPosition( 5050 );
151     glutInitWindowSize( WindowWidth, WindowHeight );
152     glutCreateWindow( "Dr Mario By PureMilk" );
153     glutDisplayFunc( display );
154     glutKeyboardFunc( key );
155     glutTimerFunc( 1000/speed, timer, 0 );
156     gluOrtho2D( 0, WindowWidth, WindowHeight, 0 );
157     glutMainLoop();
158     
159     return 0;
160 }
谢谢vczh的指点,还望多点播点播俺。这次的思路是不是比那个混乱代码要好些了……

posted @ 2008-10-17 17:09 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(227) | 评论 (8)编辑 收藏
       今天亲爱的糖糖加入了~欢迎下~(还在UT里听到了糖糖的声音)
       这几天因为确实没怎么看教程,也没有很细致的考虑玛丽医生,笔记就耽搁下了,不过我一直在看Q群里的聊天记录,因为对玛丽医生的考虑没有具体到伪代码,技术方面的感想不是很多(以后再回头翻看的时候 应该会获益匪浅)。
       我从5月开始玩WOW,这是一个极其容易让人投入大量精力的游戏~它培养了我对游戏的兴趣,但也占用了我太多的精力,时间的分配并不是最大的问题,精力的转移是关键所在。TT同学最开始邀请我我加入的时候,我的确犹豫和不舍了一下,预想到了冲突和可能的放弃。可我还是需要时间,我向殿下同学请了1—2周的半假,用以结束这个游戏,希望在此期间可以以一件T6结束WOW生涯,和不伤害任何人来结束游戏里的感情。
        玛丽医生的思路我会尽力在周末想出,订出进度。
posted @ 2008-10-17 01:52 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(121) | 评论 (0)编辑 收藏
      昨天,哦,今天之前的那篇随笔上讲了一些困境,看起来貌似很揪心的样子。今天晚上系统地和PureMilk谈了一会儿后就觉得,咳,这不是还很明朗的嘛。嘿嘿。
      刷新后的思路是这样子的,嘿,保密。我居然这么恶毒地勾起了大家的兴趣。
      除了PureMilk外其他人的任务就是在周末前自行设计自己的马利医生,交出伪码来,大家集体评估获得通过后就定了进度,自个儿吭哧吧。最后马利医生的截止日期是本月末+-5天。      
      糖糖加入了,OpenGL基础都差不多(PureMilk和寡人除外),菜鸟级~但是美工方面比俺们都要强很多。于是乎,组织又壮大了。说到美工,嘿嘿,纠结了老夫很长时间的那件事情给糖糖一下子就解决掉了。所以嘛,正如俺QQ状态里说的那样:神仙掉下来了。一个是猫,一个是糖糖。生活啊有时候总是不经意间给你一些惊喜的,有些事情就是Destined。再次感谢。
      还有,我做了个决定,那就是我也加入到编程的大军中。也就是以后写到这里的随笔就更有技术含量了,这种无聊的扯皮性质的哲理散文以后越来越少了。唉,那这次就多写点儿?嗨,偏不。Over。
posted @ 2008-10-16 22:43 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(100) | 评论 (0)编辑 收藏

一直总想做点什么东西。因为贪玩所以想做游戏~(ps:某很厉害的人个性签名点播)
自己程序编的马马虎虎。图画的一般般。算是没什么特色的吧~忽然某天发现了游戏策划~很难的职业~觉得自己满合条件但是又相去甚远
不过确实有时候想做的事情不一定能自己做好。人毕竟是群居动物。互相折磨就互相折磨吧~
至少让自己知道不是一个人在做些什么~身边还有很多很多很多很多一起的人~做同样的事情有同样的想法向着同样的目标努力的人
我的新起点~燃烧吧~小宇宙~~哇卡卡卡~~(ps:本糖很懒滴。。。大家多督促额。。多多包涵啦~~我会努力改变龟爬的看书速度滴)

posted @ 2008-10-16 22:35 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(80) | 评论 (0)编辑 收藏
这段程序就是画了一个三角形,想让键盘控制它来上下左右运动,但是无论怎么钦按钮他都不运动,非常郁闷,请求支援。谢谢
#include <stdlib.h>
#include 
<gl/glut.h>
#include 
<windows.h>
static GLfloat x=0.0;
static GLfloat y=0.0;
void init()
{
    glClearColor(
0.0,0.0,0.0,0.0);
}

void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(
0.2f,0.8f,0.6f);
    glBegin(GL_TRIANGLES);
        glVertex2f(
0.0+x,0.0+y);
        glVertex2f(
0.5+x,0.0+y);
        glVertex2f(
0.5+x,0.5+y);
    glEnd();
    glutSwapBuffers();
    glFlush();
}

void keyboard(unsigned char key,int x,int y)
{
    
switch(key)
    
{
    
case 'd':
    
case 'D':
        x
+=0.1;
        
if(x>0.5)
            x
=0.5;
        glutPostRedisplay();
        
break;
    
case 'a':
    
case 'A':
        x
-=0.1;
        
if(x<-1.0)
            x
=-1.0;
        glutPostRedisplay();
        
break;
    
case 'w':
    
case 'W':
        y
+=0.1;
        
if(y>0.5)
            y
=0.5;
        glutPostRedisplay();
        
break;
    
case 's':
    
case 'S':
        y
-=0.1;
        
if(y<-1.0)
            y
=-1.0;
        glutPostRedisplay();
        
break;
    
case 27:
        exit(
0);
        
break;
    
default:
        
break;
    }

}

void reshape(int w,int h)
{
    glViewport(
0,0,(GLsizei)w,(GLsizei)h);
}

int main(int argc,char *argv[])
{
    glutInit(
&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE
|GLUT_RGB);
    glutInitWindowSize(
500,500);
    glutInitWindowPosition(
100,100);
    glutCreateWindow(argv[
0]);
    init();
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutReshapeFunc(reshape);
    glutMainLoop();
    
return 0;
}
posted @ 2008-10-16 21:08 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(139) | 评论 (0)编辑 收藏
启示着一个问题我已经困扰我很久了。对于glPushMatrix和glPopMatrix我很想知道他们之间的代码是怎么执行的。比如 :
void display()
{
    GLdouble eqn[
4]={0.0,1.0,0.0,0.0};     //方程y=0
    GLdouble eqn2[4]={1.0,0.0,0.0,0.0};    //方程x=0
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(
1.0,1.0,1.0);
    glPushMatrix();
    glTranslatef(
0.0,0.0,-5.0);               //把当前矩阵移到(0.0,0.0,-5.0)处
    

    glClipPlane(GL_CLIP_PLANE0,eqn);
    glEnable(GL_CLIP_PLANE0);
    glClipPlane(GL_CLIP_PLANE1,eqn2);
    glEnable(GL_CLIP_PLANE1);

    glutWireSphere(1.0,20,16);
    glPopMatrix();
    glFlush();
}
为什么在球还没有画出来的时候就已经开始切割了?
glPushMatrix(),glPopMatrix()都是对当前矩阵进行操作,但是什么是当前矩阵?是不是跟物体本身所在坐标系有关系?
posted @ 2008-10-16 21:03 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(426) | 评论 (0)编辑 收藏
        不知道为啥刚写的没有了,写第二遍的东西就有点很乏味了。提纲挈领的交代一下吧。
         俺的伪码写完毕了,请大人们给点意见。
         PureMilk的代码俺看了,居然能看个差不多,但是不明白为什么主函数里没怎么调用子函数就能实现呢?感觉这就是几个函数的罗列啊。神奇,再请大人们指点下。
         进度表在参差的时候不能对齐。可能现在需要调整了。两套:一个是PureMilk按照自己那个代码的流程给他俩制定一个进度表,第二个就是他俩自己按照自己的思路制定各自的进度表。晚上公投~~
         另外隐约中感受到到了一个结了,需要解开。麦伊的半假,唉。不过,总之,大家要加油。一定加油~~
posted @ 2008-10-16 17:12 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(102) | 评论 (4)编辑 收藏
说得好像是一个西方的农场主,他家的一片树林里面生了虫子,于是他请了一批工人来帮他捉虫子。付给的工钱是根据他们捉虫子得多少。结果一段时间过去了,农场主惊奇的发现树林里的虫子非但没有减少,反而增加了。这就不得不提到工人们的“创意”,他们知道捉的虫子越多得到的工钱也就越多,至于虫子是从哪儿来的就不管了。于是他们把自己家的虫子也捉来也放到了树上,这样他们就可以在树上捉到更多的虫子从而得到更多的工钱。
(后面还有一段就省了,大家自由发挥想象吧)
posted @ 2008-10-15 21:42 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(105) | 评论 (1)编辑 收藏
仅列出标题
共15页: First 7 8 9 10 11 12 13 14 15 

<2008年10月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用链接

留言簿(6)

随笔分类(149)

随笔档案(150)

同道中人

搜索

  •  

积分与排名

  • 积分 - 44148
  • 排名 - 484

最新随笔

最新评论

阅读排行榜

评论排行榜