Grafik Engine

Übersicht BlitzBasic Blitz3D

Gehe zu Seite Zurück  1, 2, 3  Weiter

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.

 

X0r

BeitragSa, Jul 29, 2006 14:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, kein render. Reicht hin. Ich muss die Teile dann nicht extra nochmal zeigen(Für statische meshes).


Und mit dynamischen, als z.B animierbare Character? Würde das speed klauen, wenn sie alpha 0 hätten und animieren würden?
 

Dreamora

BeitragSa, Jul 29, 2006 14:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja

Was deaktiviert werden soll, muss mit HideEntity deaktiviert werden ...
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Phalastos

BeitragSa, Jul 29, 2006 14:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Boahh Junge, hattest wohl heute den 10. Geburtstag und meinst hier alle abnerven zu können?

Warum nutzt Du Engineoberchecker nicht einfach die A6 vom 3DGS?
Mit Deinen Fähigkeiten reicht doch DX7 nicht aus, da sollte DX9 Pflicht sein.
Forbiddenmagic - Warfare of Forgotten Power
 

X0r

BeitragSa, Jul 29, 2006 15:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Was bist du denn für einer? Ich frage wenigstens freundlich.

A6 vom 3DGS? Kenn ich nicht. Wo soll man das denn bekommen?

Und wie kann B3D DirectX9 ansprechen??


Eine Frage hätte ich da noch:
Sagen wir, ich würde eine kleine Partikel Engine programmieren. Wie genau müsste ich das machen? So, dass die Partikel nur für z.B bestimmte Waffen sind oder allgemein für alles nutzbar sind?
Wie sollte man sowas aufbauen?

aMul

Sieger des Minimalist Compo 01/13

BeitragSa, Jul 29, 2006 15:55
Antworten mit Zitat
Benutzer-Profile anzeigen
So wie es dir am besten erscheint Rolling Eyes
Wenn die Partikel universell einsetzbar sind, bedeutet das auch immer das Funktionen vorhanden sind die nicht genutzt werden(s. PartikelCandy(nichts gegen PC Wink )). Das kann natürlich alles wieder langsamer machen als es sein müsste.

Ich bin z.B. gerade dabei einen Asteroids-Klon zu schreiben, und habe für alle "Partikel"-Arten(Ateroiden, Schüsse, Explosionen, etc.) je eine eigene Routine, einen eigenen Type und ein eigenes Surface(insgesamt hat mein Spiel 10Surfaces oder so...).

Zu deinem Problem mit den Würfeln: "Copyentity"

Der Effekt ist ähnlich wie von Singlesurfacemethoden, nur das man eben nicht ständig alle Polys neu erstellen muss(in meinem Spiel läufts bei 500Entitys immer noch mit 300FPS, weil ich Copyentity verwende, und deshalb nur 10Surfaces an die Graka gesendet werden müssen, und nicht 500).

Ich hoffe ich konnte helfen Rolling Eyes

MfG
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver
 

X0r

BeitragSa, Jul 29, 2006 16:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok. Ich versuchs.


Aber ich will eine richtige Engine schreiben. Bei meinen bisherigen Spielen(Siehe oben) habe ich für jedes immer ein type verwendet. Aber das ist keine Engine. Es soll ja Funktionen zur Verfügung stellen.


Also, wie sollte man sowas machen. Eher immer Partikel für jede Waffe oder allgemein für alles.

BladeRunner

Moderator

BeitragSa, Jul 29, 2006 16:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab Dich nicht angemotzt, ich habe nur einen Fakt genannt.Das Problem ist - schon seit Wochen und über mehrere Threads verteilt - dass Du nicht verstehst / akzeptierst dass Du einen falschen Grundweg eingeschlagen hast.
15000 polys für ein Modell ist gnadenlos zuviel.
Und 7000 Entities zu Rendern zwingt auch jeden Rechner in die Knie.
Was Du tun musst (und ich wiederhole mich heute und hier zum letzten mal, da mir deine frech-fordernde Art langsam aber sicher gehörig auf den Zeiger geht)) ist Deine Modelle zu optimieren, möglichst viele Surfaces einzusparen und auch ansonsten Überlegungen in Richtung Sichtoptimierung anzustellen (Octree, Levelgestaltung, etc.)

All dies wurde Dir schon mehrfach genannt und Du wischst es einfach weg weil es Dir nicht in Dein Gedankenkonzept passt.
Es ist halt immer leichter die Schuld den Umständen zu geben als an sich selbst zu arbeiten.

Nach dem Problemcode gefragt gibst Du erst mal zu keinen Code zu haben (was ja schon witzig für sich ist: Motzen ohne es richtig probiert zu haben) und postest dann ein ohne Überlegung zusammengeschustertes Beispiel hin, und das nachdem Dir dutzende Male Tipps zum verbessern gegeben wurden.

Mein finaler Tipp an Dich: Arbeite an Dir selbst. Lass das Programmieren sein und werd erst mal selbst etwas reifer. Lerne mit Kritik umzugehen und Vorschläge anderer zu betrachten ohne sie als Angriff zu werten.
Dann analysiere wo der Fehler wirklich liegt. Und liess Dir gottverdammtnochmal die Posts anderer vernünftig durch. Es scheint nämlich als pralle jeder Versuch Dir zu helfen einfach an Dir ab.
Mir persönlich wird das hier zu viel. Ich investiere meine Zeit in Zukunft in Leute die bereit sind sich helfen zu lassen und die aktiv mitarbeiten.
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
 

X0r

BeitragSa, Jul 29, 2006 16:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Edit: Weiß zwar nicht wer die flames gelöscht hat, aber Danke!

Also nochmal zu meinem Beispiel: http://ultimative.ul.ohost.de/Forum/files/text.exe


Was haltet ihr davon? Könnte man das noch sauberer machen?

BladeRunner

Moderator

BeitragSa, Jul 29, 2006 23:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Das war ich, bin nun zuhause.
Also:
- Deine Häuser haben ~5000 tris in 3 Surfaces pro Stück. Das ist viel zu viel.
In Deinem Beispiel sind das dann 192 Surfaces und 320000 tris. Wenn Du die Gebäudemodelle vereinfachst (und mal im ernst: es sind grosse Boxen, mehr nicht) kommst du auf 12 Tris pro Haus, bei einer Surface. Ne schöne Textur drauf und Du hast dieselben Gebäude. Macht dann für dieselbe Szene 768 Tris bei 64 Surfaces. Ein klitzekleiner Unterschied, nicht wahr ?
Dann sind die Häuser zwar initial mal nicht begehbar, aber das liesse sich rasch beheben (Innenraum "laden" wenn sich der Player der Tür eines Gebäudes nähert.).
Bislang wurde also noch nix am Code geändert und dennoch würdest du schon nur noch einen Bruchteil an Grakaleistung benötigen.
Wenn Du nun noch auf Singlesurface umsteigst (d.h. nicht mehr alle Häuser einzeln erstellst sondern sie zu einem Mesh zusammenfasst) wird sich die Performance drastisch erhöhen. Eine zweite Surface könnte dann Innenräume abdecken.
Weiterer Gewinn an Leistung ist durch eine Optimierung der Levelarchitektur drin (unterteile Deine Karte in Quader. Das Quader in dem der Player ist wird normal dargestellt. Die umliegenden werden mit vereinfachten Strukturen (LOD) gezeichnet, die darum liegenden sind komplett gehidet oder werden sogar noch nicht geladen. Wenn der Player sich einer Grenze zu einem anderen Quader nähert wird dieser vorsorglich eingeladen.
Und damit kratze ich nur an der Oberfläche des Machbaren.
In dem Umfang in dem Du die Möglichkeiten nutzt steigt eben auch der Umfang.
Vieles lässt sich jedoch durch nachdenken erreichen. Was sieht der Spieler? Welche Möglichkeiten gibt es zur Kameraführung ? etc. etc.
Schon ein wenig Vorplanung lässt hier viele Probleme verschwinden.

Nochmal: vereinfache deine Modelle. Hier liegt massig Potential. Mit Texturen lässt sich vieles erreichen was nach wesentlich mehr Tris aussieht.
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
 

X0r

BeitragSo, Jul 30, 2006 0:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok. Also, wenn Sie SingleSurface meinen, dann könnte ich das genauso gut gleich mit einem WorldEditor machen. Dann hätte ich die ganze Stadt als ein entity.
Das wäre dann die beste Möglichkeit, entities zu reduzieren.

Edit: Ups. Da fällt mir wieder ein. Ich sollte das ja mit entityautofade machen, damit nicht alles rendert. Aber das ist ja ein ganzes entity. Was nun?


Die Häuser haben außerdem transparente Fenster usw. Wenn ich nochmal den ganzen Kram laden müsste, hätten ich wieder das Problem mit den vielen entities.


Also ich habe vor:
Die Stadt mit den statischen meshes mit einem Worldeditor zu machen und die dynamischen muss ich dann im Spiel selber integrieren.


Wäre das so ok? Und von mir aus lass ich den Prunk an den statischen Gebäuden weg.


Aber nochmal zu einer Engine, ich bin gerade dabei eine zu schreiben. Bisher:
Code: [AUSKLAPPEN]

;Virtual Engine 2006
;


;--------------------------------------------
;Mirror
;--------------------------------------------
Function vgCreateMirrorTexture(size,mesh)
mirror_texture=CreateTexture(size,size,1+128+256)
EntityTexture mesh,mirror_texture
Return mirror_texture
End Function


Function vgCreateMirrorView()
mirror_camera=CreateCamera()
HideEntity mirror_camera
Return mirror_camera
End Function


Function vgUpdateMirror(mirrortex,mirrorview,mesh)
tex_size=TextureWidth(mirrortex)
ShowEntity mirrorview
HideEntity mesh

PositionEntity mirrorview,EntityX#(mesh),EntityY#(mesh),EntityZ#(mesh)

CameraViewport mirrorview,0,0,tex_size,tex_size
tex_sz=tex_size

CameraClsMode mirrorview,False,True

   SetCubeFace mirrortex,0
   RotateEntity mirrorview,0,90,0
   RenderWorld
   CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(mirrortex)
   
   SetCubeFace mirrortex,1
   RotateEntity mirrorview,0,0,0
   RenderWorld
   CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(mirrortex)
   
   SetCubeFace mirrortex,2
   RotateEntity mirrorview,0,-90,0
   RenderWorld
   CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(mirrortex)

   SetCubeFace mirrortex,3
   RotateEntity mirrorview,0,180,0
   RenderWorld
   CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(mirrortex)
   
   SetCubeFace mirrortex,4
   RotateEntity mirrorview,-90,0,0
   RenderWorld
   CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(mirrortex)
   
   SetCubeFace mirrortex,5
   RotateEntity mirrorview,90,0,0
   RenderWorld
   CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(mirrortex)
   
HideEntity mirrorview
ShowEntity mesh
   
End Function


Ist das eine Engine? Eigentlich schon, oder? Es stellt mir neue Funktionen zur Verfügung welche mir das Programmieren erleichtern.

Lunatix

BeitragSo, Jul 30, 2006 2:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Sowas nennt man Lib, da es dir nur eine sammlung von Funktionen zur verfügung stellt.

Engine müsstest du wohl oder übel mit C++ oder so machen
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...
 

X0r

BeitragSo, Jul 30, 2006 2:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Nicht ganz:
http://www.blitzbasic.com/tool...hp?tool=50

Das ist auch eine Engine. Es muss nicht in C++ geschrieben sein.
KEnnst du UI? Ist auch eine GUI Engine für Blitz3D, natürlich geschrieben in Blitz3D. UI z.B ist eine Sammlung von Funktionen.

Engines sind nichts weiter als "motors", die gute Funktionen zur VErfügung stellen.
Oder ist das etwas anders??
Eigentlich nicht.


Und meins müsste dann auch eine kleine sein, denn sie stellte neue leichtere Funktionen zur VErfügung. Oder etwa nicht?

Lunatix

BeitragSo, Jul 30, 2006 2:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Mh. Weiss nich so genau... es wär eine Engine auf einer Enige rogrammiert Laughing
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...
 

X0r

BeitragSo, Jul 30, 2006 2:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Jap. So ist es. Es ist aber trotzdem eine Engine, sobald es neue Funktionen zur Verfügung stellt. Bei UI z.B, kann man Windows, Buttons und und und erstellen, all dies sind Funktionen von der der Engine.

P.S: loadmesh("") ist auch nur eine Funktion. Zwar von BB direkt selber, aber Funktion ist Funktion.


Ich finde Engines schreiben klasse. So kann man sich vieles erleichtern. siehe mein Beispiel oben.

maximilian

BeitragSo, Jul 30, 2006 3:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Kleiner Hinweis: Würde Half-Life 2 alle Polygone eines Meshes rendern würde es auch ruckeln. Selbst mit einfacher B3D-Engine geht das Spiele machen nicht automatisch.
Der Trick besteht darin, Polygone die nicht gerendert werden müssen, weil sie nicht sichtbar sind NICHT zu rendern. Das ist garnicht so einfach und gehört definitiv zu den Profi-Themen.

Ich empfehle dir dich mal um BSP-Trees zu kümmern (und die hat außer Vertex anscheinend noch KEINER hier realisieren können) oder ganz einfach aufhören zu meckern. Blitz3D-Spiele rendern nämlich Polys genauso schnell wei HL², wenn nicht sogar schneller, da kein Shader-Spielkram benutzt wird.
Variety is the spice of life. One day ignore people, next day annoy them.
 

Dreamora

BeitragSo, Jul 30, 2006 11:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum niemand BSP geschrieben hat: Weils für non-Shooter wertlos is Wink
Das UT Format macht da mehr sinn, nur leider ist das nicht offen nutzbar ...

Bleibt Quad / OctTree und PVS überlegungen, welche für anfänger eh einfacher umzusetzen sind als pure Mathematik (die die meisten hier leider nicht beherrschen weswegen sie 3D vielleicht auch besser lassen sollte. Matrizen und Vektoren sind Grundhandwerk für 3D)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

X0r

BeitragSo, Jul 30, 2006 15:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, mit meinen 14 Jahren kann ich ja wohl nicht gleich einen Half Life Klon machen. Was erwartet ihr von mir?? Mit aligntovector Zeugs kenn ich mich ein bisschen aus, Matrizen hatten wir noch garnicht in der Schule, falls man sowas überhaupt hat.
Achja: An Half Life sitzt bestimmt nicht eine Person alleine. Wink

Warum unbedingt Polys?
BEi meinem BEispiel sind das 49 Gebäude, es geht eigentlich. Und wenn ich das zu einem Spiel umsetzen würde, würde ich dieses entityautofade machen und die weiter weg liegenden Häuser würden nicht gerendert werden. Ist doch alles ok.
Ich muss gucken. Wir sehen uns dann, wenn weitere Probleme auftreten.


Aber nochmal(An die, die meinen, es zu wissen): Ist das da oben eine Engine oder nicht. Darf man sowas engine nennen?


Edit: Moment! Was ist mit TheProgrammers Spiel? Ist auch flüssig! Ist das bei seinem Spiel normal, weil da nur einige models sind oder hat der auch "getrickst"? In der showcase antwortet er ja nicht.


Achja, noch was zum tollen speed; http://sonas.so.ohost.de

Guckt euch die Halo Bilder an, die ich ich wärend des net Spiels gemacht habe. Da wird glaube ich nichts versteckt und es ist sau flüssig und schnell.

BladeRunner

Moderator

BeitragSo, Jul 30, 2006 16:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Begrifflichkeit (ob engine oder lib) ist doch erstmal egal. Wen interessierts, hauptsache der Code läuft.
Zu GTA, Halo und co: Die Kunst liegt ja darin so zu "tricksen" dass es der User nicht merkt. Diese Spiele kommen nicht umhin alles auszublenden was nicht unbedingt benötigt wird. Dass Du es nicht merkst heisst nur dass der Programmierer gut mit dem Leveldesigner zusammengearbeitet hat und dass beide ihr Handwerk verstanden.

Übrigens erstellst Du in deinem Beispiel 64 Gebäude - beide Schleifen gehen von 0 bis 7.
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

Black Spider

BeitragSo, Jul 30, 2006 17:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Naja, mit meinen 14 Jahren kann ich ja wohl nicht gleich einen Half Life Klon machen. Was erwartet ihr von mir?? Mit aligntovector Zeugs kenn ich mich ein bisschen aus, Matrizen hatten wir noch garnicht in der Schule, falls man sowas überhaupt hat.


Ich bin ebenfalls nicht viel älter als 14, und ich habe das geschrieben:
https://www.blitzforum.de/foru...hp?t=18970

Alleine. 73 Gebäude, KI´s, ne Menge Sprites (für die Blutlachen etc.) und das schrotgewehr hat sogar 1000 Poly´s; und alles noch mit Toonshading (was ne Menge zieht) und Outlines.
Läuft flüssig! Woran liegt´s? Ich hab´ noch nicht mals mit AddMesh() gearbeitet (was ich bald allerdings ändern werde),
sondern alles was nicht gebraucht wird versteckt.
CameraRange kleingestellt, und damit´s nicht blöd aussieht Nebel reingepackt,
die Updates nur dann durchgeführt wenn´s nötig war, etc.
So kannst du einiges raushauen,
und zur Engine:
furbolg hat Folgendes geschrieben:
Eine "Engine" (zu Deutsch Motor) heisst das sich ein gewisser Code um bestimmte Sachen alleine kümmert (z.b. SceneGraph ums rendern etc.).
Die meisten Leute hier um Forum nutzten den Begriff Engine weil es sich besser anhört, aber teilweise sind es einfach nur Funktionen. Eine Engine muss mehr können. Nebenbei ist DX / OGL keine Engine sondern eine Pipeline. Engine verwaltet und organisiert Daten für ihren Aufgabenbereich.


d.h. eine PhysikEngine wäre nicht mehr als eine Funktion die so aussehen könnte:
Code: [AUSKLAPPEN]

Function UpdatePhysics(obj)

;--- schwerkraft
TranslateEntity obj,0,-1,0

;--- etc.
...
End Function
Coming soon:
http://img132.imageshack.us/im...im2ab6.gif
 

X0r

BeitragFr, Aug 04, 2006 19:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ähhh....guuut. Aber das sind nicht unbedingt viele Polygone in deinem Spiel.
Ich will aber was großes machen, was schnelles.
Ich finde Speed verdammt wichtig. Wenn der hin ist, dann ist das Spiel auch hin.

Apropo speed: Toll. Dann kann ich ja gleich alles statische verstecken, was nicht im View ist. Aber schonmal an Gegner gedacht? Die vielleicht sogar schießen können und diese Kugel vielleicht sogar mit Gebäude kollidieren können sollen?

Und was ist jetzt mit einer schnelleren 3D Engine für B3D? Gibts da was? Vielleicht eine, die DirectX 9 oder so verwendet?


Achja, zu den Gebäuden, sollte man das mit arrays oder einfach mit types und fields machen?

Gehe zu Seite Zurück  1, 2, 3  Weiter

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group