我想我還是太心急了,總靜不下心來慢慢的一行一行的讀代碼。也可能是太長了,以前最多也就寫一二百行。
又把出問題的那部分分成好幾個函數來寫,還是有問題,而且十分莫名的是我總覺得都是對的可是它就是錯的,崩潰了都。
怎么辦呢怎么辦呢怎么辦呢……好心急,進展這么慢,又不得不調試,還有好多該干的事……
補充,就在寫完這篇日志的瞬間,顯示覆蓋問題解決,咔咔
posted @
2008-10-28 22:00 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(109) |
評論 (0) |
編輯 收藏
以前只知道,每隔固定一段時間都要重新畫一遍屏幕,屏幕里面很簡單,記分牌、瓶子及其內部、醫生、幫助面板。就這么多而已,以前認為要畫醫生、藥片、蟲子只要調用畫它們的函數就行了,誠然實際上也就是這樣,但具體函數里面是什么就不曉得了。今天的操作系統課上想到了這個問題。記得剛開始看OpenGL的時候遇到了一個叫點畫線和點畫面的問題,當時只注意了一下點畫線,點畫面就被我一帶而過。今天想到要畫出具有真實感的醫生、藥片、蟲子不妨就采用點畫面來試一試。
自己的思路是這個樣子的,就拿畫藥丸的函數drawPill(/*參數*/)來說吧,首先有個static int pill_mask[](應該是個全局的,免得每次畫的時候都要重新讀取圖像)數組里面存放了藥片各個點是否有顏色的信息,至于數組里面的信息是從哪里來的,當然是從一幅圖中讀進來的嘍。讀取圖像的函數可以在網上找到的嘛。每次調用本函數之前先設置好顏色信息,就是要畫什么顏色的藥丸,然后使用glEnable(GL_POLYGON_STIPPLE);來啟動點畫面模式,void glPolygonStipple(const GLubyte *pill_mask[]);來指定用什么樣的什么什么(不知道專業術語,想必這樣說大家也能理解),然后就可以畫多邊形了,當然畫出來的就是一個非常可愛的藥丸啦,最后不要忘記關閉點畫面模式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;
}
沒有注釋的,還請多擔待
posted @
2008-10-28 21:17 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(254) |
評論 (0) |
編輯 收藏
計算機操作系統課又給我開了,悄悄地寫完了圖形老師的貝塞爾,思路應該很清晰,最后滿懷期待地敲完了代碼,發現我的主函數是那么的漂亮,居然都是子函數拼成的,很有節奏感。但是調試之后沒出現任何想要看到的東西,還居然是一閃而過。由于很餓還有自認為思路很清晰,這樣子是怎么也不會改好程序的,于是扔到了現在。
充實的計算機操作系統課我還把二維圖形三維化的思路給整理了出來,自認為思路也是很清晰的,列出了我需要知道的知識。嗨,說白了就是知道應該怎么走下去了,發現了一條自認為走下去就會有成果的路。但是我覺得我的思路沒有什么特點,大家都應該能想到的,但是為什么還沒有做出來,很可能這個思路就是不成熟的。唉…還有還有,在想多元函數的圖像表示的時候想到了多維,后來看圖形老師的講義,發現了分形幾何里面有多維。很神奇,但是回來搜啊搜的看啊看的都弄不明白,還百度百科還中國科普,講得還是那么云里霧里的。看來這確實是一門高深的知識。還有拓撲,這個也沒弄明白,不小心看到了混沌學,哈哈,一種歸來的感覺。
哦,看題目了沒有?拓撲是什么分形又是什么?廣博的大牛們指導一下吧,糾結的數學問題。
posted @
2008-10-28 20:13 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(237) |
評論 (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 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(219) |
評論 (0) |
編輯 收藏
最近都糊涂了我,從昨天晚上就一直認為周一上午就兩節課,中午的時候倒在床上呼呼大睡,準備睡醒之后就去實驗室搞搞明天圖形學的上機,結果還是被殿下從睡夢中叫醒的,還以為是要去實驗室的。洗了個臉,出門不經意間一瞟,竟然發現同班同學要去上課,大駭了一下,突然想到下午要上課的。隨匆匆忙忙去上課,好在就遲到了一小小會。
今天晚上本來是想繼續寫代碼的,誠然也寫了一點,但是突然發現思緒了,那函數要寫在哪個類里面都不知道了,想想還是再次系統地想一想吧。下面就是本次的一點小想法,以后大體上就會按照這個想法寫下去了。
瓶子(class Bottle)的功能:
1. 首先是每一關,瓶子負責生成一個地圖(根據關數來生成地圖)這個當然是由構造函數來實現的啦Bottle(int level)。
2. 根據MVC原理(自己這樣理解的,錯了請指正),每當藥片移動一下(一段固定的時間)就要重新繪制一片瓶子drawBottle(),格子的每一行每一列都遍歷一邊,根據各自的屬性把格子畫出來;還有就是把格子的邊框畫出來,包括記分牌以及醫生的形象。上面提到了固定時間,至于這個固定時間貌似是由Timer什么的來控制的,但是現在還不知道,暫且放一下吧。
3. 要想畫瓶子,瓶子是由空格(這個就不用額外畫了)、蟲子、藥片組成那就要有兩個函數drawMedicine(Color color[2],位置以及其他參數),drawBug(Color color,位置以及其他參數)
4. 還要判斷一下當前關是不是要掛掉了,如果掛掉了的話,重新初始化本關,貌似不用否則了。die()至于什么時候調用還是一個問題,有待于進一步考慮。咦,好像多此一舉,根本就不要用這么一個函數嗎,直接一個布爾性的變量不就搞定了嘛,真是笨啊我,那時開始,后來還是聰明了一點的嘛。
藥片(Class Medicine)的功能:
1. 首先要生成一個藥片吧Medicine(),默認的是水平放置的,至于是什么顏色的那就隨機了,怎么個隨機法,老實說暫時我也不知道,等寫到的時候再說。這個寫的僅僅是個具有指導意義的那個什么什么東西的。
2. 要想移動藥片首先要判斷他是否可以移動,如果不可以的話那就算了。關鍵在于是否可以移動,那怎樣判斷呢?想想還是比較麻煩的,干脆還是分類討論一下吧,canMoveRight(參數)、canMoveLeft(參數)、canMoveDown(還是參數)只要它還是活動藥片就會一直往下移動,直到它變成非活動藥片。至于什么時候變成非活動藥片那就要判斷一下了,即判斷它的下面是不是空的(EMPTY)。
3. 如果藥片可以移動藥片會一直往下移動的要判斷
4. 藥片是會旋轉的,并不是什么時候都可以旋轉
用OpenGL編程要有點OpenGL的味道吧
1. 首先是要有個初始化的函數吧,init()至于初始化什么到時候再說。
2. 其次還是要有個什么reshape()函數的,對這個函數還不是很明白(學了沒幾天OpenGL 就來編瑪麗醫生,我的命好苦啊!(天外來音:命苦也要好好寫))
3. display()這個函數是少不了了,負責來調用Bottle里面的drawBottle()函數。
4. keyboard()函數也是少不了啦,專門負責控制當前活動藥片移動的方向。
5. 估計這個就是OpenGL里面最最重要的一個函數了,哈哈就是main函數,main函數還是比較簡單的,對窗口進行初始化一下然后就是調用各個已經寫好了的函數啦。這就是瑪麗醫生的結尾了,看起來好簡單哦,但是我知道寫起來肯定不會有這么簡單,今天寫的是這么多字,估計到時候就要寫這么多行了。還沒寫過這么多行的一個大程序,好期待哦。加油王冠,加油everyone!
posted @
2008-10-27 21:34 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(138) |
評論 (0) |
編輯 收藏
看到了某大牛的留言,于是下了一個VC++2005,起初不會用,但是我英文是看得懂的,哦,我的金山詞霸是看得懂的,但是它還是錯誤。然后就百度了一個教程,發現下下來之后,純屬掛羊頭賣狗肉,然后按了F1,吭哧了吭哧英語之后發現原來不應該直接Start Debugging的,應該Start Without Debugging 的,神奇,其實還是不明白這個句子,什么叫開始Debug和不Debug就開始呢?要開始什么呢。神奇的英語。總之以后就這么辦就好了,順便說一句,我很喜歡這個界面,感覺很舒服,就是很舒服的感覺。
貼今天那個20面體,雖然都是書上的,但是確實很不一般,我不能明白這是怎么思考的,它的那一堆數組里面的東西是怎么出來的,而且又是憑什么這么排列的。又是一個神奇的東西。還是不貼了,出問題了。
哦,還有我那個傳說中的玩物喪志的RPGXP游戲,在懷疑中文版有Bug之后從官網下了日文版的和英文版的,發現日文對我來說是亂碼,英文對我來說是代碼。后來之前出現的問題就解決掉了,好像也不關漢化的事情。現在任務分配下去了,我做那個大圖,工程啊。最后說一句,這個在技術上就是喪志,但是它的戰略意義是深遠的。
好像沒什么了,我得看看圖形學了,明天上機有作業,啊哦。
對了,這兩天也在看OpenGL的書,我們的瑪麗用到它的地方基本上能定位在書的哪一頁了,下面就是算法了,哦,不是算法,是代碼。某一天我會撿起瑪麗的。乖哦~~好變態的“哦”。。
posted @
2008-10-27 21:06 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(109) |
評論 (1) |
編輯 收藏
調試過程中出現的問題以及解決辦法
1、一運行就RE
原因:忘記調用init()函數,導致兩個類沒有實例化,直接讀取野指針。
解決:在主函數里調用init()函數。
2、發現每次生成的蟲子都是一樣的,主函數里雖然srand了,卻沒有達到初始化隨機種子的效果。
原因:我傻了,先init()才srand()。= =||
解決:先srand()再init()。
3、發現實際生成的蟲子數總比應該生成的少那么一兩個。
原因:我只檢測了生成的隨機蟲子是否越界和四周是否構成同顏色的三行或者三列,忘記檢測本位置是否原本有蟲子導致后生成的符合要求的蟲子將原生成的蟲子覆蓋。
解決:ok()函數里多加一條判斷語句
if ( b_grid_type[x][y] == WORM ) return false;
4、按向右鍵也是向左移動。
原因:case RIGHT:里面本應++d_x寫成了--d_x;
解決:>.<
×××5、下落時RE。
還未解決嗚嗚嗚嗚嗚嗚
6、生成的藥丸總是青色的。
原因:drawCapsule()函數忘記_setColor()了。
解決:給drawCapsule()函數增加一個顏色參數并設置顏色。
7、按一下左會向左移動很多很多格。
還未解決嗚嗚嗚嗚嗚嗚
posted @
2008-10-27 21:01 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(145) |
評論 (0) |
編輯 收藏
今天布置了實驗室。。沒看書。。記過一次。。
posted @
2008-10-26 22:05 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(119) |
評論 (0) |
編輯 收藏
摘要: 它它它它它……我不說啥了,效果圖群里發過了,就是那么丑,還是RE。我有信心干掉它,靠我自己的力量,一點一點的。我是一棵自卑的菜,膠州產的三里河大白菜。
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1...
閱讀全文
posted @
2008-10-26 20:51 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(223) |
評論 (4) |
編輯 收藏
我什么時候才能吃上牛肉面啊~~敢問大牛們,當年也吃面?
這是一個不健全的程序,由于我偉大的VC經常罷工,這個程序調起來是那么的填堵,所以我就沒繼續調下去。這是書上畫20面體的程序,然后我加了頭和尾,當然是加錯了,所以說不健全。貼上去,然后我就可以強行關掉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 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(282) |
評論 (4) |
編輯 收藏