Limitierung von Objekten für B3D ?

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

CrowSmith

ehemals "Fleisch"

Betreff: Limitierung von Objekten für B3D ?

BeitragSa, Nov 12, 2011 22:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo.

Arbeite gerade an einem manuellen Terrain-Generator. Jeder Pixel wird in einen Vertex gespeist. Vier dieser Vertexes (Border-Vertexes) im Quadrat = ein zusätzlicher, der Middel-Vertex. Bei einer Heightmap von 20*20 pixeln ergibt sich somit folgendes:

1. 361 Border-Vertexes (19*19)
2. 324 Middle-Vertexes (18*18)
3. 1444 Triangles

Für jedes Vertex wird eine Sphere erstellt (Border-Vertexes = blau, Middle-vertexes = rot). Dies dient später zum visuellen erfassen selektierter Vertexes (Werden dann gelb markiert) und zum Unterscheiden von Border- und Middle-Vertexes.

Nehme ich eine 50*50 HM habe ich schon ansatzweise Probleme, doch bei 100*100 klappt garnichts mehr... keinerlei Reaktion auf Eingaben, totaler Einbruch der fps, usw....

Habe mir testweise diverse andere (größere) HMS aus dem Netz geholt, z.B. eine von Großbritannien. DA wird dann sogar bei der erstellung gemeckert:

Code: [AUSKLAPPEN]

Runtime Error

Das Fenster ist schwarz, kann also keine Fehlermeldung lesen...

Danach kommt dann
Code: [AUSKLAPPEN]

Entity does not exist

wahrscheinlich weil gewisse Spheres nicht mehr erstellt wurden...

Danach kann ich B3D nurnoch beenden...


Ich verstehe das nicht... liegt das an meinem zugegebenermaßen nicht ganz so leistungsstarken Notebook oder an B3D ? Ich meine, ich kann ja mit meinem Notebook auch so manches Spiel spielen. Und ich kann mir kaum vorstellen, dass so ein paar Spheres,Vertexes und Triangles anspruchsvoller sind als gewisse Spiele...

Was kann ich tun? Kann ich überhaupt was tun? Muss ich auf BMAX umsteigen für "größere" Terrains?

Bitte dringend um Hilfe...
Worklogs: TotalWar2D
Wbsites: Privat / Entwicklerstudio / Gewerbe (Folgen bald)
Smartphones: Samsung Galaxy S I9000 / Samsung Galaxy S2 I9100 / Samsung Galaxy S3 (Kommt 2012)
Notebook 1: HP Pavillion DV6700 (AMD 64 X2 TL-60 @ 2.00GHz, 4GB DDR3 1333MHz, Nvidia GeFroce 8400M GS, Win Vista Home Premium 32Bit)
Notebook 2: HP Pavillion DV6t Quad Edition (KOMMT BALD =] )
Notebook 3: Clevo X7200 (KOMMT BALD =] )
Desktop: (KOMMT BALD =] )

ZaP

BeitragSa, Nov 12, 2011 23:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn Du auf einer 50² Map für jedes Vertex eine Sphere erstellst (die hat vielleicht nochmal 100 Tris), dann kannst Du quasi davon ausgehen, dass deine Grafikkarte in die Knie geht.
Versuchen könntest Du, mit CameraProject für jeden Vertex ein Oval zu zeichnen, ich denke, das ist schneller.
Empfehlen kann ich dir aber nur das Blitz-eigene Terrain, weil dort gleich ein LOD Algorithmus mitläuft, so dass weniger Vertices in größerer entfernung benutzt werden.
Starfare: Worklog, Website (download)

BladeRunner

Moderator

BeitragSo, Nov 13, 2011 9:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn Du 100*100 Pixel abdecken willst, musst Du ja schon fast 20k Objekte erstellen. Jedes davon hat seine eigene Surface und belegt als Sphere ordentlich Tris. Damit treibst Du jede Grafikkarte in den ntergang.

ad1: Ersetze die Spheres durch Cubes. Das spart schonmal zigtausende Polygone ein. Wird aber vermutlich nicht genug sein, denn die Massen an Surfaces sorgen dafür dass die Renderpipeline masslos verstopft wird.

daher ad2: Erstelle dein "Netz" auf einer einzelnen Surface (oder zumindest einigen wenigen). Dann sollten sich viele deiner Probleme in Luft auflösen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

CrowSmith

ehemals "Fleisch"

BeitragSo, Nov 13, 2011 14:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Zu 1: Ok ist ne klasse Idee, besser als 2D Ovals zu verwenden, denn das sieht nicht aus.

Zu 2: Wie mache ich das? (Soweit ich weiss) verwende ich ja nur ein Surface :S

Code: [AUSKLAPPEN]

brush = CreateBrush(100,100,100)
mesh = CreateMesh()
surface = CreateSurface(mesh, brush)


Habe es nur ein Mal deklariert/definiert... ist das so richtig oder falsch?

Gruß, CrowSmith
Worklogs: TotalWar2D
Wbsites: Privat / Entwicklerstudio / Gewerbe (Folgen bald)
Smartphones: Samsung Galaxy S I9000 / Samsung Galaxy S2 I9100 / Samsung Galaxy S3 (Kommt 2012)
Notebook 1: HP Pavillion DV6700 (AMD 64 X2 TL-60 @ 2.00GHz, 4GB DDR3 1333MHz, Nvidia GeFroce 8400M GS, Win Vista Home Premium 32Bit)
Notebook 2: HP Pavillion DV6t Quad Edition (KOMMT BALD =] )
Notebook 3: Clevo X7200 (KOMMT BALD =] )
Desktop: (KOMMT BALD =] )
 

Matthias

BeitragSo, Nov 13, 2011 14:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hay. Hatte mal ähnliches vor.

Vileicht hilft dir das weiter. Very Happy
https://www.blitzforum.de/foru...ausrichten

BladeRunner

Moderator

BeitragSo, Nov 13, 2011 15:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Jedes Objekt was Du in B3D erstellst bringt sein eigenes Surface mit auf den Weg. Daher müsstest Du eben auch bei der Erstellung der Cubes auf den B3D-Befehl verzichten und sie aus eigenen Vertices erstellen, die dann auf einer einzelnen Surface liegen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Lobby

BeitragSo, Nov 13, 2011 15:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Oder eben einmal von B3D per CreateCube (o.Ä.) erstellen, deinem Zielmesh in modifizierter Form (siehe PositionMesh, ScaleMesh) über AddMesh so oft wie nötig hinzufügen und anschließend wieder entfernen per FreeEntity (am besten So, dass der Cube wirklich nur einmal erstellt werden muss). Intern ist das zwar mehr Arbeit für B3D, dafür aber muss man sich vor allem bei komplexeren Objekten nicht mit deren manuellen Erstellung beschäftigen.

Dein Code scheint soweit völlig korrekt zu sein, alles Weitere kannst Du über die nun beschriebenen Verfahren hinzufügen.
 

bjh

BeitragSo, Nov 13, 2011 16:12
Antworten mit Zitat
Benutzer-Profile anzeigen
erstell doch einfach ein objekt mit nur 4 vertexen und polygonen für die spheres oder würfel und kopier die dann mit copyentity(). dann spart man sich noch mehr polygone als beim würfel.

CrowSmith

ehemals "Fleisch"

BeitragSo, Nov 13, 2011 18:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo.

Habe es jetzt doch mit Ovals gemacht, so spare ich sehr viel Leistung ein, das stimmt... gefällt mir zwar nicht sonderlich aber ist ja auch keine Frage der Schönheit sondern der Funktionalität. Via CameraProject habe ich mir aus den 3D-koordinaten der Vertexes die benötigten 2D-Koordinaten für die Ovals besorgt.

Naja danke für euere Hilfe!

Gruß, der CrowSmith
Worklogs: TotalWar2D
Wbsites: Privat / Entwicklerstudio / Gewerbe (Folgen bald)
Smartphones: Samsung Galaxy S I9000 / Samsung Galaxy S2 I9100 / Samsung Galaxy S3 (Kommt 2012)
Notebook 1: HP Pavillion DV6700 (AMD 64 X2 TL-60 @ 2.00GHz, 4GB DDR3 1333MHz, Nvidia GeFroce 8400M GS, Win Vista Home Premium 32Bit)
Notebook 2: HP Pavillion DV6t Quad Edition (KOMMT BALD =] )
Notebook 3: Clevo X7200 (KOMMT BALD =] )
Desktop: (KOMMT BALD =] )

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group