剛學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 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(182) |
評論 (2) |
編輯 收藏
今天沒做什么和程序有關的,非常抱歉
去丫的十佳大學生,榮譽都是浮云,我要找準自己的位置,明確知道自己要的是什么,可不能被這些垃圾的破事兒停住腳步
posted @
2008-10-22 22:19 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(133) |
評論 (1) |
編輯 收藏
瓶子中的藥丸只有兩種,一是當前活動藥丸,可以通過當前活動指針來控制藥片的移動;另一種就是已經成為網格一部分的藥片。指向當前活動藥片的指針,來控制當前活動藥片的活動,如果沒有指針指向的話,藥片則成為網格的一部分如果沒有指針指向的話。如果一堆藥片下面的蟲子消掉了,那么這一堆藥片如何往下掉?說得很不明白,還是看看圖吧!(如下圖)如果那個藍-綠色的藥片落下來之后,則三個藍色藥丸和一個蟲子消掉。因為蟲子上面的那兩個藥丸已經是網格的一部分,沒有當前活動指針的指向,他們怎么會往下落呢?

說的還是有點亂,請見諒。
posted @
2008-10-22 21:45 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(183) |
評論 (2) |
編輯 收藏
昨天停業整頓,嘿嘿,俺們這個團伙有了物質基礎了,一個實驗室~~很有味道的。于是昨天大家都忙著打掃衛生搬東西還有流汗了,于是出現了更新荒。今天好了,在逐漸邁向正規之后,效率就比之前要高了,不過更累了,大家加油哈。
來這么早刷屏是因為還有任務呢,昨天突然被告知有個啥啥項目申報需要俺們做,于是乎,吭哧吭哧想方案,在日子就要翻頁的時候,哈哈哈哈,PureMilk那個讓人哈哈哈哈的方案讓我哈哈哈哈了一陣子,個人感覺確實非常有意義,綜合考慮,很合適。
先這樣,等PureMilk,等領導。寫報告...
posted @
2008-10-22 08:04 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(96) |
評論 (0) |
編輯 收藏


posted @
2008-10-21 13:20 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(111) |
評論 (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 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(117) |
評論 (1) |
編輯 收藏
繼續畫血精靈中~~片片說期待血精靈的瑪麗醫生呢~~畫了兩個呢~~還是喜歡可愛的1:2比例的大頭娃娃~~比較可愛呢~~不過姐姐喜歡1:8的。。
加油畫畫ing~~被貓提問今天如何的時候~~感覺有點點心虛哈~~沒看as呢。。今天~~看了OpenGL程序設計~圖書館借的書呢~~里面一開始就是讀取3DS之類的東東
看著好恐怖額。。光源的設置啊~~之類的~~不過覺得還是蠻有用的呢~~~今天也是干勁十足呢~~加油畫畫~~
posted @
2008-10-20 22:54 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(113) |
評論 (0) |
編輯 收藏
今天又一次聽到了mvc這個詞,雖然已經聽過一次了,但這次的感覺還是蠻深的。大概的思想就是畫圖和控制分開,真的不錯,畫圖函數只管每次把一個圖畫出來,而不管你是怎么移動藥片的。至于具體的實現估計還要慢慢摸索。今天晚上要處理一下前一段時間累積下來的作業,至于瑪麗醫生嘛,我就盡量在睡覺的時候想一想,如果到時候忘掉的話我也就沒辦法了,只好抽空再補上了。
posted @
2008-10-20 21:03 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(209) |
評論 (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 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(127) |
評論 (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 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(172) |
評論 (1) |
編輯 收藏