GLBasic forum

Other languages => GLBasic - de => Topic started by: Schranz0r on 2011-Feb-06

Title: X_PUSHMARTIX und X_POPMATRIX evtl. noch zusätzlicher Befehl?
Post by: Schranz0r on 2011-Feb-06
Hallo Gernot

Gibt es irgendeine möglichkeit Objekte wirklich zusammenzufügen?
Also ein "aus zwei mach ein Objekt".


X_PUSHMARTIX und X_POPMATRIX klebt die Objekte ja nur zusammen :(

Heute ein weiteren Minecraft Clon gesehen und der wurde in FreeBasic gemacht o.O
Kann so nicht angehen muss in GLB auch möglich sein!

EDIT: will bei sowas Vollspeed haben :) :

Code (glbasic) Select
// --------------------------------- //
// Project: chunks
// Start: Sunday, February 06, 2011
// IDE Version: 8.232


LOCAL phi,zoom = -100

CreateCube(1,1,RGB(0xff, 0x00, 0x00))


WHILE TRUE

X_MAKE3D 1,1000,45
X_CAMERA 0,0,zoom,0,0,0



X_ROTATION phi, 1,0,0
X_CULLMODE 1

X_PUSHMATRIX
FOR x = 0 TO 29
FOR y = 0 TO 29
FOR z = 0 TO 29

X_MOVEMENT x-15,y-15,z-15
X_DRAWOBJ 1,0

NEXT
NEXT
NEXT
X_POPMATRIX

INC phi
IF KEY(200)
INC zoom, 5
ELSEIF KEY(208)
DEC zoom , 5
ENDIF


X_MAKE2D

PRINT "FPS: "+FPS(), 10, 10

SHOWSCREEN
WEND
END


// ------------------------------------------------------------- //// ---  FPS  ---// ------------------------------------------------------------- //
FUNCTION FPS:
STATIC OldTimeReport$,FPSDat,TimeReport$,FPSd
OldTimeReport$=TimeReport$; FPSDat=FPSDat+1;
TimeReport$=PLATFORMINFO$("TIME")
IF OldTimeReport$<>TimeReport$; FPSd=FPSDat ; FPSDat=0; ENDIF
RETURN FPSd
ENDFUNCTION

// ------------------------------------------------------------- //
// -=# CREATECUBE #=-
// ------------------------------------------------------------- //
FUNCTION CreateCube: num, sz, col
// Diese Variablen sind als LOCAL definiert:
// num, sz,
sz=sz/2
X_OBJSTART num
// Front Face
X_OBJADDVERTEX sz, -sz, sz, 1, 0, col
X_OBJADDVERTEX -sz, -sz, sz, 0, 0, col-100
X_OBJADDVERTEX sz, sz, sz, 1, 1, col-100
X_OBJADDVERTEX -sz, sz, sz, 0, 1, col
X_OBJNEWGROUP
// Back Face
X_OBJADDVERTEX -sz, sz, -sz, 1, 1, col
X_OBJADDVERTEX -sz, -sz, -sz, 1, 0, col-100
X_OBJADDVERTEX sz, sz, -sz, 0, 1, col-100
X_OBJADDVERTEX sz, -sz, -sz, 0, 0, col
X_OBJNEWGROUP
// Top Face
X_OBJADDVERTEX -sz, sz, sz, 0, 0, col
X_OBJADDVERTEX -sz, sz, -sz, 0, 1, col-100
X_OBJADDVERTEX sz, sz, sz, 1, 0, col-100
X_OBJADDVERTEX sz, sz, -sz, 1, 1, col
X_OBJNEWGROUP
// Bottom Face
X_OBJADDVERTEX sz, -sz, -sz, 0, 1, col
X_OBJADDVERTEX -sz, -sz, -sz, 1, 1, col-100
X_OBJADDVERTEX sz, -sz, sz, 0, 0, col-100
X_OBJADDVERTEX -sz, -sz, sz, 1, 0, col
X_OBJNEWGROUP
// Right face
X_OBJADDVERTEX sz, sz, -sz, 1, 1, col
X_OBJADDVERTEX sz, -sz, -sz, 1, 0, col-100
X_OBJADDVERTEX sz, sz, sz, 0, 1, col-100
X_OBJADDVERTEX sz, -sz, sz, 0, 0, col
X_OBJNEWGROUP
// Left Face
X_OBJADDVERTEX -sz, -sz, sz, 1, 0, col
X_OBJADDVERTEX -sz, -sz, -sz, 0, 0, col-100
X_OBJADDVERTEX -sz, sz, sz, 1, 1, col-100
X_OBJADDVERTEX -sz, sz, -sz, 0, 1, col
X_OBJNEWGROUP
X_OBJEND

ENDFUNCTION // sz
Title: Re: X_PUSHMARTIX und X_POPMATRIX evtl. noch zusätzlicher Befehl?
Post by: Kitty Hello on 2011-Feb-07
so:

Code (glbasic) Select

X_OBJSTART

FOREACH v IN obj1[]
   X_OBJADDVERTEX v....
NEXT

FOREACH v IN obj2[]
   X_OBJADDVERTEX v....
NEXT

X_OBJEND

Title: Re: X_PUSHMARTIX und X_POPMATRIX evtl. noch zusätzlicher Befehl?
Post by: Schranz0r on 2011-Feb-07
Ja könnte ich so machen, nur bekomm ich dann das Texturproblem...
Ausserdem müsste ich abchecken das verdeckte Vertices nicht erstellt werden um Performance zu steigern.

Ich bekomm nen Anfall! Wie kann es sein, das es in Freebasic einer mit den OpenGL wrapper super zum laufen bringt...
Und ich scheiter schon am Objekte in Chunks zu drücken...  :'(


Brauche dringend Hilfe!
Wenn sich 1 oder 2 Leute bereit dazu erklären da mit zu tüfteln wär ich sehr dankbar.

Ich geb keine Ruhe bevor ich das nicht auch so hin bekomme!!!  :-[
Title: Re: X_PUSHMARTIX und X_POPMATRIX evtl. noch zusätzlicher Befehl?
Post by: Quentin on 2011-Feb-07
ähem, nur so eine Idee:

Du hast die Cubes ja auch sehr klein gewählt (1). Ergo werden da 27.000 Cubes am Bildschirm dargestellt. Wenn die Cubes größer sind, sind es doch eher nur ein paar hundert oder? Da GLBasic das Clipping selbst erledigt (ist dem so?), geht das auch deutlich flotter. Habe nur spasseshalber die Größe der Cubes mal auf 10 gesetzt und siehe da, die FPS gehen auf die voreingestellten 60 hoch. Ohne Vert-Sync vermutlich noch höher.

Wie würde das denn aussehen, wenn du die größeren Objekte als ddw-Dateien vorliegen hast?
Title: Re: X_PUSHMARTIX und X_POPMATRIX evtl. noch zusätzlicher Befehl?
Post by: backslider on 2011-Feb-07
kann man mit "x_settexture" nicht die Texture während des erstellens (zwischen x_objstart und x_objend) des Chunks auf die Würfel draufbacken, oder funktioniert das nur live im mainloop vor dem zeichnen?
Title: Re: X_PUSHMARTIX und X_POPMATRIX evtl. noch zusätzlicher Befehl?
Post by: Kitty Hello on 2011-Feb-07
Die Textur - da machst Du EINE Grafik, auf der alle Blockarten drauf sind.
Die Qubes haben dann eben die korrekten UV Werte um richtig dargestellt zu werden.
Title: Re: X_PUSHMARTIX und X_POPMATRIX evtl. noch zusätzlicher Befehl?
Post by: Quentin on 2011-Feb-07
das ist schon klar, aber X_SETTEXTURE hat nur nach X_MAKE3D einen Effekt, also i.d.R. innerhalb des Main-Loop.
Title: Re: X_PUSHMARTIX und X_POPMATRIX evtl. noch zusätzlicher Befehl?
Post by: backslider on 2011-Feb-07
Wie willst du vorallem von sonem Chunk aus Würfeln wieder einzelne Würfel bearbeiten (löschen, ändern, hinzufügen)? o.O
Title: Re: X_PUSHMARTIX und X_POPMATRIX evtl. noch zusätzlicher Befehl?
Post by: Kitty Hello on 2011-Feb-07
Nein. Es gibt nue 1x X_SETTEXTURE, weil: Nur eine Textur mit 5 verscheidenen Bildern drauf (Texture Atlas).
Title: Re: X_PUSHMARTIX und X_POPMATRIX evtl. noch zusätzlicher Befehl?
Post by: Schranz0r on 2011-Feb-07
Quote from: backslider on 2011-Feb-07
Wie willst du vorallem von sonem Chunk aus Würfeln wieder einzelne Würfel bearbeiten (löschen, ändern, hinzufügen)? o.O

Naja das wird zwischengespeichert in Dateien, bzw wird in diesen ausgelagert. Sollte das kleinere Problem sein.
Doch das zusammenfügen zu richtigen Chunks macht mir mehr probleme...
Title: Re: X_PUSHMARTIX und X_POPMATRIX evtl. noch zusätzlicher Befehl?
Post by: Kitty Hello on 2011-Feb-07
ich kapier nix mehr. Zeig doch mal code.
Title: Re: X_PUSHMARTIX und X_POPMATRIX evtl. noch zusätzlicher Befehl?
Post by: backslider on 2011-Feb-08
Bin ich auch für!  :good:
Irgendwie reden wir alle aneinander vorbei xD
Title: Re: X_PUSHMARTIX und X_POPMATRIX evtl. noch zusätzlicher Befehl?
Post by: Quentin on 2011-Feb-08
rofl
sieht fast so aus. Ich glaube, was Schranzor meint, ist ein echtes Zusammenfügen von 3D-Objekten
so wie

Code (glbasic) Select

object = X_MERGEOBJ(object1, object2)
...
X_DRAWOBJ object, 0


so habe ich es zumindest verstanden
Title: Re: X_PUSHMARTIX und X_POPMATRIX evtl. noch zusätzlicher Befehl?
Post by: Schranz0r on 2011-Feb-08
Genau sowas in der Richtung Quentin!

Doch das Problem ist dann immernoch die Textur an die richtige stelle zu bekommen...
Ich muss erstmal nen Test machen mit, keine Ahnung 2x2x2 Würfeln oder so und da nen guten Algo schreiben der verdeckte doppelte Vertices nicht erstellt. Also quasi nur die Hülle des Objects/Chunks.

Wie gesagt, bin nicht böse wenn da einer mit tüftelln will!  ;)

Wenns in Freebasic möglich ist, MUSS es in GLB auch gehn...
Title: Re: X_PUSHMARTIX und X_POPMATRIX evtl. noch zusätzlicher Befehl?
Post by: Kitty Hello on 2011-Feb-08
OK, damit sollte es aber geklärt sein, oder?

[attachment deleted by admin]
Title: Re: X_PUSHMARTIX und X_POPMATRIX evtl. noch zusätzlicher Befehl?
Post by: backslider on 2011-Feb-08
Es sollte theoretisch doch so klappen:

1. Du hast einen Texturatlas (Power of 2, also z.B. 2048*2048).
2. Nun rechnest du dir die Texturkoordinaten auf der Grafik aus...

Haben wir z.B. Texturen mit der Auflösung 64*64 rechnen wir: 2048/64 = 32 mögliche Texturen in der Breite und Höhe = 1024 gesamt.
Jetzt rechnen wir noch den prozentualen Platz der Textur auf dem Atlas aus
Code (glbasic) Select
1.0 max / 32 Blöcke * 1 (Die X/Y Stelle im Atlas, hier oben links - also 1) = 0.01325.
Diese Rechnung ist für Achse X und Y gleich, da wir ja Power of 2 haben!

Somit wäre meiner Rechnung nach die erste Textur einem Face so zugewiesen.

Code (glbasic) Select
X_OBJADDVERTEX 0,1,0, 0,0, col //oben links
X_OBJADDVERTEX 0,0,0, 0,0.03125, col //unten links
X_OBJADDVERTEX 1,0,0, 0.03125,0, col //unten rechts
X_OBJADDVERTEX 1,1,0, 0.03125,0.03125, col //oben rechts


Ich weiß ist verwirrend Schranz0r, aber eigentlich auch einleuchtend :D

Jetzt packst du einfach alle Faces in ein Objekt rein und weißt diesem deinen Texturatlas zu... Schon hast du verschiedene Texturen auf deinen Würfeln.
Title: Re: X_PUSHMARTIX und X_POPMATRIX evtl. noch zusätzlicher Befehl?
Post by: Schranz0r on 2011-Feb-08
Gernot+Backslider sind die Männer :)

Das könnte funzen!
Doppelte Vertices entfernen müsste ich dann halt noch tüfteln ;)


@ Gernot:

So einfach kanns sein, sieht man den Wald vor lauter Bäumen nicht...   :rant:
Title: Re: X_PUSHMARTIX und X_POPMATRIX evtl. noch zusätzlicher Befehl?
Post by: Kitty Hello on 2011-Feb-08
Freut mich, dass es jetzt klappt.
Und so kannst jetzt einzelne Chunks zusammenbauen als eigene Objekte. Und dann halt nur die angezeigten rendern, bzw GLB clipt dir die nich sichtbaren eh schon weg.
Title: Re: X_PUSHMARTIX und X_POPMATRIX evtl. noch zusätzlicher Befehl?
Post by: Schranz0r on 2011-Feb-08
Eine Frage noch, kann es sein das Objekte erstellen an sich recht langsam ist?
Wenn ich mal so überlege das der Minecraft Typ da 64x64x64 Chunks benutzt und die in der lauzeit neu erstellt und rendert...

Mach ich 12x12x12 muss ich schon 8,45 sek warten...
Title: Re: X_PUSHMARTIX und X_POPMATRIX evtl. noch zusätzlicher Befehl?
Post by: backslider on 2011-Feb-08
12x12x12 wuerfel oder chunks?

Wuerfel kann nich sein, da ist das Palm Pre ja schneller :P
Title: Re: X_PUSHMARTIX und X_POPMATRIX evtl. noch zusätzlicher Befehl?
Post by: Schranz0r on 2011-Feb-08
Beim erstellen des Chunks also vom Programmstart bis zum fertigen Chunk.
Title: Re: X_PUSHMARTIX und X_POPMATRIX evtl. noch zusätzlicher Befehl?
Post by: backslider on 2011-Feb-08
*Hunger auf SourceCode hab* :)
Title: Re: X_PUSHMARTIX und X_POPMATRIX evtl. noch zusätzlicher Befehl?
Post by: Schranz0r on 2011-Feb-08
siehe Gernot xD

Hast du Xfire oder sowas das ist einfacher zu schreiben als hier das Forum zu spammen :D
Title: Re: X_PUSHMARTIX und X_POPMATRIX evtl. noch zusätzlicher Befehl?
Post by: backslider on 2011-Feb-08
ich hab icq und dich auch in der Liste, aber ich schreibe
vom handy und bin nicht zu Hause...
Sonst guck ich mir das später nochmal an.

Ausserdem ist nen Forum doch dafür da?! xD