3D Tilemap
Übersicht

InsoBetreff: 3D Tilemap |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Huhu.. da alle meine versuche bisher fehlschlugen hab ich mir überlegt das mapping in etwa wie bei minecraft umzusetzen(wobei das spielprinzip ein anderes sein wird).
nun hab ich mich mal eben drüber gemacht und probiert das ganze über ein array zu lösen.. doch leider ist das ganze seeeehr seeeehr langsam, und das selbst bei einer vergleichsweise kleinen map ist alles sehr sehr laggy, und die texturen flackern hart. vielleicht weiß jemand eine bessere lösung als meine, hier im anhang der code: edit: hab mal die camerarange drastisch reduziert auf 160, läuft flüssiger, aber die texutren flackern immernoch, und richtig flüssig isses immernoch nicht =( Code: [AUSKLAPPEN] AppTitle "3D Funktionalitätstest" Graphics3D 1024,768,16,2 KEY_ESCAPE=1 KEY_A=30 KEY_D=32 KEY_S=31 KEY_W=17 KEY_E=18 KEY_Q=16 ;Umgebung erstellen, angefangen mit Kamera und Licht Global camera=CreateCamera() ; Spieler cam laden Local light2=CreateLight() ; Globales Licht laden RotateEntity light2,0,90,0 ; Licht umdrehen LightRange light2,1000 ;Lichtweite einstellen CameraRange camera,0.1,5000 ;Camerasichtweite MoveEntity camera,0,150,0 EntityType camera,1 ; Collisionstyp der Camera(spieler)auf 1 setzen! loadingvar = 0 loadprogress = 0 Dim Map(30,20,30,3) Global texture = LoadTexture("data/textures/myGrasTex1.jpg") For Tx= 0 To 29 For Ty = 0 To 19 For Tz = 0 To 29 loadingvar = loadingvar + 1 If loadingvar = 180 loadingvar = 0 loadprogress = loadprogress +1 Print loadprogress EndIf map(Tx,Ty,Tz,1) = CreateCube() ScaleEntity map(Tx,Ty,Tz,1),16,16,16 If map(Tx,Ty,Tz,2) = 0 Then EntityTexture map(tx,ty,tz,1),texture PositionEntity map(tx,ty,tz,1),-272+(tx*16),-240+(ty*16),-272+(tz*16) Next Next Next While Not KeyHit(KEY_ESCAPE) If KeyDown(KEY_A) TurnEntity camera,0,-5,0 If KeyDown(KEY_D) TurnEntity camera,0,5,0 If KeyDown(KEY_S) MoveEntity camera,0,0,-2 If KeyDown(KEY_W) MoveEntity camera,0,0,2 If KeyDown(KEY_Q) TurnEntity camera,10,0,0 If KeyDown(KEY_E) TurnEntity camera,-10,0,0 UpdateWorld RenderWorld Flip Wend |
||
- Zuletzt bearbeitet von Inso am Fr, Nov 25, 2011 0:23, insgesamt einmal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mit jedem Würfel per CreateCube() muss die Grafikkarte ein Surface bearbeiten, das dauert. Du müsstest die Geometrie mit einer Single-Surfaceengine selbst erstellen und verwalten. Einem Anfänger würd ich's nicht empfehlen. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Inso |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Naja, ich lern schnell ![]() Versuch mir das mal genauer zu erklären. Quasi alle gleichen Würfel zu einer Mesh zusammenfassen? Aber wie lös ich das ganze wieder auf, um einen block/tile zu ändern/zulöschen? (Soll ein 3d mapeditor werden) |
||
bjh |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
du musst die ecken und triangles selber erstellen mit
BlitzBasic: [AUSKLAPPEN] mesh=CreateMesh() BlitzBasic: [AUSKLAPPEN] surface=CreateSurface(mesh) BlitzBasic: [AUSKLAPPEN] vertex=AddVertex(surface,x,y,z,u,v) BlitzBasic: [AUSKLAPPEN] AddTriangle surface,vertex1,vertex2,vertex3 usw. du brauchst also eine funktion, die dir das zeug anstatt den würfeln erstellt. |
||
Inso |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
also die einzelnen würfel per surface erstellen ja?
aber wie entscheid ich welche flächen des würfels nun erstellt werden? hab mir auch noch ne 2. möglichkeit überlegt. dass die map auf der der spieler läuft nichts weiter als die reichweite der sichti st. also ich hab eine map (100,100,100) und eine sichtweite(20,20,20) also kann ich quasi 20 blöcke weit sehen, in alle richtungen, alle andern blöcke werden nicht gezeichnet würde das funktionieren? und wie könnte ich das am besten realisieren? bzw wärs ja noch besser wenn nur die blöcke da sind, die der spieler auch sehen kann... aber wie mach ich das? wäre das nich unheimlich rechenaufwendig in echtzeit ständig die meshes zu löschen und neue zu erstellen? |
||
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du alles aus Würfeln machen möchtest, muss du jedes Polygon bei der Single-Surface-Technik selbst erstellen.
1 Würfel = 6 Flächen = 12 Polygone = 8 oder 36 Vertices Zuerst erstellst du das Mesh also das Gitterobjekt, dann kannst du (fast) beliebig viele Surfaces(Oberflächen) erstellen, ein Surface kann nur eine Textur(oder auch Multitextur aber auch eine animierte Textur) annehmen. Nun kannst du dem Surface beliebig viele Vertices hinzufügen, diese musst du mit AddTriangle ![]() Du siehst also, dass es dann doch nicht ganz so einfach ist. Schau dir mal die Befehle, die dir bjh schon geschrieben hat an, verstehe was passiert und spiele damit rum, um im Endeffekt einen Würfel zu erstellen. Danach kannst du dich daran machen, mehrere Würfel zu erstellen. [Edit]Ach ja, die UV-Koordinaten der Textur musst du auch noch selber setzen, damit diese anständig angezeigt werden[/Edit] |
||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
Inso |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Okay, hab mich auch schon bissl weiter in das Thema eingelesen, was ich grad nicht verstehe,.. wie kann ein würfel aus 8 bzw 36 vertices bestehen?
8 versteh ich, aber 36 nicht, 8 weil sich die flächen ja die vertices teilen, und ich diese vertices nur verbinden muss aber das mit den 36 versteh ich nicht, warum für jede fläche des würfels komplett neue vertices verwenden? hat das vorteile? ich kann mir das ganze schon ein wenig zusammen reimen, was ich allerdings nicht ganz raffe ist folgendes ich hab mal ein bild angehängt: ich hab jetzt einen soliden(texturierten) würfel da stehen, bestehend aus 8 vertices, daneben rechts ist ein leerer würfel, der also nicht mit gezeichnet wird, daneben links ist nocheinmal der selbe würfel, auch texturiert. jetzt sag ich meinem programm ein block-X weiter ist ein fester block, also zeichne die rechte seite nicht. beim nächsten block die selbe abfrage, aber weil ein block-x weiter kein fester block ist: zeichne die rechte seite aber wie überprüf ich am besten welche seiten gezeichnet werden sollen? und angenommen, ich kille jetzt einen block, wie update ich das ganze? also jetzt sind ja bis zu 6 neue seiten sichtbar, wie mach ich das in echtzeit? bzw wie krieg ich überhaupt erst den block gekillt in echtzeit? ohne die ganze map neu zu laden? http://www.xup.in/dl,11472001/cubes.png/ |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group