天地之灵学习小组
我们学习小组的OpenGL学习笔记 大家一定要互相折磨呀~~
posts - 150,  comments - 156,  trackbacks - 0
我想我还是太心急了,总静不下心来慢慢的一行一行的读代码。也可能是太长了,以前最多也就写一二百行。
又把出问题的那部分分成好几个函数来写,还是有问题,而且十分莫名的是我总觉得都是对的可是它就是错的,崩溃了都。
怎么办呢怎么办呢怎么办呢……好心急,进展这么慢,又不得不调试,还有好多该干的事……

补充,就在写完这篇日志的瞬间,显示覆盖问题解决,咔咔
posted @ 2008-10-28 22:00 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(99) | 评论 (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 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(244) | 评论 (0)编辑 收藏
       计算机操作系统课又给我开了,悄悄地写完了图形老师的贝塞尔,思路应该很清晰,最后满怀期待地敲完了代码,发现我的主函数是那么的漂亮,居然都是子函数拼成的,很有节奏感。但是调试之后没出现任何想要看到的东西,还居然是一闪而过。由于很饿还有自认为思路很清晰,这样子是怎么也不会改好程序的,于是扔到了现在。
         
充实的计算机操作系统课我还把二维图形三维化的思路给整理了出来,自认为思路也是很清晰的,列出了我需要知道的知识。嗨,说白了就是知道应该怎么走下去了,发现了一条自认为走下去就会有成果的路。但是我觉得我的思路没有什么特点,大家都应该能想到的,但是为什么还没有做出来,很可能这个思路就是不成熟的。唉还有还有,在想多元函数的图像表示的时候想到了多维,后来看图形老师的讲义,发现了分形几何里面有多维。很神奇,但是回来搜啊搜的看啊看的都弄不明白,还百度百科还中国科普,讲得还是那么云里雾里的。看来这确实是一门高深的知识。还有拓扑,这个也没弄明白,不小心看到了混沌学,哈哈,一种归来的感觉。
         
哦,看题目了没有?拓扑是什么分形又是什么?广博的大牛们指导一下吧,纠结的数学问题。
posted @ 2008-10-28 20:13 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(222) | 评论 (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 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(192) | 评论 (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 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(122) | 评论 (0)编辑 收藏
  看到了某大牛的留言,于是下了一个VC++2005,起初不会用,但是我英文是看得懂的,哦,我的金山词霸是看得懂的,但是它还是错误。然后就百度了一个教程,发现下下来之后,纯属挂羊头卖狗肉,然后按了F1,吭哧了吭哧英语之后发现原来不应该直接Start Debugging的,应该Start Without Debugging 的,神奇,其实还是不明白这个句子,什么叫开始Debug和不Debug就开始呢?要开始什么呢。神奇的英语。总之以后就这么办就好了,顺便说一句,我很喜欢这个界面,感觉很舒服,就是很舒服的感觉。

       贴今天那个20面体,虽然都是书上的,但是确实很不一般,我不能明白这是怎么思考的,它的那一堆数组里面的东西是怎么出来的,而且又是凭什么这么排列的。又是一个神奇的东西。还是不贴了,出问题了。

       哦,还有我那个传说中的玩物丧志的RPGXP游戏,在怀疑中文版有Bug之后从官网下了日文版的和英文版的,发现日文对我来说是乱码,英文对我来说是代码。后来之前出现的问题就解决掉了,好像也不关汉化的事情。现在任务分配下去了,我做那个大图,工程啊。最后说一句,这个在技术上就是丧志,但是它的战略意义是深远的。

       好像没什么了,我得看看图形学了,明天上机有作业,啊哦。

       对了,这两天也在看OpenGL的书,我们的玛丽用到它的地方基本上能定位在书的哪一页了,下面就是算法了,哦,不是算法,是代码。某一天我会捡起玛丽的。乖哦~~好变态的“哦”。。

posted @ 2008-10-27 21:06 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(98) | 评论 (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 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(134) | 评论 (0)编辑 收藏
今天布置了实验室。。没看书。。记过一次。。
posted @ 2008-10-26 22:05 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(115) | 评论 (0)编辑 收藏
     摘要: 它它它它它……我不说啥了,效果图群里发过了,就是那么丑,还是RE。我有信心干掉它,靠我自己的力量,一点一点的。我是一棵自卑的菜,胶州产的三里河大白菜。 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->  1...  阅读全文
posted @ 2008-10-26 20:51 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(212) | 评论 (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 正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(266) | 评论 (4)编辑 收藏
仅列出标题
共15页: First 5 6 7 8 9 10 11 12 13 Last 

<2011年6月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

常用链接

留言簿(6)

随笔分类(149)

随笔档案(150)

同道中人

搜索

  •  

积分与排名

  • 积分 - 46045
  • 排名 - 476

最新随笔

最新评论

阅读排行榜

评论排行榜