Schönen Abend,
in meinem Projekt möchte ich nun doch zur Verwendung des Vertex Buffers greifen, doch mein Spiel hängt sich dadurch auf bzw. der exe Runner. Manchmal jedoch nicht aber die FPS liegen dann bei nur Eins. EIgentlich wollte ich durch die Verwendung die Performance erhöhen. Vielleicht mache ich ja was falsch. Mein Code sieht so aus:
Das Objekt das mit Hilfe eines Grids eine Landschaft erzeugen soll hat den Code:
Alles anzeigen
Skript "scr_vertex_format_begin":
Skript "scr_add_vertex_floor":
Alles anzeigen
Das Objekt das die ganze Schoße dann zeichnet:
Also wo liegt das Problem? Mit den d3d_model-Funktionen kam ich bei einer riesiegen Landschaft aus Würfeln (alá Minecraft) wenigstens auf 20 FPS. Und wenn wir schon dabei sind... wie funktioniert das Setzen der UV-Koordinaten?
Das soll mal flüssig laufen:

in meinem Projekt möchte ich nun doch zur Verwendung des Vertex Buffers greifen, doch mein Spiel hängt sich dadurch auf bzw. der exe Runner. Manchmal jedoch nicht aber die FPS liegen dann bei nur Eins. EIgentlich wollte ich durch die Verwendung die Performance erhöhen. Vielleicht mache ich ja was falsch. Mein Code sieht so aus:
Das Objekt das mit Hilfe eines Grids eine Landschaft erzeugen soll hat den Code:
GML-Quellcode
- scr_vertex_format_begin();
- global.v_buff = vertex_create_buffer(); //Vertexbuffer erstellen
- vertex_begin(global.v_buff, global.my_format); //Buffer nun beschreiben (nach dem vorher definierten format)
- for (i = 0; i < ds_grid_width(global.heightmap); i += 1)
- {
- for (j = 0; j < ds_grid_height(global.heightmap); j += 1)
- {
- var height = ds_grid_get(global.heightmap,i,j);
- for (k = 0; k < height; k += 1)
- {
- //if k > 12 model = global.model_rocks else model = global.model_grass;
- global.walls += 1;
- scr_add_vertex_floor(i*16,j*16,height*16,i*16+16,j*16+16,height*16);
- if ds_grid_get(global.heightmap,i-1,j) <= k
- {
- //d3d_model_wall(model,i*16,j*16,k*16,i*16,j*16+16,k*16+16,1,1);
- }
- if ds_grid_get(global.heightmap,i+1,j) <= k
- {
- //d3d_model_wall(model,i*16+16,j*16,k*16,i*16+16,j*16+16,k*16+16,1,1);
- }
- if ds_grid_get(global.heightmap,i,j-1) <= k
- {
- //d3d_model_wall(model,i*16,j*16,k*16,i*16+16,j*16,k*16+16,1,1);
- }
- if ds_grid_get(global.heightmap,i,j+1) <= k
- {
- //d3d_model_wall(model,i*16,j*16+16,k*16,i*16+16,j*16+16,k*16+16,1,1);
- }
- }
- }
- }
- //abschluss
- vertex_end(global.v_buff);
Skript "scr_vertex_format_begin":
Skript "scr_add_vertex_floor":
GML-Quellcode
- var x1 = argument0;
- var y1 = argument1;
- var z1 = argument2;
- var x2 = argument3;
- var y2 = argument4;
- var z2 = argument5;
- //Vertex 1 (Jeder vertex muss nach dem schema des Vertexformats gebaut werden!)
- vertex_position_3d(global.v_buff, x1, y1, z1);//3d position
- vertex_colour(global.v_buff, c_white, 1);//farbe
- vertex_texcoord(global.v_buff, 0, 0);//uv koordinate
- //Vertex2
- vertex_position_3d(global.v_buff, x1, y2, z2);//3d position
- vertex_colour(global.v_buff, c_white, 1);
- vertex_texcoord(global.v_buff, 1, 0);
- //Vertex3
- vertex_position_3d(global.v_buff, x2, y1, z1);//3d position
- vertex_colour(global.v_buff, c_white, 1);
- vertex_texcoord(global.v_buff, 1, 1);
- //Vertex4
- vertex_position_3d(global.v_buff, x2, y2, z2);//3d position
- vertex_colour(global.v_buff, c_white, 1);
- vertex_texcoord(global.v_buff, 1, 1);
Das Objekt das die ganze Schoße dann zeichnet:
GML-Quellcode
- d3d_set_perspective(true);
- //Vertexbuffer zeichnen
- tex = background_get_texture(tex_grass);
- shader_set(shader0); // verwende den Standartshader also den Code der schon da steht wenn man einen Shader erstellt
- vertex_submit(global.v_buff, pr_trianglestrip, tex);//muss doch trianglestrip in meinem Fall sein, richtig?
- shader_reset();
Also wo liegt das Problem? Mit den d3d_model-Funktionen kam ich bei einer riesiegen Landschaft aus Würfeln (alá Minecraft) wenigstens auf 20 FPS. Und wenn wir schon dabei sind... wie funktioniert das Setzen der UV-Koordinaten?
Das soll mal flüssig laufen:

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Morpheus ()