MeshTerrain mit DirectX Triangles

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

Matthias

Betreff: MeshTerrain mit DirectX Triangles

BeitragDo, Sep 06, 2007 13:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Hay. Leztens hatte ich hier im BMaxForum eine sehr schöne hilfe zu dem Thema ein Images verschieben bekommen. Allerdings wurden dazu Befehle benutzt die in BMax überhaupt nirgendswo zu finden sind.
Und nun meine Frage wo bekommt mann mehr informationen über diese versteckten Befehle her.

Ersteinmal der Code.
Code: [AUSKLAPPEN]

SuperStrict

Graphics( 800, 600, 0 )

Local image:TImage = LoadImage( "test.bmp" )

Global driver:TD3D7Max2DDriver = D3D7Max2DDriver( )
Global dev:IDirect3DDevice7 = driver.device

While( Not( KeyDown( KEY_ESCAPE ) Or AppTerminate( ) ) )
   Cls
   
   DrawFreeformImage( image, [100.0, 100.0], [500.0, 100.0], [700.0, 500.0], [300.0, 500.0], 0 )

   Flip
Wend

Function DrawFreeformImage( image:TImage, v1:Float[], v2:Float[], v3:Float[], v4:Float[], frame:Int )
   If Not image Return

   Local verts:Float[24]
   Local color:Int = driver.drawcolor
   
   verts[0] = v1[0]; verts[1] = v1[1]
   verts[2] = 0
   verts[3] = Float Ptr( Varptr color )[0]
   verts[4] = 0; verts[5] = 0
   
   verts[6] = v2[0]; verts[7] = v2[1]
   verts[8] = 0
   verts[9] = Float Ptr( Varptr color )[0]
   verts[10] = 1; verts[11] = 0
   
   verts[12] = v3[0]; verts[13] = v3[1]
   verts[14] = 0
   verts[15] = Float Ptr( Varptr color )[0]
   verts[16] = 1; verts[17] = 1
   
   verts[18] = v4[0]; verts[19] = v4[1]
   verts[20] = 0
   verts[21] = Float Ptr( Varptr color )[0]
   verts[22] = 0; verts[23] = 1
   
   driver.SetActiveFrame( TD3D7ImageFrame( image.frame( frame ) ) )
   dev.DrawPrimitive( D3DPT_TRIANGLEFAN, D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1, verts, 4, 0 )
End Function

Der Code ist von ProGamer.Coder

Ich möchte gerne eine 3DLandschaft machen. Die allerdings immer nur aus der Vogelperspecktive zu sehen ist. Aber drozdem noch Zoombar bleibt.
Sicherlich könnte mann dafür ein Images benutzen aber leider verbrauchen diese für ein sehr großes Land viel zu viel GFXSpeicher. Und auch Tiles scheiden aus denn sie wiederholen sich dauernt, und das will ich auch nicht.
Mehr so eine art MeshTerrain (Blitz3D) das wäre Ideal.
 

Dreamora

BeitragDo, Sep 06, 2007 13:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ganze wird immer genau gleich viel Grafikspeicher verbrauchen, nämlich soviel wie du Bilddaten + VertexDaten hast

und die VertexDaten sind dabei vernachlässigbar.

Tiles und ein 3D Terrain sind aus der Vogelperspektive EXAKT das gleiche, da es keine Höhe gibt womit du das identische Resultat hast.

Wenn sich Tiles zu viel wiederholen ist einfach deine Map schlecht.


Denn ein Multiblend Terrain wie es mit höherstehenden Meshterrains (normale Meshterrains sind nämlich nichts anderes als 3D Tiles) in blitz3d gemacht wird kannst du nicht erzeugen mit den Standard Befehlen, dazu musst du von Max2D wegwechseln auf eine 3D Engine oder dir selbst eine Schreiben.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
  • Zuletzt bearbeitet von Dreamora am Do, Sep 06, 2007 14:46, insgesamt einmal bearbeitet
 

ChristianK

BeitragDo, Sep 06, 2007 14:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Matthias hat Folgendes geschrieben:
wo bekommt mann mehr informationen über diese versteckten Befehle her.

Bei allen Modulen ist ja der Source dabei. Darin findet man jede Menge interessante Sachen. Smile
Die Module sind aber nicht alle in BlitzMax geschrieben. Die Systemmodule und MaxGUI sind C++ und manche sind auch mit beiden Sprachen gemacht. Auf jeden Fall brauchst du etwas Zeit, wenn du den Code von Sibly verstehen willst. Der ist nämlich an manchen Stellen ziemlich verwirrend. Smile
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT
 

Matthias

BeitragDo, Sep 06, 2007 15:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für den Tipp.
Ich habe den Befehl: driver.SetActiveFrame
tatsächlich unter d3d7max2d.bmx gefunden.

Ich werde mich mal damit mehr befassen.
Ich finde zwar gut das BMax viel schneller als Blitz3D ist so vom rechnen her aber das das 3DFehlt. also das finde ich garnicht so gut.

d3d7 Heißt das das die 3D Befehle auf DirektX7 beruhen. Ich dachte immer BMax hat schon DirektX8.
 

ChristianK

BeitragDo, Sep 06, 2007 15:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Ich dachte immer BMax hat schon DirektX8.

Nö! Smile
Es gibt aber ein DirectX9-Modul für Max2D in der englischen Community. So weit ich weiß, ist das aber noch nicht fertig.
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT
 

Dreamora

BeitragDo, Sep 06, 2007 16:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Max2D selbst ist T&L compliant, das heisst DX7 und OpenGL 1.2 werden genutzt für Max2D

Das heisst aber nicht das höheres nicht da ist:
Pub.GLEW für Features höherer OpenGL Versionen und entsprechenden Definitionen für DX9

ABER: Wenn du sie nutzen willst, musst du eigene Funktionen dafür schreiben oder einen weiteren Max2D Treiber der sie nutzt.
Wie von hectic erwähnt gibt es einen DX9 Driver für Max2D, geschrieben von einem User.
Aber das wars dann auch schon.


Das Problem ist viel mehr kann man da nicht rausholen ohne einen grundlegenden Rewrite.
Ursache ist, dass Max2D keine "Tiefe" unterstützt, so das man Single Surface Optimierungen machen könnte. Das hat auch BRL herausgefunden als sie einen Batch Driver integriert haben, der langsamer war als der normale 2D Driver ...
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

ChristianK

BeitragDo, Sep 06, 2007 16:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora hat Folgendes geschrieben:
Wie von hectic erwähnt gibt es einen DX9 Driver für Max2D

Hm? Confused Very Happy

Zitat:
als sie einen Batch Driver integriert haben

Davon wusste ich gar nichts. Ist der denn jetzt schon fortgeschrittener? Oder würde es sich lohnen, selbst einen zu schreiben?
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT
 

Dreamora

BeitragDo, Sep 06, 2007 17:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich meine natürlich ProGamer.Coder Wink


Und der Driver wurde komplett rausgekickt. Das war vor dem DX7 Driver Rewrite in 1.24

Und es macht keinen sinn so etwas zu schreiben.
Ohne echte Tiefenwerte kannst du in 2D nicht gescheit batchen, da die zeichenreihenfolge elementar ist.
Damit hat es sich dann auch mit Batching -> Surface Reduction. (aktuell ist ja jedes Image ne eigene Surface)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group