Gamestudio Links
Zorro Links
Newest Posts
AlpacaZorroPlugin v1.3.0 Released
by kzhao. 05/22/24 13:41
Free Live Data for Zorro with Paper Trading?
by AbrahamR. 05/18/24 13:28
Change chart colours
by 7th_zorro. 05/11/24 09:25
Data from CSV not parsed correctly
by dr_panther. 05/06/24 18:50
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
1 registered members (henrybane), 1,499 guests, and 1 spider.
Key: Admin, Global Mod, Mod
Newest Members
LucasJoshua, Baklazhan, Hanky27, firatv, wandaluciaia
19054 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Page 5 of 6 1 2 3 4 5 6
Re: Voxel fürs 3d Gamestudio [Re: ratz] #429254
09/10/13 13:26
09/10/13 13:26
Joined: Jun 2009
Posts: 2,210
Bavaria, Germany
Kartoffel Offline
Expert
Kartoffel  Offline
Expert

Joined: Jun 2009
Posts: 2,210
Bavaria, Germany
gut, dass es jetzt funktioniert.
aber du überschreitest in der for schleife immernoch den array (x < 18)!

wenn das ganze überhaupt startet, wird es in dem fall jede menge speicher fehler & random crashes geben sobald das projekt komplexer wird.

(...mist, jetzt hab ich auch bock, was in die richtung zu coden ._.)


POTATO-MAN saves the day! - Random
Re: Voxel fürs 3d Gamestudio [Re: Kartoffel] #429266
09/10/13 15:08
09/10/13 15:08
Joined: Nov 2008
Posts: 946
T
the_clown Offline
User
the_clown  Offline
User
T

Joined: Nov 2008
Posts: 946
Originally Posted By: Kartoffel

(...mist, jetzt hab ich auch bock, was in die richtung zu coden ._.)



haha ja voxel sind ein interessantes thema grin
du hast allerdings recht was die performance bei diesem ansatz angeht, ich hab auch gerade mal einen kleinen ansatz probiert und mit einem feld von 1024 voxeln bekomme ich mit einem netbook nur noch um die 15 fps (amd c40 dual core prozessor, 4 gigabyte RAM). Zusätzlich zu 6 sprite-entities pro voxel liegt auch noch eine bitmap für jeden voxel im speicher (um per bmap_for_enity auf dem voxel rumzumalen).
Die hardware auf der ich grad arbeite ist zwar eh nicht spieltauglich, aber die voxelzahl ist nun wirklich nicht hoch. selbst wenn man die hardwareleistung um faktor 10 bis 20 hochschraubt, die voxelzahlen die mir so vorschweben liegen eher im hunderttausenderberreich, und das KANN mit dem ansatz einfach nicht flüssig genug sein, schon gar nicht mit laufendem spielcode und -objekten obendrauf... deswegen würde mich dein anderer ansatz mal interessieren, Kartoffel, der mit der einen entity...?

Re: Voxel fürs 3d Gamestudio [Re: the_clown] #429269
09/10/13 15:42
09/10/13 15:42
Joined: Jun 2009
Posts: 2,210
Bavaria, Germany
Kartoffel Offline
Expert
Kartoffel  Offline
Expert

Joined: Jun 2009
Posts: 2,210
Bavaria, Germany
Quote:
der mit der einen entity...?

eine entity wird nicht möglich sein (irgendwo zwischen 2700 und 3000 nicht aneinanderliegenden blöcken hat man die max-polys-pro-model-grenze erreicht)

einfach wie minecraft: 1 Model == 1 Chunk == 16³ Blöcke
damit überschreitet man die poly grenze nie und hat sehr gute performance.

Achso auserdem muss man alle nicht sichbaren seiten erst garnicht meshen, weil sonst geschätzt ~90% leistung umsonst verbraten wird (kann gut sein, dass es noch mehr ist).

Last edited by Kartoffel; 09/10/13 15:44.

POTATO-MAN saves the day! - Random
Re: Voxel fürs 3d Gamestudio [Re: Kartoffel] #429314
09/11/13 11:45
09/11/13 11:45
Joined: Oct 2008
Posts: 341
R
ratz Offline OP
Senior Member
ratz  Offline OP
Senior Member
R

Joined: Oct 2008
Posts: 341
ich bin heute mal aus spaß in die 3te dimension gegangen und
habe jetzt mal eine 2x2 pixel bmp benutzt

das ergebniss:

level lädt ... 6 sec später erscheint der cube




Code:
#include <acknex.h>
#include <default.c>

//

var voxel_size = 4; // hier für den abstand ;) 

typedef struct VOXEL
{
	ENTITY * front;  // x-
	ENTITY * back;   // x+
	ENTITY * left;   // y+
	ENTITY * right;  // y-
	ENTITY * top;    // z+
	ENTITY * bottom; // z-
	
	
} VOXEL;


VOXEL * VoxelStructure[20][20][20]; // 2D array


void create_voxel()
{
	int x, y, z;
	
		
	for(x = 0; x < 12; x++)
	{
		for(y = 0; y < 12; y++)
		{
		 	for(z = 0; z < 12; z++)
	   	{ 	
		  	VoxelStructure[x][y][z] = sys_malloc(sizeof(VOXEL));
			
			VoxelStructure[x][y][z].front = ent_create("atom.bmp" , vector(voxel_size * x+2, voxel_size * y,  voxel_size * z), NULL); // seite erstellen
			VoxelStructure[x][y][z].front.pan = 180;// winkel setzen
			
			VoxelStructure[x][y][z].back = ent_create("atom.bmp" , vector(voxel_size * x-0.001, voxel_size * y, voxel_size * z), NULL); // seite erstellen
			VoxelStructure[x][y][z].back.pan = -180; // winkel setzen
			
			VoxelStructure[x][y][z].left = ent_create( "atom.bmp" , vector(voxel_size * x+1, voxel_size * y+1, voxel_size * z), NULL); // seite erstellen
			VoxelStructure[x][y][z].left.pan = 90; // winkel setzen
			
			VoxelStructure[x][y][z].right = ent_create( "atom.bmp", vector(voxel_size * x+1, voxel_size * y-1, voxel_size * z), NULL); // seite erstellen
			VoxelStructure[x][y][z].right.pan = -90;  // winkel setzen
			
			VoxelStructure[x][y][z].top = ent_create( "atom.bmp", vector(voxel_size * x +1, voxel_size * y, voxel_size * z+1), NULL); // seite erstellen
			VoxelStructure[x][y][z].top.tilt = 90;  // winkel setzen
			
			//VoxelStructure[x][y].bottom = ent_create( "test1.bmp" , vector(voxel_size * x, voxel_size * y, 0), NULL); // seite erstellen
			//VoxelStructure[x][y].bottom.xxx = ; // winkel setzen
	     }
	  }
	}
}


void main()
{
	wait(1);
	video_set(sys_metrics(0) * 0.75, sys_metrics(1) * 0.75, 0, 2);
	fps_max = 60;
	
	max_entities = 48000;
	
	level_load("test.WMB");
		wait(1); // warten bis der level geladen ist, kann sonst probleme auf langsamen rechnern / großen leveln geben
	
	create_voxel();
}



wie rechnet sich denn die max_entity zusammen , ich hab die jetzt mal auf sage und schreibe: 48000 gesetzt

Last edited by ratz; 09/11/13 11:45.
Re: Voxel fürs 3d Gamestudio [Re: ratz] #429315
09/11/13 11:59
09/11/13 11:59
Joined: May 2009
Posts: 5,370
Caucasus
3run Offline
Senior Expert
3run  Offline
Senior Expert

Joined: May 2009
Posts: 5,370
Caucasus
I can't understand German, but there is something wrong going on with your texture size (it's size should be power of 2).
Here is how it should looks like, with proper code and proper texture size (64x64):

Code:
Code:
#include <acknex.h>
#include <default.c>

//

var voxel_size = 64; // hier fur den abstand ;) 

typedef struct VOXEL
{
	ENTITY * front;  // x-
	ENTITY * back;   // x+
	ENTITY * left;   // y+
	ENTITY * right;  // y-
	ENTITY * top;    // z+
	ENTITY * bottom; // z-
	
	
} VOXEL;


VOXEL * VoxelStructure[20][20][20]; // 2D array


void create_voxel()
{
	int x, y, z;
	
		
	for(x = 0; x < 6; x++)
	{
		for(y = 0; y < 6; y++)
		{
		 	for(z = 0; z < 6; z++)
	   	{ 	
		  	VoxelStructure[x][y][z] = sys_malloc(sizeof(VOXEL));
			
			VoxelStructure[x][y][z].front = ent_create("brick02.pcx" , vector(voxel_size * x + 32, voxel_size * y,  voxel_size * z), NULL); // seite erstellen
			VoxelStructure[x][y][z].front.pan = 180;// winkel setzen
			
			VoxelStructure[x][y][z].back = ent_create("brick02.pcx" , vector(voxel_size * x - 32, voxel_size * y, voxel_size * z), NULL); // seite erstellen
			VoxelStructure[x][y][z].back.pan = -180; // winkel setzen
			
			VoxelStructure[x][y][z].left = ent_create( "brick02.pcx" , vector(voxel_size * x, voxel_size * y + 32, voxel_size * z), NULL); // seite erstellen
			VoxelStructure[x][y][z].left.pan = 90; // winkel setzen
			
			VoxelStructure[x][y][z].right = ent_create( "brick02.pcx", vector(voxel_size * x, voxel_size * y - 32, voxel_size * z), NULL); // seite erstellen
			VoxelStructure[x][y][z].right.pan = -90;  // winkel setzen
			
			VoxelStructure[x][y][z].top = ent_create( "brick02.pcx", vector(voxel_size * x, voxel_size * y, voxel_size * z + 32), NULL); // seite erstellen
			VoxelStructure[x][y][z].top.tilt = 90;  // winkel setzen
			
			VoxelStructure[x][y][z].bottom = ent_create( "brick02.pcx", vector(voxel_size * x, voxel_size * y, voxel_size * z - 32), NULL); // seite erstellen
			VoxelStructure[x][y][z].bottom.tilt = 270;  // winkel setzen
	     }
	  }
	}
}


void main()
{
	wait(1);
	video_set(sys_metrics(0) * 0.75, sys_metrics(1) * 0.75, 0, 2);
	fps_max = 60;
	
	max_entities = 48000;
	
	level_load("");
		wait(1); // warten bis der level geladen ist, kann sonst probleme auf langsamen rechnern / gro?en leveln geben
	
	create_voxel();
}

Anyway, good luck.



Greets


Looking for free stuff?? Take a look here: http://badcom.at.ua
Support me on: https://boosty.to/3rung
Re: Voxel fürs 3d Gamestudio [Re: 3run] #429319
09/11/13 12:35
09/11/13 12:35
Joined: Jun 2009
Posts: 2,210
Bavaria, Germany
Kartoffel Offline
Expert
Kartoffel  Offline
Expert

Joined: Jun 2009
Posts: 2,210
Bavaria, Germany
@3run: he wanted to have a spaces between them smirk

@ratz: max entities? sorry aber so schwer ist das doch nicht... maximales entity-limit.
(in deinem fall verwendest du pro block ja 5 entities)


POTATO-MAN saves the day! - Random
Re: Voxel fürs 3d Gamestudio [Re: Kartoffel] #429321
09/11/13 12:45
09/11/13 12:45
Joined: Oct 2008
Posts: 341
R
ratz Offline OP
Senior Member
ratz  Offline OP
Senior Member
R

Joined: Oct 2008
Posts: 341
wie bekommt man das den hin , dass nicht alle sichtbar sind , wovon du immer redes -> kartoffel laugh ?

-> ich habe jetzt den code so bearbeitet, dass wenn man
die a taste drückt ein neuer block hinter dem nächten
erzeugt wird

-> komischer weise kann ich so mehr blöcke (voxel) erzeugen,
als wenn ich das mithilfe der for-schleife versuche


Code:
#include <acknex.h>
#include <default.c>

//

var voxel_size = 2; // hier 35 für den abstand ;) 

var i = 0;


var coord_x = 0;
var coord_y = 0;
var coord_z = 0;


typedef struct VOXEL
{
	ENTITY* front;  // x-
	ENTITY* back;   // x+
	ENTITY* left;   // y+
	ENTITY* right;  // y-
	ENTITY* top;    // z+
	ENTITY* bottom; // z-
	
	
} VOXEL;


VOXEL * VoxelStructure[16][16][16]; // 2D array


void create_atom(i)
{
	int x, y, z;
	
		
	for(x = 0; x < 6; x++)
	{
		for(y = 0; y < 6; y++)
		{
		 	for(z = 0; z < 6; z++)
	   	{ 	
		  	VoxelStructure[x][y][z] = sys_malloc(sizeof(VOXEL));
			
			VoxelStructure[x][y][z].front = ent_create("atom.bmp" , vector(voxel_size *x*coord_x+2, voxel_size * y,  voxel_size * z), NULL); // seite erstellen
			VoxelStructure[x][y][z].front.pan = 180;// winkel setzen
			
			VoxelStructure[x][y][z].back = ent_create("atom.bmp" , vector(voxel_size *x*coord_x-0.001, voxel_size * y, voxel_size * z), NULL); // seite erstellen
			VoxelStructure[x][y][z].back.pan = -180; // winkel setzen
			
			VoxelStructure[x][y][z].left = ent_create( "atom.bmp" , vector(voxel_size * x *coord_x+1, voxel_size * y+1, voxel_size * z), NULL); // seite erstellen
			VoxelStructure[x][y][z].left.pan = 90; // winkel setzen
			
			VoxelStructure[x][y][z].right = ent_create( "atom.bmp", vector(voxel_size * x *coord_x+1, voxel_size * y -1, voxel_size * z), NULL); // seite erstellen
			VoxelStructure[x][y][z].right.pan = -90;  // winkel setzen
			
			VoxelStructure[x][y][z].top = ent_create( "atom.bmp", vector(voxel_size * x *coord_x+1, voxel_size * y , voxel_size * z+1), NULL); // seite erstellen
			VoxelStructure[x][y][z].top.tilt = 90;  // winkel setzen
			
			//VoxelStructure[x][y].bottom = ent_create( "test1.bmp" , vector(voxel_size * x, voxel_size * y, 0), NULL); // seite erstellen
			//VoxelStructure[x][y].bottom.xxx = ; // winkel setzen
	     }
	  }
	}
}


void main()
{
	wait(1);
	video_set(sys_metrics(0) * 0.75, sys_metrics(1) * 0.75, 0, 2);
	fps_max = 60;
	
	max_entities = 48000;
	
	level_load("test.WMB");
		wait(1); // warten bis der level geladen ist, kann sonst probleme auf langsamen rechnern / großen leveln geben
	
	create_atom(i);
	
	while(1)
	{
	 if(key_a == 1)
	 {
	  create_atom(i);
	  i+=1;
	  coord_x +=5;
	 }
	 wait(1);	
	}
}


Last edited by ratz; 09/11/13 12:51.
Re: Voxel fürs 3d Gamestudio [Re: ratz] #429322
09/11/13 12:56
09/11/13 12:56
Joined: Jun 2009
Posts: 2,210
Bavaria, Germany
Kartoffel Offline
Expert
Kartoffel  Offline
Expert

Joined: Jun 2009
Posts: 2,210
Bavaria, Germany
Quote:
-> komischer weise kann ich so mehr blöcke (voxel) erzeugen,
als wenn ich das mithilfe der for-schleife versuche

weil immer wieder speicher allokiert wird, und die vorherigen pointer dabei neugesetzt werden -> du kommst nichtmehr an die entitys ran + memory leak.

das mit den seiten ist schwieriger.

am besten du machst einen struct für einen chunk, in den du speicherst, wo blöcke sind und wo nicht.

dazu brauchst du noch ne funktion zum erstellen der blöcke.
in der funktion musst du den chunk durchgehen und für jeden block checken, ob die jeweilige seite erstellt werden soll, oder nicht.


POTATO-MAN saves the day! - Random
Re: Voxel fürs 3d Gamestudio [Re: Kartoffel] #429326
09/11/13 13:50
09/11/13 13:50
Joined: Oct 2008
Posts: 341
R
ratz Offline OP
Senior Member
ratz  Offline OP
Senior Member
R

Joined: Oct 2008
Posts: 341
ich hab mich mal hingesetzt und folgede formel erfunden , die vtl functionieren könnte:

Code:
voxel[i](16,16,16)  -> create_chunk[i](1,1,1) // ein voxel von 16³ wird zu ein chunk
 
reset(create_chunk[i])  -> create_voxel[i] = pos.chunk[i] // wird der chunk gelöscht 
                                                          // wird er zum voxel


Last edited by ratz; 09/11/13 13:51.
Re: Voxel fürs 3d Gamestudio [Re: ratz] #429328
09/11/13 13:52
09/11/13 13:52
Joined: Oct 2008
Posts: 341
R
ratz Offline OP
Senior Member
ratz  Offline OP
Senior Member
R

Joined: Oct 2008
Posts: 341
ich setz mich glecih mal hin und bastel mal ein bisschen weiter

Page 5 of 6 1 2 3 4 5 6

Moderated by  HeelX, Lukas, rayp, Rei_Ayanami, Superku, Tobias, TWO, VeT 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1