编程C,C ++,Java,PHP,Ruby,图灵,VB
计算机科学加拿大 
编程C,C ++,Java,PHP,Ruby,图灵,VB  

用户名:   Password: 
 登记登记   
 粒子Syestem.
指数 -> 编程,C. -> C帮助
查看上一个主题 可打印的版本下载主题订阅本主题私人信息刷新页面 查看下一个主题
作者 信息
TallGuy.




邮政发布: 星期五2011年11月1日下午1:32  帖子主题:粒子系统

大家好,

自从我去过论坛以来,我现在正在做我现在正在做的事情C !!!!!!!!!!!!!! (大学敌人Compsci Engineering)

我的问题:
我需要实现一个链接的列表并创建一个具有我设计的特征的粒子syestem,有没有任何教程,我需要OpenGl运行它,我不知道如何从我的教授的指示开始,可以任何人 把我指着正确的方向? 不为我做......



02_cst8234_particles_v1.0.pdf.
 Description:
我的指示

下载
 Filename:  02_cst8234_particles_v1.0.pdf.
 Filesize:  160.13 KB
 Downloaded:  1823 Time(s)

赞助
赞助
赞助
赞助
魔鬼




邮政发布: 星期五2011年11月2日下午2:30  帖子主题:Re:粒子Syestem

首先,作业仅说“OpenGL中的前端将发布,因此您可以可视化您的粒子系统”。 您不需要编写任何OpenGL。

此任务基本上是“用一些”粒子“糖在上面写出一个链接列表。从粒子结构开始(给定)并以给出的顺序实现函数。

第一个函数pictrib_init非常简单:只需填充给定的粒子结构中的值。目前,只需使用一些明智的默认值:使您的粒子变为红色,速度和方向(0,0,0)。确保“下一个”指针为null。

第二个函数,polarer_add是您开始处理链接列表实现的位置。您被授予列表的头部,并且您希望将新粒子添加到列表的末尾。您将有三个主要步骤:

1.使用“下一个”指针找到现有粒子列表的末尾。
2.使用Progress_Init方法创建新粒子。
3.将列表最后一部分的“下一个”指针设置为指向您的新粒子。


我会把休息留给你;如果您稍后需要更多帮助,请在此处发布。
TallGuy.




邮政发布: 星期四2011年11月10日2:01 PM  帖子主题:Re:粒子Syestem

我有一个问题,让所有粒子出现在,如果我把常数放在10℃,我只看到了大约8左右?我采取透明颜色和每个x,y是兰特,所以没有应该骑在一起。
代码:

#包括<stdio.h>
#包括<stdlib.h>
#包括<time.h>

#define delta_life_span 1
#define dflt_init_num_particles 1000
#define重力3.

结构颜色{
        float r;//red
        float g;//green
        float b;//blue
        float a;//alpha
};

typedef结构颜色color4;

结构矢量{
        float x;
        float y;
        float z;
};

typedef结构矢量point3d;
typedef结构矢量矢量图3d;

结构粒子{
        Color4 col;
        Point3D pos;
        Vector3D dir;
        Vector3D spd;
        int lifespan;
        int size;
       结构粒子*下一个;
};

int particle_init.(struct particle* p);
int particle_add.(结构粒子**头);
int particle_remove.(struct particle* p);
int particle_destroy(结构粒子**头);
int progress_update.(结构粒子**头);

int particle_init.(struct particle* p){
       float x,y,z; //位置XYZ变量
       float sx,sy,sz; //速度
       Float DX,Dy,DZ; //方向
       //屏幕为600乘600
        //srand(time(NULL));
        x = (rand () % (1)+1); // poistion ///弄乱了这一点
        y = (rand () % (1)+1);//poistion//ditto
        z = (rand () % (1)+1);//poistion//ditto

        sx= (rand () % (2)+1);//speed
        sy= (rand () % (2)+1);//speed
        sz= 0;

        dx= (rand () % (3)-1);//direction
        dy= (rand () % (3)-1);
        /*while(dx ==0||dy == 0){
                dx= (rand () % (2)-1);
                dy= (rand () % (2)-1);
        }*/
        dz= 0;//(rand () % (2+1)+1)-2;
        p->col=(struct color){(rand () % (1+1) +1) -1,(rand () % (1+1) +1) -1, (rand () % (1+1) +1) -1, 1};//color
        p->pos=(struct vector){x,y,z};//postion
        p->spd=(struct vector){sx,sy,sz};//speed
        p->dir=(struct vector){dx,dy,dz}; //方向
        p->size = 5;//sze
        p->lifespan = rand () % (20+1)+1;//lifespa
}

int particle_add.(结构粒子**头){
       结构粒子* newnode = malloc(sizeof(struct particle));
        newnode->next = *head;
        particle_init(newnode);
        *head = newnode;
        return 0;
}

int particle_remove.(struct particle* p){

}

int particle_destroy(结构粒子**头){

}

int progress_update.(结构粒子**头){
       结构粒子* p = *头;
        while(p != NULL){
        p->LifeSpan - = Delta_Life_span;
        p->pos.x += (p->spd.x * p->dir.x);
        if (p->pos.x > 100 || p->pos.x < -100){//boundry checker
                p->dir.x *= -1;
        }       
        p->pos.y += (p->spd.y * p->dir.y);
        if (p->pos.y > 100 || p->pos.y < -100){
                p->dir.y *= -1;
        }       
        p->pos.z += (p->spd.z * p->dir.z);     

        p = p->next;
        }
}


我有一种函数的感觉

代码:

int progress_update.(结构粒子**头){
       结构粒子* p = *头;
        while(p != NULL){
        p->LifeSpan - = Delta_Life_span;
        p->pos.x += (p->spd.x * p->dir.x);
        if (p->pos.x > 100 || p->pos.x < -100){//boundry checker
                p->dir.x *= -1;
        }       
        p->pos.y += (p->spd.y * p->dir.y);
        if (p->pos.y > 100 || p->pos.y < -100){
                p->dir.y *= -1;
        }       
        p->pos.z += (p->spd.z * p->dir.z);     

        p = p->next;
        }
but am unsure

我将附上我们使用的父类(教师代码)



stemistles_opengl.c.
 Description:
用OpenGL运行

下载
 Filename:  particles_OpenGL.c
 Filesize:  9.27 KB
 Downloaded:  268 Time(s)

魔鬼




邮政发布: 星期四2011年11月10日下午2:50  帖子主题:Re:粒子Syestem

嗯...尝试使用设置为(0,0,0)的速度运行代码并确切地计算该号码。我怀疑你会发现有9个(不是8,而不是10)。

我说的是,我很确定我在提供的OpenGL代码中找到了一个错误。即使您不知道OpenGL

除了它可以格式化和评论之外,我没有看到你的代码的问题并评论得更好。
TallGuy.




邮政发布: 星期四2011年11月10日3:43 PM  帖子主题:Re:粒子Syestem

但如果你甚至把1000个粒子放在,只有大约20个展示
魔鬼




邮政发布: 2011年11月10日星期四下午5:15  帖子主题:Re:粒子Syestem

顺便说一下,请更确切地了解你所看到的内容。细节很好!

好的。显然,我们需要回到基础来解决这个问题。有一些现实可能的问题:

1.列表实施错误。

由于某种原因,粒子不可见,尽管它们在列表中。

让我们假设#1没有发生的那一刻,因为你的实施看起来很合理。所以我们暂时调查#2。首先,我们想要消除事情的麻烦,所以暂时评论progress_update()的内容。其次,我们要确保以可识别的模式出现,因此将粒子_init()更改为使用随机数来使用越来越多的数字。例如,让我们从(0,0,0)沿(0,0)到(n,0,0)将所有粒子放在那里,让我们看一下非常少数,例如2。

您可以将速度和方向向量设置为(0,0,0)。

随着这些变化, 确切地 你在屏幕上看到了多少粒子?他们在哪里,相对于窗口?随意发布截图。
TallGuy.




邮政发布: 星期五2011年11月11日上午8:54  帖子主题:Re:粒子Syestem

谢谢你的帮助男人,对不起,我的最后一篇文章没有具体,有点仓促,所以用大学atm强调。我想我得到它......我修上了我的老师代码(将发帖)我改变了对MAC设置的胶绪导入(WONT在Linux上工作)VM拖动我的系统。

做这件事,我不是在想。更多的咖啡

所以这是我的代码ATM我需要添加删除列表功能并删除一个节点函数

对你的男人来说,非常感谢

/ *格式出于某种原因在我发布时搞砸了:/ * /
代码:

/ *
 Program:                     A02
 Author:               Alex van der Mout <040 659 061>
                                    Keithton Li <040 677 250>
 Date:                               11/11/11
 Purpose:                         创建一个实现链接的SINLE的粒子Syestem   list
 Difficulty Level:                    3
 Correlation:         I believe so.
 Completion:            100%
 Notes:     有趣的是,assigmnet有一些问题
 */

#包括<stdio.h>
#包括<stdlib.h>
#包括<time.h>


#define dflt_init_num_particles 1000

/ *********************************************
 声明我将用于的所有结构
 创建每个粒子并运行它们
 ********************************************* /
结构颜色{
        float r;//red
        float g;//green
        float b;//blue
        float a;//alpha
};

typedef结构颜色color4;
// x y z坐标
结构矢量{
        float x;
        float y;
        float z;
};

typedef结构矢量point3d;
typedef结构矢量矢量图3d;

结构粒子{
        Color4 col;
        Point3D pos;
        Vector3D dir;
        Vector3D spd;
        int size;
       结构粒子*下一个;
};

/ *********************************************
试图制作自己的Keybaord控制功能
 ********************************************* /
typedef int bool;
#define true 1
#define假0
静态BOOL键= FALSE;

int particle_init.(struct particle* p);
int particle_add.(结构粒子**头);
int particle_remove.(struct particle* p);
int particle_destroy(结构粒子**头);
int progress_update.(结构粒子**头);
// void keyup.(unsigned char,int,int,struct粒子* p);

/ ************************************************* ****************************
 /* FUNCTION :  particle_init
 /* PURPOSE  : 初始化单个粒子的属性
 /* INPUT    : 指向要初始化的粒子结构的指针
 /* OUTPUT   : 返回-1错误,成功0
 /* NOTES    :   初始化将显示的每个部分
               向屏幕。每个人都获得一种颜色,开始
               位置,方向和速度
 ************************************************** **************************** /
int particle_init.(struct particle* p){
   float x,y,z; //位置XYZ变量
       float sx,sy,sz; //速度
       Float DX,Dy,DZ; //方向
        //screen 100 by 100
        x = 0;
        y =0;
        z =0;

        sx= (rand () % (2)+1);//speed
        sy= (rand () % (2)+1);
        sz= 0;

        dx= (rand () % (8)-4);//direction
    dy= (rand () % (8)-4);
        while(dx ==0||dy == 0){
                dx= (rand () % (8)-4);
                dy= (rand () % (8)-4);
        }

        dz= 0;
        //p->col=(struct color){(rand () % (1+1) +1) -1,(rand () % (1+1) +1) -1, (rand () % (1+1) +1) -1, 1};//color
    p->col=(struct color){1,0,0,1}; //将颜色设置为红色进行测试

        p->pos=(struct vector){x,y,z};
        p->spd=(struct vector){sx,sy,sz};
        p->dir=(struct vector){dx,dy,dz};
        p->size = 5;//sze


}
// ************************************************ *****************************
/ * 功能:  particle_add
 /* PURPOSE  : 将粒子添加到动态粒子链接列表中
 /* INPUT    : 结构粒子*头。粒子列表的头部
 /* OUTPUT   : 返回-1错误,成功0
 /* NOTES    :  Calls particle_init()
 ************************************************** ***************************** /
int particle_add.(结构粒子**头){

       结构粒子* newnode = malloc(sizeof(struct particle));
        newnode->next = *head;
        particle_init(newnode);
        *head = newnode;
        return 0;
}
/ ************************************************* ****************************
 /* FUNCTION :  particle_remove
 /* PURPOSE  : 从动态粒子连接列表中删除特定粒子
 /* INPUT    : 指向颗粒以删除
 /* OUTPUT   : 返回-1错误,成功0
 /* NOTES    : 粒子可以位于列表中的任何位置。
 /*             通常删除,因为寿命跑出来
 ************************************************** ***************************** /
int particle_remove.(struct particle* p){

}
/ ************************************************* *****************************
 /* FUNCTION :  particle_destroy
 /* PURPOSE  : 动态粒子链接列表使用的免费内存
 /* INPUT    : 结构粒子**头。粒子列表的头部
 /* OUTPUT   : 返回-1错误,成功销毁的粒子数量
 /* NOTES    : 从列表中删除所有粒子
               呼叫proillet_remove.()
 ************************************************** ***************************** /
int particle_destroy(结构粒子**头){

}


/ ************************************************* *****************************
 /* FUNCTION :  particle_update
 /* PURPOSE  : 更新在下一个帧中呈现的粒子属性
 /* INPUT    : 结构粒子**头。粒子列表的头部
 /* OUTPUT   : 返回-1错误,成功0
 /* NOTES    : 试图拥有它,每次用户按下键
               颗粒会恢复到orgin
 ************************************************** *************************** /

int progress_update.(结构粒子**头){
    int reset;
       结构粒子* p = *头;
        while(p != NULL){
   // glutkeyboardupfunc.(keyboard);
        p->pos.x += (p->spd.x * p->dir.x);
        if (p->pos.x > 100 || p->pos.x < -100){//boundry checker
                p->dir.x *= -1;
        }       
        p->pos.y += (p->spd.y * p->dir.y);
        if (p->pos.y > 100 || p->pos.y < -100){
                p->dir.y *= -1;
        }       
        p->pos.z += (p->spd.z * p->dir.z);     

        p = p->next;
        }
}



我要在OpenGL代码中添加一个函数调用'键盘'的函数,以便按下所有键所有粒子返回原点(0,0),然后继续移动..如果时间允许,但我的伴侣必须做一些代码..大声笑



emplayles_opengl_mac.c.
 Description:
OpenGL for Mac.

下载
 Filename:  emplayles_opengl_mac.c.
 Filesize:  9 KB
 Downloaded:  308 Time(s)

魔鬼




邮政发布: 星期五2011年11月11日10:38 AM  帖子主题:Re:粒子Syestem

没问题。我也印象深刻,你设法修改OpenGL设置而不拧紧任何东西 - 即使对于经验丰富的开发人员而言,这也是一个壮举。

谨慎文字:您可能希望避免在公共网站上发布全名/学生ID组合。

我也要说,我对这些方法签名混淆了。例如,particle_remove 能够 从给出的签名完成,但这并不明显,如何坦率地危险(它涉及删除除了您被告知删除的节点以外的节点)。此外,progress_update被称为 结构粒子 **head,但可能应该被称为 结构粒子 *first,因为它不应该修改头部指针(你的代码没有,但也是可能的)。

然后在您的代码中提供的链接列表代码中的(令人难以置信的明显)错误。让我们说我在这里对我的第一次味道留下了更少的人。
赞助
赞助
赞助
赞助
TallGuy.




邮政发布: 星期五2011年11月11日11:42  帖子主题:Re:粒子Syestem

哎呀我的标题上的坏了,(无法编辑我的代码删除我的姓名等,等待托尼或丹做它哈哈)我们刚刚改变了我们教授的源代码中的循环条件

是的...那种方法签名..在他们身上

嘉佳?我会看看她的代码,与LinkedList不太好...... LOL大多数我们的教授都很好,只是我的教授是我的一个......
魔鬼




邮政发布: 星期五2011年11月11日2:26 PM  帖子主题:Re:粒子Syestem

不是“再次”,只是我之前指出的错误。这是一个新秀级别的错误,并且应该轻易被测试抓住。
TallGuy.




邮政发布: 星期五2011年11月11日3:08 PM  帖子主题:Re:粒子Syestem

令人敬畏的人,谢谢你的所有帮助。

得到了固定和程序的所有问题!

- 命令制作文件'make'
- 按'O'使所有粒子返回原点(0,0)
- 一个人有一个随机的现场时间,几秒钟后会消失

** Linux只运行CMD ATM **



Assign2.zip.
 Description:
Linux.

下载
 Filename:  Assign2.zip
 Filesize:  24.72 KB
 Downloaded:  304 Time(s)

从上一个显示帖子:   
   指数 -> 编程,C. -> C帮助
查看上一个主题 告诉一个朋友可打印的版本下载主题订阅本主题私人信息刷新页面 查看下一个主题

11  [ 11 Posts ]
跳到:   


Style:  
搜索: