לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 02-09-2010, 12:15
  macox macox אינו מחובר  
 
חבר מתאריך: 01.07.03
הודעות: 2,466
שלח הודעה דרך ICQ אל macox שלח הודעה דרך MSN אל macox
בניית מערכת כבישים רקרוסיבית ב OPENGL

שלום , בניתי פונקציה שבונה מערכת כבישים , בצורה הבאה :
אני מתחיל ממקום כולשהו במטריצה ומתחיל להתקדם בכיוון כולשהו , לאחר X צעדים , אני יוצר
2 כיוונים מאונכים שאני מתקדם לכיוונם , כלומר בונה 2 ענפים בכיוונים מאונכים לכיוון המקורי,
כלומר
אם בניתי את הכביש הבא :
[]
[]
[]
[]
[]

אז ההמשך יהיה :
[]
[]
[]
[]
[]
[][][][][]
כלומר צורה של T
הצמתים יכולים להיות ב 0 90 180 ... 360 מעלות כלומר כל צמתי T שיכולים להיות

הבעיה היא שמדי פעם נוצרים לי כבישים צמודים שנוצרו מקריאות רקוריסביות מאוחרות יותר.
אני ניסיתי לפני פתיחת כל ענף חדש לבדוק שמסביב הענף הנוכחי אין לי כבישים פעילים אחרים... אבל זה עדיין קורה ... :

המשתנה ADD בעצם אומר לי לאיפה אני צריך ללכת
כלומר
add.x = 1
אומר שאני הולך בכיוון החיובי של ציר ה X במטריצה
add.y = -1
אומר שאני הולך בכיוון השלילי של המטריצה (למעלה , כי הערכים הקטנים i,j נמצאים בתחילת המטריצה)
terrain.obj משתנה שמכיל את האוביקט שאני רוצה לצייר.. במקרה הזה כביש..


מה שצריך לדעת שהלולאה , שברגע שאני מוצא לעצמי מיקום נכון (בתחום שהקצאתי במטריצה , וזה מה שאני בודק בתנאי של הלולאה) פשוט רצה בכיוון שאני רוצה ובונה את הכביש....

אשמח לכל עזרה ,
בתודה!
קוד:
void cWorld::buildRoad(point &pos,point &add,int size) { int i = pos.y,j = pos.x,counter=0; int scalar =size+5;// rand() % int(n-n*0.9)+5; if ( (terrain[i][j].flag == false && terrain[i][j].object == NULL) || ((terrain[i][j].flag == true && terrain[i][j].object !=NULL) )) { while( ((terrain[i][j].flag == false && terrain[i][j].object == NULL) || ((terrain[i][j].flag == true && terrain[i][j].object !=NULL) )) && counter <= size) { if (add.x) { terrain[i][j].object = new cRoad(i,j,true) ; } else { terrain[i][j].object = new cRoad(i,j,false) ; } terrain[i][j].flag=true; i+= add.y; j+= add.x; counter++; } if (add.x == 1 && !add.y) { if(terrain[i-1][j].object == NULL && terrain[i+1][j].object == NULL && terrain[i+1][j+2].object == NULL && terrain[i-1][j+2].object == NULL ) { buildRoad(point(j,i),point(0,1),scalar); buildRoad(point(j,i),point(0,-1),scalar); } else { // buildRoad(point(j,i),add,scalar); } } else if ( add.x == -1 && !add.y) { if(terrain[i-1][j].object == NULL && terrain[i+1][j].object == NULL && terrain[i-1][j-2].object == NULL && terrain[i+1][j-2].object == NULL ) { buildRoad(point(j,i),point(0,1),scalar); buildRoad(point(j,i),point(0,-1),scalar); } else { //buildRoad(point(j,i),add,scalar); } } if (!add.x && add.y == -1) { if(terrain[i][j+1].object == NULL && terrain[i][j-1].object == NULL && terrain[i+2][j+1].object == NULL && terrain[i+2][j-1].object == NULL ) { buildRoad(point(j,i),point(-1,0),scalar); buildRoad(point(j,i),point(1,0),scalar); } else { // buildRoad(point(j,i),add,scalar); } } else if ( !add.x && add.y == 1 ) { if(terrain[i][j+1].object == NULL && terrain[i][j-1].object == NULL && terrain[i-2][j-1].object == NULL && terrain[i-2][j+1].object == NULL ) { buildRoad(point(j,i),point(-1,0),scalar); buildRoad(point(j,i),point(1,0),scalar); } else { // buildRoad(point(j,i),add,scalar); } } } }
_____________________________________
_

אני הלוחם של היום והלויס ליין של המחר

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 11:17

הדף נוצר ב 0.04 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר