Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Topics - WPShadow

#21
Hi,

I've got a little problem with the visibility of cubes. I work on a little experiment, where I try to make a big cube with 16 x 16 x 16 small cube.

Now I need only the cubes that the camera can see, everything else isn't necessary to render. The only problem that I have is to detect which cube is hidden.

I tried X_COLLISIONRAY but I've no idea how to use it right.

This is my code for now...

Code (glbasic) Select

// --------------------------------- //
// Project: voxel
// Start: Tuesday, October 01, 2013
// IDE Version: 11.322


// SETCURRENTDIR("Media") // go to media files

TYPE cube_type
typ
x
y
z
active
ENDTYPE

GLOBAL cube[] AS cube_type
GLOBAL counter, visible, size_total

main()



FUNCTION main:

CreateCube(0, 1, RGB(255, 0, 0))
CreateCube(1, 1, RGB(0, 255, 0))
CreateCube(2, 1, RGB(0, 0, 255))

size_total = 16

create_base_chunk(size_total)



WHILE TRUE

X_MAKE3D 1, 1000, 45



X_CAMERA 25, 25, 20, 0, 0, 0



visible = 0

draw_chunk(size_total)

X_MAKE2D

PRINT "counter: " + counter, 0, 0
PRINT "visible: " + visible, 0, 20



SHOWSCREEN

WEND


ENDFUNCTION

FUNCTION draw_chunk: size

FOREACH c IN cube[]

IF c.active = TRUE
INC visible, 1

X_MOVEMENT c.x - (size/2), c.z - (size/2), c.y - (size/2)
X_DRAWOBJ c.typ, 0
ENDIF

NEXT



ENDFUNCTION


FUNCTION create_base_chunk: size
LOCAL tmp_x, tmp_y, tmp_z
LOCAL c AS cube_type
LOCAL hit

FOR tmp_x = 0 TO size - 1
FOR tmp_y = 0 TO size - 1
FOR tmp_z = 0 TO size - 1

c.typ = RND(2)
c.x = tmp_x
c.y = tmp_y
c.z = tmp_z





c.active = TRUE





DIMPUSH cube[], c


INC counter, 1

NEXT
NEXT
NEXT



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
                X_OBJADDVERTEX  sz,  sz,  sz, 1, 1, col
                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
                X_OBJADDVERTEX  sz,  sz, -sz, 0, 1, col
                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
                X_OBJADDVERTEX  sz,  sz,  sz, 1, 0, col
                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
                X_OBJADDVERTEX  sz, -sz,  sz, 0, 0, col
                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
                X_OBJADDVERTEX  sz,  sz,  sz, 0, 1, col
                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, co :ol
                X_OBJADDVERTEX -sz,  sz,  sz, 1, 1, col
                X_OBJADDVERTEX -sz,  sz, -sz, 0, 1, col
                X_OBJNEWGROUP
        X_OBJEND

ENDFUNCTION // sz


Any idea how I can implement it right?

CU

W.
#22
Hi,

kennt sich jemand mit Voxel aus? Ich experimentiere gerade mit der Sichtbarkeit von Würfeln.

Dabei erstelle ich grundlegend einen 3D - Raster (im Beispiel 16 x 16 x 16). Der erstellte Bereich hat also 4096 Würfel. Die von der Kamera erfasste Fläche hat im Grunde jedoch nur

((16 x 16) * 3) - (3 * 16) = 720 Würfel

Ich rechne da: Grundfläche x 3 - der Überschneidungen der Flächen

Jetzt stellt sich für mich die Frage, wie ich die von der Kamera sichtbaren Bereiche errechnen kann?

Ich habe mit X_COLLISIONRAY experimentiert, aber ich bin mir rein vom Aufbau her nicht ganz sicher.

Hat jemand eine Idee, wie man sowas angehen kann? Hier mal der Code, mit dem ich experimentiere:

Code (glbasic) Select

// --------------------------------- //
// Project: voxel
// Start: Tuesday, October 01, 2013
// IDE Version: 11.322


// SETCURRENTDIR("Media") // go to media files

TYPE cube_type
typ
x
y
z
active
ENDTYPE

GLOBAL cube[] AS cube_type
GLOBAL anzahl, sichtbar, size_total

main()



FUNCTION main:

CreateCube(0, 1, RGB(255, 0, 0))
CreateCube(1, 1, RGB(0, 255, 0))
CreateCube(2, 1, RGB(0, 0, 255))

size_total = 16

create_base_chunk(size_total)



WHILE TRUE

X_MAKE3D 1, 1000, 45



X_CAMERA 25, 25, 20, 0, 0, 0



sichtbar = 0

draw_chunk(size_total)

X_MAKE2D

PRINT "Anzahl: " + anzahl, 0, 0
PRINT "Sichtbar: " + sichtbar, 0, 20



SHOWSCREEN

WEND


ENDFUNCTION

FUNCTION draw_chunk: size

FOREACH c IN cube[]

IF c.active = TRUE
INC sichtbar, 1

X_MOVEMENT c.x - (size/2), c.z - (size/2), c.y - (size/2)
X_DRAWOBJ c.typ, 0
ENDIF

NEXT



ENDFUNCTION


FUNCTION create_base_chunk: size
LOCAL tmp_x, tmp_y, tmp_z
LOCAL c AS cube_type
LOCAL hit

FOR tmp_x = 0 TO size - 1
FOR tmp_y = 0 TO size - 1
FOR tmp_z = 0 TO size - 1

c.typ = RND(2)
c.x = tmp_x
c.y = tmp_y
c.z = tmp_z





c.active = TRUE





DIMPUSH cube[], c


INC anzahl, 1

NEXT
NEXT
NEXT



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
                X_OBJADDVERTEX  sz,  sz,  sz, 1, 1, col
                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
                X_OBJADDVERTEX  sz,  sz, -sz, 0, 1, col
                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
                X_OBJADDVERTEX  sz,  sz,  sz, 1, 0, col
                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
                X_OBJADDVERTEX  sz, -sz,  sz, 0, 0, col
                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
                X_OBJADDVERTEX  sz,  sz,  sz, 0, 1, col
                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
                X_OBJADDVERTEX -sz,  sz,  sz, 1, 1, col
                X_OBJADDVERTEX -sz,  sz, -sz, 0, 1, col
                X_OBJNEWGROUP
        X_OBJEND

ENDFUNCTION // sz


lg

W.
#23
Hey,

Problem:

Ich habe 3 Elemente, die dargestellt werden. Die 3 Elemente überlappen quasi. Wenn ich das "unterste" Element (im Array das 0te) aktiviere, dann soll es an die oberste Stelle wandern. Soweit kein Problem (dachte ich), also "reproduziere" ich es (mit DIMPUSH), setze es damit also an die allerletzte Stelle und lösche einfach das Original. Leider ergibt sich dadurch ein Bug in meinem Programmchen.

Also bekam ich den Tip SORTARRAY zu nutzen und damit das erste Objekt an die letzte Position wandern zu lassen. Mein Problem dabei ist, daß ich mir nicht sicher bin, ob "sortieren" einen Sinn macht, da ich immer nur ein unteres Element haben möchte, das ans Ende wandert und nicht die ganze Reihe. Es kann auch nur sein, daß das 3. von 5 Elementen den Platz von Nr. 5 übernehmen müßte und Nr. 5 zu 4 und 4 zu 3 wird.

Gibt es evtl. einen Weg einfach die Zeiger zu tauschen oder macht es da eher Sinn selbst eine Verkettete Liste zu schreiben?

lg

W.
#24
GLBasic - de / Debug Modus
2013-Aug-29
Hey,

kleine Frage: wie funktioniert das eigentlich mit den Haltepunkten in GLBasic? Ich habe meine Haltepunkte gesetzt und versuche auch die entsprechenden Ausgaben zu bekommen, aber entweder stoppt das Programm nicht bzw. reagiert auf F5/shift + F5 nicht (und ja, im aktivierten Debug - Modus) oder die Anwendung stürzt gleich ganz ab.

Irgendeine Idee?

lg

W.
#25
Hi,

ich bastle momentan an einem Projekt und mir ist folgendes aufgefallen:

Wenn ich eine Funktion erstelle, in der gewisse Werte "vordefiniert" sind

Code (glbasic) Select

FUNCTION test: a = 1, b = 2, c = 3

ENDFUNCTION


dann ist es zwar möglich, die Function ohne eingetragenen Wert aufzurufen

Code (glbasic) Select

test()


jedoch bereitet es mir leichte Probleme, wenn ich z.B. nur den Wert von c ändern will.

Der Aufruf

Code (glbasic) Select

test(,,3)


funktioniert in dem Fall ja nicht.

Wie kann ich da vorgehen? Muss ich eigentlich sämtliche Werte mit angeben, wenn ich einen geänderten Wert angeben möchte?

lg

W.
#26
Hi,

wird bei Openfile bereits etwas geladen oder wird einfach nur das File zum Laden bereit gestellt?

Ich frage, weil ich versuchen möchte ein größeres File zu erstellen (z.B. 100mb+) und dort mal eine spezifische Zeile suchen möchte --> wie z.B. bei VIM o.ä. Editoren

lg

W.
#27
GLBasic - de / Newton
2013-Jun-06
Hey,

hat in letzter Zeit mal jemand was mit Newton gemacht?

Hat jemand eine Idee, wie ich eine 2 Objekte von einander abstoßen kann --> quasi magnetisch?

Je näher sie sich kommen, desto höher sollte die Abstoßende Kraft werden... Ich habe damit etwas herum gespielt, aber ich komme nicht wirklich auf eine Lösung...  :S

LG

W.
#28
GLBasic - de / Projektfrage
2013-Jun-03
Hey,

kennt sich jemand allgemein mit Physik aus?

Es geht um eine Mischung aus Masse, Aerodynamic & Magnetismus!  :D

Es geht mir nur um eine grobe Übersicht, nicht um was superpräzises...

LG

W.
#29
Hi,

university was very, very boring today, so here's the result of the last 15 minutes...

Use SPACE to create new colors...

well, that's it  =D


Code (glbasic) Select

// --------------------------------- //
// Project: chaoscolor
// Start: Saturday, April 27, 2013
// IDE Version: 11.171


// SETCURRENTDIR("Media") // go to media files

TYPE color
x
red
green
blue
ENDTYPE

GLOBAL c[] AS color, x, y, b1, b2, col_r, col_g, col_b

main()


FUNCTION main:

SYSTEMPOINTER TRUE

WHILE TRUE

MOUSESTATE x, y, b1, b2
DRAWLINE x, 0, x, 610, RGB(255, 255, 255)

IF KEY(57) =1 THEN add_color()
show_color()

PRINT "RED:   " + col_r, 100, 620
PRINT "GREEN: " + col_g, 100, 650
PRINT "BLUE:  " + col_b, 100, 680

DRAWRECT 200, 620, 100, 720, RGB(col_r, col_g, col_b)


SHOWSCREEN
WEND

ENDFUNCTION

FUNCTION add_color:
LOCAL col AS color

col.red = RND(255)
col.green = RND(255)
col.blue = RND(255)
col.x = 0

IF LEN(c[]) > 0
FOREACH co IN c[]
INC co.x, 1
NEXT
ENDIF

DIMPUSH c[], col

ENDFUNCTION

FUNCTION show_color:
LOCAL count

IF LEN(c[]) > 0
FOREACH col IN c[]
DRAWLINE col.x, 200, col.x, 600, RGB(col.red, col.green, col.blue)

IF x = col.x
col_r = col.red
col_g = col.green
col_b = col.blue
ENDIF

IF col.x > 1024 THEN DELETE col
NEXT
ENDIF

ENDFUNCTION
#30
Hey,

wie genau könnte ich es angehen, in einem Pfad die vorhandenen Dateien zu "zählen"?

Es handelt sich nur um einen Dateitypen, aber ich wüßte gerne, wieviele Files davon im Pfad sind.

DOESFILEEXIST("*.bla")
wird nämlich wohl kaum funktionieren  :D

Hat wer 'ne Idee?

LG

W.
#31
Hi,

nach der Neuinstallation meines neuen Rechners (Win 7 64bit) bekomme ich GLBasic nicht zum laufen.

Ich habe v 10 & 11 versucht, beides erfolglos.

Update - Prozess verlief bei v10.202 erfolgreich auf v10.283

Einzig diese Fehlermeldung bekomme ich bei v10, vor und nach dem Update:

Code (glbasic) Select

*** Configuration: WIN32 ***
precompiling:
*** create process failed


v11.322 liefert folgende Meldung:

Code (glbasic) Select

*** Configuration: WIN32 ***
precompiling:
CMD: >>"C:\Program Files (x86)\GLBasic_v11\Compiler\platform\gpc.exe" -pWIN32=1 -pGLB_VERSION=11.322 -N"The_Idle" -X1024 -Y768 -M4 -R60 -O"H:\TempFiles\User\glbasic\gpc_temp" -L3 -EXPLICIT -P"F:\GLBasic\The_Idle" -V"000.001" "F:\GLBasic\The_Idle\The_Idle.gbas"<<
*** create process failed


Irgendwelche Ideen?  =D

LG

W.
#32
GLBasic - de / Timestamp
2012-Nov-27
Hallo,

gibt es in GLBasic eigentlich einen Weg einen "Timestamp" auszulesen oder muß ich mir den selbst generieren?

Momentan weiß ich nur von dem Weg mit PLATFORMINFO$("TIME"), wobei man hier nur die formatierte Zeit heraus bekommt...

GLG

W.
#33
Hi Gernot,

wäre es Möglich die Funktionsanzeige auf der rechten Seite so zu modifizieren, daß man als zusätzliche Option anbietet, die Variablen der Funktionen mit anzuzeigen?

Test(x, y)

So in der Art? Das würde für mich persönlich die Übersicht massiv erhöhen...  =D

GLG

W.
#34
Hi,

3. Anlauf, 15. Versuch, diesmal funktioniert die Kamera halbwegs. Leider bekomme ich es nicht hin, daß sich die Kamera linear in einer Höhe dreht.

Damit meine ich, daß ich die Kamera auf einen Höhenwinkel von z=20° stellen möchte und um x,y drehen möchte, ohne daß sich hier die Höhe verändert!

Hier ist der Code dazu:

Code (glbasic) Select

x = COS(phi) * COS(psi) * 1
y = SIN(phi) * -SIN(psi) * 1
z = SIN(phi) * 1

X_CAMERA 0, 10, 0, 0 + x, 10 + y, 0 + z


Irgendeine Idee?

GLG

W.
#35
Hi,

Ziel ist es, daß sich das Objekt (ownship.x, ownship.y) zur Maus (mx, my) hin bewegt. Dabei hole ich mir den Winkel (phi) zwischen den beiden.

Was ist hier falsch:

Code (glbasic) Select

pos_x = mx - ownship.x
pos_y = my - ownship.y

phi = ATAN(pos_y, pos_x)

move_x = (SIN(phi) * ownship.speed) * t
move_y = (COS(phi) * ownship.speed) * t

INC ownship.x, move_x
INC ownship.y, move_y


GLG

W.
#36
GLBasic - de / GLBasic v11
2012-Jul-27
Hey Gernot,

nachdem du ja einen Verlust des Datenstandes hattest, wie du geschrieben hast, wie geht es mir GLBasic 11 weiter?

Mußt du da alles neu machen? Ich wäre auf den aktuellen Stand gespannt (bin immer neugierig, wenn es um Neuerungen geht)...

GLG

W.
#37
GLBasic - de / DDgui - Frage
2012-Jul-24
Hi,

ich stelle meine Frage mal hier rein, da der DDgui - Teil rein englisch gehalten wird.

Wie genau kann ich Variablentexte (Strings) ausgeben? Mit DDgui_text("tx_var", inhalt$, 0,0) hat es nicht funktioniert, zumindest nicht, wenn ich eine Variable setze.

Egal, was ich mache, ich komme nicht dahinter. Wie kann man Variablen setzen bzw. es so lösen, daß ich den Inhalt dynamisch ändern kann?

Mit ddgui_set() hat es auch nicht funktioniert, zumindest hab ich da wohl was falsch gemacht...

GLG

W.
#38
GLBasic - de / SETTEXTURE
2012-Jul-20
Hi,

bis vor einiger Zeit hat es doch funktioniert, daß man mit SETTEXTURE 2 Texturen auf das selbe Modell "klebt" und beide angezeigt werden.

Leider funktioniert es nicht mehr. gibt es da eine Alternative oder eine Lösung dafür?

GLG

W.
#39
Hi,

ist es nicht möglich Try - Blocke ineinander zu verschachteln?

Ich bekomme da die Fehlermeldung:

Code (glbasic) Select

(42) error : TRY, CATCH, FINALLY mismatch


LG

W.
#40
Hi,

Praxisfrage:

wenn ich mehrere große Dateien (ca. 5 - 10 Spalten / 10 - 100 Zeilen) in Excel importieren möchte, was ist die optimale Lösung?

*.csv würde mir zu allererst in den Sinn kommen, den Reader dafür müßte ich aber vorbereiten.

Wie sieht es mit *.ini aus? Ab welcher Datengröße wird das Format langsam?

Momentan plane und spiele ich noch mit dem ganzen System herum, deshalb die Frage. Habt ihr sonst noch eine Alternativ - Lösung
für mich?

GLG

W.