我想我還是太心急了,總靜不下心來慢慢的一行一行的讀代碼。也可能是太長了,以前最多也就寫一二百行。
又把出問題的那部分分成好幾個函數(shù)來寫,還是有問題,而且十分莫名的是我總覺得都是對的可是它就是錯的,崩潰了都。
怎么辦呢怎么辦呢怎么辦呢……好心急,進(jìn)展這么慢,又不得不調(diào)試,還有好多該干的事……
補充,就在寫完這篇日志的瞬間,顯示覆蓋問題解決,咔咔
posted @
2008-10-28 22:00 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(102) |
評論 (0) |
編輯 收藏
以前只知道,每隔固定一段時間都要重新畫一遍屏幕,屏幕里面很簡單,記分牌、瓶子及其內(nèi)部、醫(yī)生、幫助面板。就這么多而已,以前認(rèn)為要畫醫(yī)生、藥片、蟲子只要調(diào)用畫它們的函數(shù)就行了,誠然實際上也就是這樣,但具體函數(shù)里面是什么就不曉得了。今天的操作系統(tǒng)課上想到了這個問題。記得剛開始看OpenGL的時候遇到了一個叫點畫線和點畫面的問題,當(dāng)時只注意了一下點畫線,點畫面就被我一帶而過。今天想到要畫出具有真實感的醫(yī)生、藥片、蟲子不妨就采用點畫面來試一試。
自己的思路是這個樣子的,就拿畫藥丸的函數(shù)drawPill(/*參數(shù)*/)來說吧,首先有個static int pill_mask[](應(yīng)該是個全局的,免得每次畫的時候都要重新讀取圖像)數(shù)組里面存放了藥片各個點是否有顏色的信息,至于數(shù)組里面的信息是從哪里來的,當(dāng)然是從一幅圖中讀進(jìn)來的嘍。讀取圖像的函數(shù)可以在網(wǎng)上找到的嘛。每次調(diào)用本函數(shù)之前先設(shè)置好顏色信息,就是要畫什么顏色的藥丸,然后使用glEnable(GL_POLYGON_STIPPLE);來啟動點畫面模式,void glPolygonStipple(const GLubyte *pill_mask[]);來指定用什么樣的什么什么(不知道專業(yè)術(shù)語,想必這樣說大家也能理解),然后就可以畫多邊形了,當(dāng)然畫出來的就是一個非常可愛的藥丸啦,最后不要忘記關(guān)閉點畫面模式glDisable(GL_POLYGON_STIPPLE);啦,順便附上測試用的小圖一張(在畫圖程序里面隨便搞的,有點像蟲子了)。

下面就是我的那個頑皮的小程序了,還請各位哥哥姐姐弟弟妹妹看一看,順便改一改,先謝謝啦!
#include <stdio.h>
#include <stdlib.h>
#include <gl/glut.h>
static GLubyte pill_mask[50];
void read_pill()


{
FILE *fp;
fp = fopen("mask.jpg", "rb");
if( !fp )
exit(0);
if( fseek(fp, -(int)sizeof(pill_mask), SEEK_END) )
exit(0);
if( !fread(pill_mask, sizeof(pill_mask), 1, fp) )
exit(0);
fclose(fp);
}
void drawPill(void)


{
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_POLYGON_STIPPLE);
glPolygonStipple(pill_mask);
glRectf(-0.5,-0.5,0.5,0.5);
glDisable(GL_POLYGON_STIPPLE);
glFlush();
}
int main(int argc,char** argv)


{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(200,200);
glutInitWindowPosition(300,300);
glutCreateWindow("Mask");
glShadeModel(GL_FLAT);
glutDisplayFunc(drawPill);
glutMainLoop();
return 0;
}
沒有注釋的,還請多擔(dān)待
posted @
2008-10-28 21:17 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(248) |
評論 (0) |
編輯 收藏
計算機(jī)操作系統(tǒng)課又給我開了,悄悄地寫完了圖形老師的貝塞爾,思路應(yīng)該很清晰,最后滿懷期待地敲完了代碼,發(fā)現(xiàn)我的主函數(shù)是那么的漂亮,居然都是子函數(shù)拼成的,很有節(jié)奏感。但是調(diào)試之后沒出現(xiàn)任何想要看到的東西,還居然是一閃而過。由于很餓還有自認(rèn)為思路很清晰,這樣子是怎么也不會改好程序的,于是扔到了現(xiàn)在。
充實的計算機(jī)操作系統(tǒng)課我還把二維圖形三維化的思路給整理了出來,自認(rèn)為思路也是很清晰的,列出了我需要知道的知識。嗨,說白了就是知道應(yīng)該怎么走下去了,發(fā)現(xiàn)了一條自認(rèn)為走下去就會有成果的路。但是我覺得我的思路沒有什么特點,大家都應(yīng)該能想到的,但是為什么還沒有做出來,很可能這個思路就是不成熟的。唉…還有還有,在想多元函數(shù)的圖像表示的時候想到了多維,后來看圖形老師的講義,發(fā)現(xiàn)了分形幾何里面有多維。很神奇,但是回來搜啊搜的看啊看的都弄不明白,還百度百科還中國科普,講得還是那么云里霧里的。看來這確實是一門高深的知識。還有拓?fù)洌@個也沒弄明白,不小心看到了混沌學(xué),哈哈,一種歸來的感覺。
哦,看題目了沒有?拓?fù)涫鞘裁捶中斡质鞘裁矗繌V博的大牛們指導(dǎo)一下吧,糾結(jié)的數(shù)學(xué)問題。
posted @
2008-10-28 20:13 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(230) |
評論 (3) |
編輯 收藏
雖然飄姐姐說。。這些都可以由顯卡來解決。。但是還是覺得好帥。。可愛的作者~~~
package{
import flash.display.Sprite;
import flash.text.TextField;
import flash.events.MouseEvent;
import ascb.util.NumberUtilities;
public class NumbersAndMath extends Sprite{
var _die:Sprite;
var _value:uint;
public function NumbersAndMath( ){
_die= new Sprite( );
addChild(_die);
_die.addEventListener(MouseEvent.CLICK,rollDie);
rollDie(null);
}
private function rollDie(event:MouseEvent):void {
_value=NumberUtilities.random(1, 6);
_die.graphics.clear( );
_die.graphics.lineStyle( );
_die.graphics.beginFill(0xFFFFFF);
_die.graphics.drawRect(0,0,50,50);
_die.graphics.endFill( );
_die.graphics.beginFill(0x000000);
if(_value==1|| _value== 3|| _value== 5){
_die.graphics.drawCircle(25,25,4);
}
if(_value==2|| _value== 3|| _value== 4|| _value ==5 || _value== 6)
{
_die.graphics.drawCircle(11,11, 4);
_die.graphics.drawCircle(39,39,4);
}
if(_value==4|| _value== 5|| _value== 6){
_die.graphics.drawCircle(11,39,4);
_die.graphics.drawCircle(39,11, 4);
}
if(_value==6){
_die.graphics.drawCircle(11,25,4);
_die.graphics.drawCircle(39,25,4);
}
}
}
}
posted @
2008-10-27 22:07 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(214) |
評論 (0) |
編輯 收藏
最近都糊涂了我,從昨天晚上就一直認(rèn)為周一上午就兩節(jié)課,中午的時候倒在床上呼呼大睡,準(zhǔn)備睡醒之后就去實驗室搞搞明天圖形學(xué)的上機(jī),結(jié)果還是被殿下從睡夢中叫醒的,還以為是要去實驗室的。洗了個臉,出門不經(jīng)意間一瞟,竟然發(fā)現(xiàn)同班同學(xué)要去上課,大駭了一下,突然想到下午要上課的。隨匆匆忙忙去上課,好在就遲到了一小小會。
今天晚上本來是想繼續(xù)寫代碼的,誠然也寫了一點,但是突然發(fā)現(xiàn)思緒了,那函數(shù)要寫在哪個類里面都不知道了,想想還是再次系統(tǒng)地想一想吧。下面就是本次的一點小想法,以后大體上就會按照這個想法寫下去了。
瓶子(class Bottle)的功能:
1. 首先是每一關(guān),瓶子負(fù)責(zé)生成一個地圖(根據(jù)關(guān)數(shù)來生成地圖)這個當(dāng)然是由構(gòu)造函數(shù)來實現(xiàn)的啦Bottle(int level)。
2. 根據(jù)MVC原理(自己這樣理解的,錯了請指正),每當(dāng)藥片移動一下(一段固定的時間)就要重新繪制一片瓶子drawBottle(),格子的每一行每一列都遍歷一邊,根據(jù)各自的屬性把格子畫出來;還有就是把格子的邊框畫出來,包括記分牌以及醫(yī)生的形象。上面提到了固定時間,至于這個固定時間貌似是由Timer什么的來控制的,但是現(xiàn)在還不知道,暫且放一下吧。
3. 要想畫瓶子,瓶子是由空格(這個就不用額外畫了)、蟲子、藥片組成那就要有兩個函數(shù)drawMedicine(Color color[2],位置以及其他參數(shù)),drawBug(Color color,位置以及其他參數(shù))
4. 還要判斷一下當(dāng)前關(guān)是不是要掛掉了,如果掛掉了的話,重新初始化本關(guān),貌似不用否則了。die()至于什么時候調(diào)用還是一個問題,有待于進(jìn)一步考慮。咦,好像多此一舉,根本就不要用這么一個函數(shù)嗎,直接一個布爾性的變量不就搞定了嘛,真是笨啊我,那時開始,后來還是聰明了一點的嘛。
藥片(Class Medicine)的功能:
1. 首先要生成一個藥片吧Medicine(),默認(rèn)的是水平放置的,至于是什么顏色的那就隨機(jī)了,怎么個隨機(jī)法,老實說暫時我也不知道,等寫到的時候再說。這個寫的僅僅是個具有指導(dǎo)意義的那個什么什么東西的。
2. 要想移動藥片首先要判斷他是否可以移動,如果不可以的話那就算了。關(guān)鍵在于是否可以移動,那怎樣判斷呢?想想還是比較麻煩的,干脆還是分類討論一下吧,canMoveRight(參數(shù))、canMoveLeft(參數(shù))、canMoveDown(還是參數(shù))只要它還是活動藥片就會一直往下移動,直到它變成非活動藥片。至于什么時候變成非活動藥片那就要判斷一下了,即判斷它的下面是不是空的(EMPTY)。
3. 如果藥片可以移動藥片會一直往下移動的要判斷
4. 藥片是會旋轉(zhuǎn)的,并不是什么時候都可以旋轉(zhuǎn)
用OpenGL編程要有點OpenGL的味道吧
1. 首先是要有個初始化的函數(shù)吧,init()至于初始化什么到時候再說。
2. 其次還是要有個什么reshape()函數(shù)的,對這個函數(shù)還不是很明白(學(xué)了沒幾天OpenGL 就來編瑪麗醫(yī)生,我的命好苦啊!(天外來音:命苦也要好好寫))
3. display()這個函數(shù)是少不了了,負(fù)責(zé)來調(diào)用Bottle里面的drawBottle()函數(shù)。
4. keyboard()函數(shù)也是少不了啦,專門負(fù)責(zé)控制當(dāng)前活動藥片移動的方向。
5. 估計這個就是OpenGL里面最最重要的一個函數(shù)了,哈哈就是main函數(shù),main函數(shù)還是比較簡單的,對窗口進(jìn)行初始化一下然后就是調(diào)用各個已經(jīng)寫好了的函數(shù)啦。這就是瑪麗醫(yī)生的結(jié)尾了,看起來好簡單哦,但是我知道寫起來肯定不會有這么簡單,今天寫的是這么多字,估計到時候就要寫這么多行了。還沒寫過這么多行的一個大程序,好期待哦。加油王冠,加油everyone!
posted @
2008-10-27 21:34 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(133) |
評論 (0) |
編輯 收藏
看到了某大牛的留言,于是下了一個VC++2005,起初不會用,但是我英文是看得懂的,哦,我的金山詞霸是看得懂的,但是它還是錯誤。然后就百度了一個教程,發(fā)現(xiàn)下下來之后,純屬掛羊頭賣狗肉,然后按了F1,吭哧了吭哧英語之后發(fā)現(xiàn)原來不應(yīng)該直接Start Debugging的,應(yīng)該Start Without Debugging 的,神奇,其實還是不明白這個句子,什么叫開始Debug和不Debug就開始呢?要開始什么呢。神奇的英語。總之以后就這么辦就好了,順便說一句,我很喜歡這個界面,感覺很舒服,就是很舒服的感覺。
貼今天那個20面體,雖然都是書上的,但是確實很不一般,我不能明白這是怎么思考的,它的那一堆數(shù)組里面的東西是怎么出來的,而且又是憑什么這么排列的。又是一個神奇的東西。還是不貼了,出問題了。
哦,還有我那個傳說中的玩物喪志的RPGXP游戲,在懷疑中文版有Bug之后從官網(wǎng)下了日文版的和英文版的,發(fā)現(xiàn)日文對我來說是亂碼,英文對我來說是代碼。后來之前出現(xiàn)的問題就解決掉了,好像也不關(guān)漢化的事情。現(xiàn)在任務(wù)分配下去了,我做那個大圖,工程啊。最后說一句,這個在技術(shù)上就是喪志,但是它的戰(zhàn)略意義是深遠(yuǎn)的。
好像沒什么了,我得看看圖形學(xué)了,明天上機(jī)有作業(yè),啊哦。
對了,這兩天也在看OpenGL的書,我們的瑪麗用到它的地方基本上能定位在書的哪一頁了,下面就是算法了,哦,不是算法,是代碼。某一天我會撿起瑪麗的。乖哦~~好變態(tài)的“哦”。。
posted @
2008-10-27 21:06 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(104) |
評論 (1) |
編輯 收藏
調(diào)試過程中出現(xiàn)的問題以及解決辦法
1、一運行就RE
原因:忘記調(diào)用init()函數(shù),導(dǎo)致兩個類沒有實例化,直接讀取野指針。
解決:在主函數(shù)里調(diào)用init()函數(shù)。
2、發(fā)現(xiàn)每次生成的蟲子都是一樣的,主函數(shù)里雖然srand了,卻沒有達(dá)到初始化隨機(jī)種子的效果。
原因:我傻了,先init()才srand()。= =||
解決:先srand()再init()。
3、發(fā)現(xiàn)實際生成的蟲子數(shù)總比應(yīng)該生成的少那么一兩個。
原因:我只檢測了生成的隨機(jī)蟲子是否越界和四周是否構(gòu)成同顏色的三行或者三列,忘記檢測本位置是否原本有蟲子導(dǎo)致后生成的符合要求的蟲子將原生成的蟲子覆蓋。
解決:ok()函數(shù)里多加一條判斷語句
if ( b_grid_type[x][y] == WORM ) return false;
4、按向右鍵也是向左移動。
原因:case RIGHT:里面本應(yīng)++d_x寫成了--d_x;
解決:>.<
×××5、下落時RE。
還未解決嗚嗚嗚嗚嗚嗚
6、生成的藥丸總是青色的。
原因:drawCapsule()函數(shù)忘記_setColor()了。
解決:給drawCapsule()函數(shù)增加一個顏色參數(shù)并設(shè)置顏色。
7、按一下左會向左移動很多很多格。
還未解決嗚嗚嗚嗚嗚嗚
posted @
2008-10-27 21:01 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(139) |
評論 (0) |
編輯 收藏
今天布置了實驗室。。沒看書。。記過一次。。
posted @
2008-10-26 22:05 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(118) |
評論 (0) |
編輯 收藏
摘要: 它它它它它……我不說啥了,效果圖群里發(fā)過了,就是那么丑,還是RE。我有信心干掉它,靠我自己的力量,一點一點的。我是一棵自卑的菜,膠州產(chǎn)的三里河大白菜。
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1...
閱讀全文
posted @
2008-10-26 20:51 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(215) |
評論 (4) |
編輯 收藏
我什么時候才能吃上牛肉面啊~~敢問大牛們,當(dāng)年也吃面?
這是一個不健全的程序,由于我偉大的VC經(jīng)常罷工,這個程序調(diào)起來是那么的填堵,所以我就沒繼續(xù)調(diào)下去。這是書上畫20面體的程序,然后我加了頭和尾,當(dāng)然是加錯了,所以說不健全。貼上去,然后我就可以強(qiáng)行關(guān)掉VC了,以免丟失。
#define X .525731112119133606
#define Z .850650808352039932
#include<GL/glut.h>
void display()
{
static GLfloat vdata[12][3]={
{-X,0.0,Z},{X,0.0,Z},{-X,0.0,-Z},{X,0.0,-Z},
{0.0,Z,X},{0.0,Z,-X},{0.0,-Z,X},{0.0,-Z,-Z},
{Z,X,0.0},{-Z,X,0.0},{Z,-X,0.0},{-Z,-X,0.0}
};
static GLunit tindices[20][3]={
{1,4,0},{4,9,0},{4,5,9},{8,5,4},{1,8,4},
{1,10,8},{10,3,8},{8,3,5},{3,2,5},{3,7,2},
{3,10,7},{10,6,7},{6,11,7},{6,0,11},{6,1,0},
{10,1,6},{11,0,9},{2,11,9},{5,2,9},{11,2,7}
};
int i;
glBegin(GL_TRIANGLES);
for(i=0;i<20;i++)
{
glVertex3fv(&vdata[tindices[i][0]][0]);
glVertex3fv(&vdata[tindices[i][1]][0]);
glVertex3fv(&vdata[tindices[i][2]][0]);
}
glEnd();
glFlush();
}
void init()
{
glClearColor(0.0,0.0,0.0,0.0);
glShadeModel(GL_FLAT);
}
int main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_STINGLE|GLUT_RGB);
glutInitWindowSize(350,150);
glutCreatWindow(argv[0]);
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
posted @
2008-10-26 20:36 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(274) |
評論 (4) |
編輯 收藏