天地之灵学习小组
我们学习小组的OpenGL学习笔记 大家一定要互相折磨呀~~
posts - 150,  comments - 156,  trackbacks - 0
刚学OpenGL没有多久就写了一个小程序,希望画一个三角形然后用鼠标控制它上下左右移动,当时程序时写出来了的,但可惜的是无论你按什么键,三角形都无法移动,那个程序就搁浅了一段时间。下午的时候感觉是时候了,遂重新写了一遍。中间出现了许多显而易见的以至于我认为我从来都不会犯的小错误,很幸运的是这些都被我发现并改掉了。但这些个错误改掉之后,三角形依然无法移动。无奈之余去吃晚饭,大概是晚饭回来之后吧,又在网上逛了好多遍,查了老些资料。在一次偶然的运行下,我惊奇的发现了它竟然动了,高兴之余把左右下的键全给附上了事件(暂且称之为事件),然后再次运行竟然又惊奇的发现它又不动了。遂又花了老长的时间捣鼓这个程序,还是解决不了,只好请教婷婷。好长时间过去了,没有得到回复,就在我“心灰意冷”的时候,她给我检测出来了错误。原来我的全局变量取名x,y和keyboard(unsigned key ,int x ,int y)里面的x,y重复了。当时知道了这个错误之后我心里那个不好受啊,这可是低级错误啊,竟然犯了,以前写其它的程序的时候可都没犯过啊。但婷婷说这不是低级错误而是经验,想想也是哦,自己才写了多少代码,大家编写程序的时候遇到的程序何止千千万万,我才遇到几个啊。

这几乎是一下午加班个晚上的劳动成果,贴上来给大家分享分享。只是还发现一个问题,就是按下a键,它不是向左移动,而是向右移动,同样按d键而是向左移动。
#include <stdlib.h>
#include 
<gl/glut.h>
//#include <windows.h>
GLfloat i=0.0,j=0.0;
void init()
{
    glClearColor(
0.0,0.0,0.0,0.0);
    glColor3f(
0.2f,0.8f,0.6f);
}

void draw()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_TRIANGLES);
        glVertex2f(
0.0,0.0);
        glVertex2f(
0.5,0.0);
        glVertex2f(
0.5,0.5);        
    glEnd();
    glutSwapBuffers();
}

void display()
{
    glPushMatrix();
    glLoadIdentity();
    glTranslatef(i,j,
0);
    draw();
    glPopMatrix();
    glFlush();
}


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

}

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);
    glutMainLoop();
    
return 0;
}

好了就写到这里,继续OpenGL,继续玛丽医生。
posted @ 2008-10-23 21:07 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(176) | 评论 (2)编辑 收藏
今天没做什么和程序有关的,非常抱歉
去丫的十佳大学生,荣誉都是浮云,我要找准自己的位置,明确知道自己要的是什么,可不能被这些垃圾的破事儿停住脚步
posted @ 2008-10-22 22:19 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(127) | 评论 (1)编辑 收藏
瓶子中的药丸只有两种,一是当前活动药丸,可以通过当前活动指针来控制药片的移动;另一种就是已经成为网格一部分的药片。指向当前活动药片的指针,来控制当前活动药片的活动,如果没有指针指向的话,药片则成为网格的一部分如果没有指针指向的话。如果一堆药片下面的虫子消掉了,那么这一堆药片如何往下掉?说得很不明白,还是看看图吧!(如下图)如果那个蓝-绿色的药片落下来之后,则三个蓝色药丸和一个虫子消掉。因为虫子上面的那两个药丸已经是网格的一部分,没有当前活动指针的指向,他们怎么会往下落呢?


说的还是有点乱,请见谅。
posted @ 2008-10-22 21:45 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(171) | 评论 (2)编辑 收藏
      昨天停业整顿,嘿嘿,俺们这个团伙有了物质基础了,一个实验室~~很有味道的。于是昨天大家都忙着打扫卫生搬东西还有流汗了,于是出现了更新荒。今天好了,在逐渐迈向正规之后,效率就比之前要高了,不过更累了,大家加油哈。
      来这么早刷屏是因为还有任务呢,昨天突然被告知有个啥啥项目申报需要俺们做,于是乎,吭哧吭哧想方案,在日子就要翻页的时候,哈哈哈哈,PureMilk那个让人哈哈哈哈的方案让我哈哈哈哈了一阵子,个人感觉确实非常有意义,综合考虑,很合适。
      先这样,等PureMilk,等领导。写报告...
posted @ 2008-10-22 08:04 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(89) | 评论 (0)编辑 收藏


posted @ 2008-10-21 13:20 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(104) | 评论 (1)编辑 收藏
今天偷懒了下,才写了七十行代码,罪过。反对偷懒。
empty函数在bottle类里。

    
bool empty( int x, int y )
    {
        
if ( x<0 || x>=8 || y<0 || y>=16 ) return false;
        
if ( b_grid_type[y][x] == NOTHING ) return true;
        
return false;
    }
move函数在doctor类里。

    
void move( void )
    {
        
switch( d_direct )
        {
        
case DD_DOWN:
            
if ( d_state )
            {
                
if ( bottle->empty( d_x, d_y+1 ) )
                {
                    
++d_y;
                    
break;
                }
            }
            
else
            {
                
if ( bottle->empty( d_x, d_y+1 ) && bottle->empty( d_x+1, d_y+1 ) )
                {
                    
++d_y;
                    
break;
                }
            }
            
/*************这里没写完,预计是个while(true)的循环*********************/
            
break;
        
case DD_UP:
            
if ( d_state )
            {
                
if ( bottle->empty( d_x+1, d_y ) ) d_state = false;
                
else if ( bottle->empty( d_x-1, d_y ) ) { --d_x; d_state = false; }
            }
            
else
            {
                
if ( bottle->empty( d_x, d_y-1 ) )
                {
                    d_state 
= true;
                    Color tmp 
= d_color[0];
                    d_color[
0= d_color[1];
                    d_color[
1= tmp;
                }
                
else if ( bottle->empty( d_x+1, d_y-1 ) )
                {
                    
++d_x;
                    d_state 
= true;
                    Color tmp 
= d_color[0];
                    d_color[
0= d_color[1];
                    d_color[
1= tmp;
                }
            }
            
break;
        
case DD_LEFT:
            
if ( d_state && bottle->empty( d_x-1, d_y ) && bottle->empty( d_x-1, d_y-1 ) ) --d_x;
            
if ( !d_state && bottle->empty( d_x-1, d_y ) ) --d_x;
            
break;
        
case DD_RIGHT:
            
if ( d_state && bottle->empty( d_x+1, d_y ) && bottle->empty( d_x+1, d_y-1 ) ) --d_x;
            
if ( !d_state && bottle->empty( d_x+1, d_y ) ) --d_x;
            
break;
        
default:
            
break;
        }
    }
我在想猫说的话,一天四百行,一年就是12W行。我觉得,写玛丽医生这种代码,除了理顺思路的时候费点脑子以外,码代码的时候还是相当轻松的,比那些邪门算法轻松多了,一天四百行倒也不是没有可能呢。婷婷加油,毕业的时候一定要拿出至少十万行代码来。
posted @ 2008-10-20 23:57 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(111) | 评论 (1)编辑 收藏

继续画血精灵中~~片片说期待血精灵的玛丽医生呢~~画了两个呢~~还是喜欢可爱的1:2比例的大头娃娃~~比较可爱呢~~不过姐姐喜欢1:8的。。
加油画画ing~~被猫提问今天如何的时候~~感觉有点点心虚哈~~没看as呢。。今天~~看了OpenGL程序设计~图书馆借的书呢~~里面一开始就是读取3DS之类的东东
看着好恐怖额。。光源的设置啊~~之类的~~不过觉得还是蛮有用的呢~~~今天也是干劲十足呢~~加油画画~~

posted @ 2008-10-20 22:54 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(106) | 评论 (0)编辑 收藏

今天又一次听到了mvc这个词,虽然已经听过一次了,但这次的感觉还是蛮深的。大概的思想就是画图和控制分开,真的不错,画图函数只管每次把一个图画出来,而不管你是怎么移动药片的。至于具体的实现估计还要慢慢摸索。今天晚上要处理一下前一段时间累积下来的作业,至于玛丽医生嘛,我就尽量在睡觉的时候想一想,如果到时候忘掉的话我也就没办法了,只好抽空再补上了。

posted @ 2008-10-20 21:03 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(198) | 评论 (4)编辑 收藏
      英语老师:你这语法也太糟糕了吧。
      某帅男:报告~这是程序。
      来,开始敲~
      
#include<gl/glut.h>
#include
<stdio.h>
#include
<stdlib.h>
#include
<ctime>

static int LENGTH=20;
enum Color
{
BLACK,RED,GREEN,YELLOW
}
enum ConnectState
{
Not_Connected,Left_Connected,Right_Connected,Up_Connected,Down_Connected
}
enum GridState
{
EMPTY,CAPSULE,WARM
}
enum MarionState
{
WATE,ACT
}

class Diamonds
{
private:
    
int x,y;
    
int color;
    
int ConnectState;
public:
    
int getx()
    {
    
return x;
    }    
    
int gety()
    {
    
return y;
    }
    
int getColor()
    {
    color
=rand(RED,GREEN,YELLOW);
    
return color;
    }
    
int getConnectState()
    {
    
return ConnectState;
    }
};
class Warm
{
private:
    
int x,y;
    
int color=rand(RED,GREEN,YELLOW);
public:
    
int getx()
    {
    
return x;
    }
    
int gety()
    {    
    
return y;
    }
    
int getColor()
    {
    
return color;
    }
};
class Bottle   //Bottle 类没想明白呢,只知道开一个二围数组,每个里面都放上小色块。
{
    
private:
    
public:
};
int CapsuleMade()   //胶囊就是这样拼起来的,初始化了一下,但是感觉缺一些东西
{
Diamonds Capsule[
2];
Capsule[
0].x=Capsule[1].x-LENGTH;
Capsule[
0].ConnectState=Right_Connected;
Capsule[
1].ConnectState=Left_Connected;

}

今天的脑细胞已经耗完了,等明天补充吧~~
posted @ 2008-10-20 20:44 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(121) | 评论 (2)编辑 收藏
      今天头疼了,这说明我思考了。不过也有可能是因为没睡饱。早晨按计划三点睡得,因为要学OpenGL,嗯还有要体验真正的宵夜。不过,10点的时候就想睡了,但是为了泡面和我准备好了的锅,熬啊熬得熬到了3点,就睡了。早晨起来后发现猫7点的回复,看了后,哈哈哈哈。来,写伪码~~
      呃...刚才灰人去了,今天还是写思路吧。
      按照猫提供的思路,我需要做三件事情。建立模型对象、完成绘图函数、建立模型与输入之间以及模型和模型之间联系。好,三个自然段的段意写好了。
      

        建立模型对象:初级的不修边幅的玛丽医生他就只需要瓶子(画成胃更合适貌似)、药丸、虫子、玛丽医生四个模型就好了。瓶子和玛丽医生就是位图而已(我是这么理解的,或者瓶子内部大有文章),主要的就是药丸和虫子了,这里说主要是因为它们与后面的输入、时间和彼此都有交互,当然这就是游戏的最基本的动作。重点想这两个。药丸分两部分,经某同学和某同学分析它不管怎么旋转也就四种可能,只要记录一个点的坐标这个形状就有了,再随机涂上色,这个药丸就有了。但是药丸的两部分毕竟是两部分,可以分离的,难道分成两块来写,然后再虚拟拼接起来?看某同学和某同学的程序,貌似不是这个样子的。问了下某同学他是拼装的意思,两块拼成一个数组。嗯,有道理。呃...刚才又走思去了,那帮人跳来跳去的。也就是开一个数组,两个就够了,一个装一个彩色小格子,另一个装另一个彩色小格子。然小格子就是一个模型对象。哇哦,神奇。这样有四个大模块,其中药丸是由两个小模块构成的。哦也。那就先构建小模块。小模块它要有三个属性,颜色,某固定点坐标值,还有一个用来标志有没有接触的东西。猫在讲东西,于是这么长时间过去了。继续。呃...我真想换行~那就换吧。
         药丸大模块,它就是一个数组。这样就有编号了,嗯,这就是它的属性。
         虫子:颜色、坐标值,感觉这东西和咱的小模块没多大区别啊,之前想写成一样的呢,但是小模块是动的,虽然不是直接控制小模块而是通过检测动作来重新画图的,但是还是不一样的。不能归为一类。相似不全等。 神啊~群里边又活跃了。断网了要,明天补齐~~
         这是耗时最长的一片随笔。。  
         见面&会刚结束,思路又一次明朗了。速度地先写一段路上的交流。
         怎么显示啊?
         不是有glutDisplayFunc()吗?
         那个参数是一个函数啊。
         不就是写一个display()吗?display()参数也是一个函数,就是draw()了啊,draw()参数就是画方块的那个函数了,画方块的那个函数的参数就是坐标和颜色了,坐标和颜色就是某模块的属性了。
         大人们看一下是不是这个道理。嗯,继续昨天的。cout<<"这里就换行了"<<endl;
         根据刚才的会议精神,这个瓶子也不是简单的东西,它就是一个数组,形象之后就是一堆格子,初始化完毕的格子。属性貌似没有吧,哦,有的,需要有颜色,初始是黑,然后把药丸的小模块的颜色给他。
         还有谁?玛丽医生?这个不算了吧,就是导两个位图进去,开个数组存他的两个状态。
         

         然后是绘图函数。上面说过了,就是draw(),过一个timer就从瓶子的1行1列开始扫描着画~~呃...怎么就这么一句。


         模型和输入之间的联系的建立:需要按键检测了,这个也有的,然后它的参数就是咱自己写的key(),这个就是用于改变坐标的。还需要把timer看成输入,猫说的。那也写进key()里。模型和模型之间的联系的建立:药丸之间接触没接触,颜色怎么样。药丸和瓶子壁之间接触没接触。药丸和虫子之间接触没接触,颜色怎么样。嗯。就这些了吧。哈哈哈哈,完篇~~看情况写代码。
posted @ 2008-10-19 22:49 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(164) | 评论 (1)编辑 收藏
仅列出标题
共15页: First 7 8 9 10 11 12 13 14 15 

<2008年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

常用链接

留言簿(6)

随笔分类(149)

随笔档案(150)

同道中人

搜索

  •  

积分与排名

  • 积分 - 46045
  • 排名 - 476

最新随笔

最新评论

阅读排行榜

评论排行榜