max_particles

Posted By: Widi

max_particles - 03/03/11 04:49

max_particles scheint nicht zu funktionieren. Ich setze max_particles auf 10000, erzeuge mit draw_point3d ca 9000 Partikel. Aber die Hälfte beginnt zu flackern, und die Variable num_particles springt immer zwischen 4900 und 5100 herum. Sieht so aus, als ob da irgendwie eine Begrenzung bei 5000 ist.

Brauche diese grosse Anzahl an Points, da damit jedes vertices meines Terraineditors markiert werden soll.

EDIT: Ich setze auch max_particles VOR level_load...
Posted By: jcl

Re: max_particles - 03/03/11 11:01

Nein, zumindest eine Begrenzung bei 5000 gibt es nicht.
Posted By: Widi

Re: max_particles - 03/03/11 18:43

Hier ein Beispiel:
Code:
#include <acknex.h>
#include <default.c>

#define anzahl_particles 9000    // unter 5000 ist alles in Ordnung.
VECTOR Position[anzahl_particles];

function main()
{
	fps_max = 10;
	video_set (sys_metrics(0),sys_metrics(1),32,1);
	max_particles = 10000;

	level_load (NULL);
	vec_set (sky_color,nullvector);
	vec_set (camera.x,vector(-600,0,0));	

	int i;
	for (i=0; i<anzahl_particles; i++)
	{
		Position[i].x = random(500) -250;
		Position[i].y = random(500) -250;
		Position[i].z = random(500) -250;
	}
	
	while (1)
	{
		for (i=0; i<anzahl_particles; i++)
		{
			draw_point3d(Position[i],vector(0,0,255),100,2);
		}
		wait(1);
	}
}


Sobald anzahl_particles über 5000 gesetzt wird, beginnen die Punkte zu flackern. Habe fps_max extra auf 10 gesetzt, damit man die Aenderungen in num_particles im Debugpanel besser beobachten kann.

Komischerweise funktioniert es sobald ich max_particles auf das Doppelte von anzahl_particles setze, in diesem Beispiel 18000. Aber die var num_particles zeigt dann immer noch nur 9000 an.

Darum hatte ich auch die Frage mit der Begrenzung von 5000 Particles: max_particles war in meinem Projekt auf 10000 gesetzt und auch dort funktionierte es nur bis 5000 sauber.
Posted By: jcl

Re: max_particles - 03/07/11 13:28

Danke für Ihr Beispiel - und hier wieder ein kleines User-Quiz:

Warum bekommt Widi mit dem obigen Code nur halb so viele Partikel? Wo steckt der Rest?
Posted By: Uhrwerk

Re: max_particles - 03/07/11 16:10

Also hier meine Vermutung: Das Handbuch sagt:
Quote:
The point is only visible during the next frame. For displaying it permanently, use a while ... wait(1) loop

Wenn also im ersten Frame zum Beispiel 6000 Particles erzeugt werden, dann sind sie im zweiten Frame sichtbar. Wenn im zweiten Frame aber bereits 6000 vorhanden sind, dann können nur 4000 neue erzeugt werden um max_particles = 10000 nicht zu überschreiten. Diese 4000 neu erzeugten sind dann im dritten Frame sichtbar, während die 6000 aus dem ersten verschwunden sind. Also können im dritten Frame wieder 6000 erzeugt werden u.s.w.

Liege ich richtig?
Posted By: jcl

Re: max_particles - 03/07/11 16:30

Ja, die Idee ist richtig.

Widi zeichnet 3D Punkte. Diese benötigen jeweils einen Partikel und existieren genau einen Frame lang.

Er reserviert 10000 Partikel und zeichnet 9000 Punkte. Diese werden auch korrekt dargestellt. 1000 Partikel sind danach noch übrig. Im nächsten Frame zeichnet er wieder 9000 Punkte, von den jetzt aber nur 1000 gezeichnet werden können, da es für den Rest keine Partikel mehr gibt. Im folgenden Frame stehen wieder 10000-1000 = 9000 Partikel zur Verfügung. Daher flackert das Bild dauernd zwischen 9000 und 1000 Partikeln hin und her.
Posted By: Uhrwerk

Re: max_particles - 03/07/11 16:59

*Im Kalender rot markier*

Rätsel von JCL gelöst...
Posted By: Widi

Re: max_particles - 03/07/11 22:22

Danke für den Hinweis.

EDIT: Habe in meinem Level immer noch probleme mit flackernden Punkten.
max_particles = 200000;
num_particles > 5000 und schon flackert es.
Aber mit dem Beispiel oben funktioniert es. Muss noch einige Tests machen wieso das so ist. Melde mich dann wieder.

EDIT 2: Konnte den Fehler noch nicht lokalisieren, mein Script ist schon sehr gross. Habe nur folgendes festgestellt: mit A7 keine Probleme. Bleibe aber dran an dem Problem
© 2024 lite-C Forums