4 registered members (ozgur, Ayumi, VHX, monarch),
1,161
guests, and 4
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
Re: Voxel fürs 3d Gamestudio
[Re: Kartoffel]
#429146
09/09/13 12:56
09/09/13 12:56
|
Joined: Jul 2008
Posts: 2,107 Germany
rayp
X
|
X
Joined: Jul 2008
Posts: 2,107
Germany
|
So wäre es noch besser, falls ent_create nicht erfolgreich war ^^
you = ent_create("test1.bmp",vector(42,0,0),NULL);
if (you){
you.pan = 0;
set(you,DECAL);
}
Acknex umgibt uns...zwischen Dir, mir, dem Stein dort... "Hey Griswold ... where u gonna put a tree that big ?" 1998 i married my loved wife ... Sheeva from Mortal Kombat, not Evil-Lyn as might have been expected rayp.flags |= UNTOUCHABLE;
|
|
|
Re: Voxel fürs 3d Gamestudio
[Re: Kartoffel]
#429162
09/09/13 15:26
09/09/13 15:26
|
Joined: Oct 2008
Posts: 341
ratz
OP
Senior Member
|
OP
Senior Member
Joined: Oct 2008
Posts: 341
|
...
Last edited by ratz; 09/09/13 16:06.
|
|
|
Re: Voxel fürs 3d Gamestudio
[Re: ratz]
#429163
09/09/13 15:59
09/09/13 15:59
|
Joined: Oct 2008
Posts: 341
ratz
OP
Senior Member
|
OP
Senior Member
Joined: Oct 2008
Posts: 341
|
gute laufzeit ^^ 146 fps ich hab die max_entity jetzt mal auf 2000 gemacht und mithilfe der for-scheife eine lange strecke gezeichnet...
var i;
var coord_counter_x =32;
var coord_counter_y =32;
ENTITY* cube[500];
function create_atom()
{
for (i=0; i<500; i++)
{
cube[i] = ent_create("test1.bmp",vector(42,0+coord_counter_x,0),NULL);
cube[i].pan = 180;
cube[i] = ent_create("test2.bmp",vector(10,0+coord_counter_x,0),NULL);
cube[i].pan = -180;
cube[i] = ent_create("test3.bmp",vector(26,16+coord_counter_x,0),NULL);
cube[i].pan = 90;
cube[i] = ent_create("test1.bmp",vector(26,-16+coord_counter_x,0),NULL);
cube[i].pan = -90;
cube[i] = ent_create("test2.bmp",vector(26,0+coord_counter_x,16),NULL);
cube[i].tilt = 90;
set(cube[i],DECAL);
i++;
coord_counter_x += 35;
coord_counter_y += 35;
}
}
function main()
{
max_entities = 2000;
level_load("test.WMB");
create_atom();
}
ich melde mich später wieder wenn ich was brauche oder euch was zeigen will -Danke nochmals
|
|
|
Re: Voxel fürs 3d Gamestudio
[Re: ratz]
#429165
09/09/13 16:57
09/09/13 16:57
|
Joined: Jun 2009
Posts: 2,210 Bavaria, Germany
Kartoffel
Expert
|
Expert
Joined: Jun 2009
Posts: 2,210
Bavaria, Germany
|
...kleines beispiel: 2500 blöcke, 1 entity sichtbarkeit des models macht +- 4fps aus, die restliche auslastung kommt durch das postprocessing und 8x supersampling. ohne nachbearbeitung und antialiasing läuft das ganze auf ~2200fps. edit: nur um das nochmal klarzustellen: ich will nicht sagen, dass dein ansatz falsch ist, du wirst aber relativ schnell an begrenzungen stoßen (fps & entity limit)
Last edited by Kartoffel; 09/09/13 17:07.
POTATO-MAN saves the day! - Random
|
|
|
Re: Voxel fürs 3d Gamestudio
[Re: Kartoffel]
#429169
09/09/13 17:20
09/09/13 17:20
|
Joined: Oct 2008
Posts: 341
ratz
OP
Senior Member
|
OP
Senior Member
Joined: Oct 2008
Posts: 341
|
so ... jetzt muckt meine for-schleife rum ich will nichtnur in die Länge, sondern auch in der Breite erstellen ... und das ist das Ergebniss was mache ich falsch ? drehe ich das ganze um in der schleife dann kommt das gleiche ergebniss mache ich es anders , dann meint mein Programm beim ausführen script-crash
Last edited by ratz; 09/10/13 12:35.
|
|
|
Re: Voxel fürs 3d Gamestudio
[Re: ratz]
#429171
09/09/13 17:24
09/09/13 17:24
|
Joined: Jun 2009
Posts: 2,210 Bavaria, Germany
Kartoffel
Expert
|
Expert
Joined: Jun 2009
Posts: 2,210
Bavaria, Germany
|
du musst die coord counter nach den schleifen immer wieder resetten edit: und du verwendest cube[i] mehrmals. benutze doch einfach 2 variablen, anstatt i_x, i_y und i. edit2: achso, natürlich wäre es auch naheliegend, einen 2 dimensionalen ent array zu verwenden.
Last edited by Kartoffel; 09/09/13 17:32.
POTATO-MAN saves the day! - Random
|
|
|
Re: Voxel fürs 3d Gamestudio
[Re: Kartoffel]
#429194
09/10/13 08:19
09/10/13 08:19
|
Joined: Oct 2008
Posts: 341
ratz
OP
Senior Member
|
OP
Senior Member
Joined: Oct 2008
Posts: 341
|
kann mir mal wer die schleife richtig einstellen (wo am schluss coord_x/coord_y resetten )? ich bekomm irgenwie nur komische muster anstatt eine fläche die in die länge sowie in die breite gehen soll und wie geht das, dass ich den cube[i] nur einmal verwenden muss/soll/kann? -> und ent_array gibs im handbuch nicht
Last edited by ratz; 09/10/13 08:21.
|
|
|
Re: Voxel fürs 3d Gamestudio
[Re: ratz]
#429201
09/10/13 10:24
09/10/13 10:24
|
Joined: Nov 2008
Posts: 946
the_clown
User
|
User
Joined: Nov 2008
Posts: 946
|
coord_counter_y müsstest du vor der inneren schleife immer zurücksetzen. ist aber obsoleter rat da die ganze funktion so langfristig nicht funktionieren kann.
erstmal zu ent array: das ist keine funktion (nichts mit ent_array oder so) sondern kurz für entity-array. cube[] ist ein entity array, genauer ein array von pointern vom typ entity. was ein array ist solltest du auf jeden fall wissen wenn du derartige dinge programmieren möchtest, arrays sind eine recht fundamentale datenstruktur.
ein problem in deinem code ist das du irgendwie versuchst alle entities, die einen würfel bilden, in einem einzigen array-element zu speichern, denn du setzt cube[i] in deiner schleife gleich mehrmals auf den rückgabewert eines ent_create aufrufs. im endeffekt zeigt cube[i] dadurch am ende der schleife nur auf die zuletzt erzeugte seite des i-ten würfels. nebenbei bewirkt das dass auch nur diese seite das DECAL flag gesetzt hat; das sich nicht alle anderen seiten nach der kamera ausrichten kommt daher dass du ihre ausrichtung direkt nach dem erzeugen manuell setzt, was wenn ich mich richtig erinnere den gleichen effekt wie das flag hat. wenn du später durch dein array iterierst, um beispielsweise bei allen blöcken die farbe zu ändern oder so, wirst du feststellen dass änderungen sich nur auf eine seite auswirken.
außerdem ist es relativ ineffizient die würfel in einem EINdimensionalen array zu speichern, besser wäre es, ein ZWEIdimensionales zu verwenden, dadurch kannst du später gezielt auf blöcke in bestimmten zeilen und spalten deiner blockwelt zugreifen. das spart dir auch 4 deiner 5 variablen im code. lies dir mal die abschnitte zu arrays im handbuch durch, die erklären das glaub ich ganz gut. später wenn du tatsächlich welten aus deinen blöcken bauen willst wäre sogar ein dreidimensionales array ideal (auch wenn ich nicht mehr weiß ob das in lite-c geht). am besten wäre es aber sowieso, zwei eigene datenstrukturen zu verwenden, eine um alle seiten eines blockes abzuspeichern und eine weitere um die block-welt zu verwalten. dazu benutzt man structs. das spart in der regel eine menge unnötigen code. auch dazu gibt es einen abschnitt im handbuch.
|
|
|
|