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

Messages - ProNerd

#1
vielen Dank, dass hat mir alles echt weitergeholen.

das ist ja geil, dass man die komplette gl library in basic hat. braucht man die x3d befehle dann eigentlich noch? Ich werde mich da jetzt erst mal einarbeiten müssen. Am liebsten wäre es mir wenn ich die PixelRaster schleife einfach in open gl auslagern täte und mit dem rest so weiter mache wie bisher
#2
du meinst ich rechne nur das grid auf die perspektive um, und hab dann die eckpunkt um das mit polyvektoren zu rastern ? :)

gute idee, aber sag mal, gibt es trotzdem die Möglichkeit an die Rasterfunktion von OpenGL ranzukommen? So dass ich anstatt setpixel einfach sage, rasterpixel?

für licht und wettereffekte brauche ich pixelweises arbeiten früher oder später auf jeden fall, oder nicht?
#3
hier mal 2 screenshots, eine wand ist bereits mit Texturen belegt. Als nächstes wollte ich den Boden machen
#4
du meinst raytracing (ne 3 dimensionale Version von raycasting). raycasting ist die übliche 3d technik der 90ziger zum live rendern.

ausserdem wieso komplizierte weise? Ich möchte einfach nur ne kleine raycasting engine wie dukenukem, doom etc.. selbst machen. Zumindest versuchen. Das macht Spass und Basic ist nun mal halt die einzige Sprache die ich kenne.

Ich verstehe nicht wo der unterschied ist ob ich 20*15 bilder mit der Tilesize von 32 render, oder direkt 640*480 Punkte. Es werden in beiden Fällen gleich viele Pixels gerendered. mein computer rendered permanent bilder von 1600*900. Aber warum kackt Basic so krass ab, wenn man punkt für punkt zeichnen will. Genau das ist es aber was ich will. Mit welcher Sprache geht das wenn nicht mit GLBasic?

Was erwartet mich überhaupt wenn ich solche Sachen umsetzen will? Ich hab im Quake Code gesehen, dass kritische Sachen wie Vektoren Umrechnungen etc.. mit Assembler gemacht wurden.

#5
versuche es jetzt mit ray casting und hänge an ner Stelle fest wo man massig Punkte rendern muss und die Performance lässt es leider nicht zu :(

siehe dieses Tutorial: http://www.permadi.com/tutorial/raycast/rayc11.html

Code (glbasic) Select

GLOBAL boden = GENSPRITE(); LOADANIM "boden.png", boden, 1,1 //32*32 Tile

FOR j = 0 TO 240 - 1
FOR i = 0 TO 640 - 1
DRAWANIM boden, scannedframe[i][j],i, j + 240
NEXT
NEXT


#6
Quote from: kanonet on 2013-Sep-20
Du kannst so etwas nicht komplett in der CPU berechnen (GPU wäre viel schneller) und erwarten, dass es flüssig läuft. Dann noch lauter Array-einfügen- und -lösch-Befehle (kostet alles massig Zeit) pro Frame und zusätzlich dann noch mit SETPIXEL zeichnen (wohl langsamster aller Grafikbefehle) . Das wirkt ja beinahe als ob du absichtlich langsam sein willst...

Wenn du 3D willst, dann verwende 3D, das ist alles optimiert und läuft wenn möglich auf der GPU.
Willst du dich wirklich mit dem kreieren von pseudo-3D-Objekten beschäftigen, dann schaue dir mal Wampus Arbeit an: www.glbasic.com/forum/index.php?topic=8151

ich les gerade das wolfenstein mit raycasting und vielen tricks so hinbekommen wurde. Das Beispiel von Wampus ist auch nicht schlecht :)
#7
ja das stimmt schon, das Program ist nur leider etwas zu lang geraten. Es geht eigentlich auch nur um die Implementierung des Z Buffering Algorythmus. Die z und Farb Werte von jedem Punkte werden in einem Type gespeichert:
Code (glbasic) Select

//setze die Variablen zurück
self.DataZ[] = self.DataZInit[]
self.DataC[] = self.DataCInit[]

//Z-Buffer Algorythmus
LOCAL p AS TPoint
FOREACH p IN Points[]
IF self.DataZ[p.x][p.y] > p.z
self.DataZ[p.x][p.y] = p.z
self.DataC[p.x][p.y] = p.color
ENDIF
DELETE p
NEXT


//Render die Punkte
FOR i = Map.viewminx TO Map.viewmaxx
FOR j = Map.viewmaxy TO Map.viewminy
IF self.DataC[i][j] > 0 THEN SETPIXEL i,j,self.DataC[i][j]
NEXT
NEXT



Code (glbasic) Select

TYPE TPoint
x;y;z
color
FUNCTION Init: x,y,z, color
self.x = x
self.y = y
self.z = z
self.color = color
DIMPUSH Points[], self
ENDFUNCTION
ENDTYPE

wieviel Elemente sollte ein Type sinnvollerweise enthalten? Ich sammel in einem Type Punkte (es gibt nur 4 Variablen in diesem Type,x,y,z und farbe). So kommen in jedem Cycle an die zig tausend Type Elemente zusammen. (Alle Elemente in diesem Type werden am Ende des cycles komplett gelöscht)

Ich gleiche jeden einzelnen Punkt mit einer Datenvariable ab, die mit 640*480 dimensioniert ist. Ich schau welchen Wert hat diese Datenvariable an der stelle des zu testenden Punktes und überschreibe ihn falls er größer ist. In dem Fall wird auch eine weitere Datenvariable die ebenso gross dimensioniert ist mit einem Wert aus Punkte[] beschrieben. Beide Datenvariable werden am anfang des cycles geresetet.

Dann durchlaufe ich die erste Datenvariablen und setze bei allen Werten, wo nicht mehr der Ausgangswert drin steht, ein Pixel in der Farbe aus der zweiten Datenvariable

bei 640*480 gibt es schon 307200 Pixel. Mit einigen Objekten im Hintergrund kommen da sicher Millionen Punkte zusammen. Kann man soviele in einem Type speichern und die in jedem Cycle, wieder reseten und testen oder wie haben die das damals zu Wolfenstein Zeiten gemacht?
#8
Und zwar versuche ich derweil eine kleine 3d Welt, in der ich mich bewegen kann, zu programmieren. Bisher habe ich bewusste auf die x3d befehle verzichtet weil es mir mehr um die mathematischen Grundlagen geht. Mittlerweile habe ich zwar jetzt eine kleine Welt und das Movement hinbekommen, aber das ganze ruckelt extrem stark.
vereinfacht ist das programm folgendermaßen (in Pseudecode)
Init:
•   Initialisiere circa 1000 Objekte im Modellkoordinatensystem (jedes Objekt ist gekennzeichnet durch 4 Eckpunkte, und der Einheitsgröße Größe 100 * 100 ohne dicke)
•   verschiebe die Objekte(Punkte) an ihre entsprechende Position im Weltkoordinatensystem mithilfe der Initialisierungsvektoren (x,y,z sowie eine drehung, mehr ist momentan nicht erforderlich)
Update:
•   Transformiere alle Punkte von allen Objekten falls verschoben wird (vorwärts- rückwärts gehen, drehen etc..).
•   Transformiere nun die Koordinaten aller Punkte (dafür wird nur eine Transformationsmatrix verwendet) um sie in die entsprechende Perspektive zu bringen.
•   Liegt ein Punkt x,y im definierten sichtbaren Volumen (Pyramidenfrustum) dann initialisiere diesen Punkt in Points[] mit dem dazugehörigen normierten Z-Wert und der Farbe des Objekts
Render:
•   Initialisiere die Variablen Z-Werte[][] und Farb-Were[][] mit den Dimensionen des sichtbaren Bereichts, und zwar mit z = -1(Objekt ist unsichtbar) und Farbe = schwarz
•   Für jeden Punkt in Points[]: Wenn der z-Wert der in Z-Werte[][] steht kleiner ist als der z-wert von Points, übernehme den neuen Z und C Wert
•   Lösche alle Punkte in Points[]
•   Falls ein Z-Wert in Z-Werte
  • [y] größer -1 ist setpixel mit der C-Werte
  • [y] an die Position x,y


    Soweit so gut, aber das ruckelt so krass. Es werden einfach so viele Punkte in Points[] erzeugt und jeder muss einzeln geprüft werden. Da alle Objekte im sichtbaren Volumen liegen ergeben sich an die 1000* 4 = 4000Points. Ich hatte ursprünglich noch Verbindungslinien zwischen den EckPunkten errechnet (von Polygonen soll erst mal gar nicht die Rede sein) aber dann sind es so krass viele Punkte die erzeigt werden, dass das Programm unsteuerbar wird. Egal welche fps oder Auflösung ich einstelle. Sobald vielleicht noch 400 Punkte zu sehen ist wird die Performance besser.
    Meine Vermutung ist, dass ich eigentlich den richtigen z Buffer auf der Grafikkarte ansprechen müsste, weil der viel schneller ist usw.. aber ich mein es gab ja auch schon einfach 3d Applikationen für uralte Konsolen und PC's (Wolfenstein) etc.., in sofern müsste ich was rudimentäres doch auch so zum laufen bringen. Selbst bei einem einfachen Testprogramm wo ich nur ne schleife mit 640 * 480 nehme und sage setpixel(x,y,) ruckelt es. Insofern denke ich, dass es nicht an den paar Transformationsberechnunge liegen kann, sondern eher an der falschen benutzung des Befehl SetPixels bzw. der Rasterungsmethode. Oder wo liegt der Fehler?
#9
Thank you once again guys for all the comments.  I have uploaded a new video (see edit of my first post).

Amongst all the things you can see and hear I have also included deWitters famous game loop code. Its amazing. Unfornunately my PC is slow and I can only record videos in 30 fps, so you cant see the effect of it in the video.

I am still having problemes with walking down a slope (sometimes he charachter walks not smoothly) and landing on a platform that currently moves down (charachter will stop for millisecond and only than land, so there is a minor delay). hope to fix this soon. I have some example codes even in glbasic, but my engine works very different so I couldnt include it that easy.

Lets see what steam community now thinks about this  :D
#10
Thank you once more guys, this is a really nice community I appreciate your help

Have been working on this gfx thing a little bit, its amazing how it makes things "juicier".   :D


#11
thank you guys for the feedback, I can confirm that the program was written in GLBasic. The motion fx thing is a very nice thing, it freshes things up without drawing so much. i see that the comments on steam are quite critical, what I do not understand that I have more than 1000 votes on steam within 1 day, but my video on youtube has only 30 clicks.

X Void is my first program and my first programming experience in general. I started 4 weeks ago after watching a youtube turorial. However, I am very happy with the result and what I have learned. It was always a dream from me to know how computers work and how programs are done, but I didnt study IT or anything related and just recently I had the chance to afford some time into this.

I understand that there are many haters and high expectations in terms of graphics for new games. My drawing skills are aweful unfortunately  :S  At the moment I am not sure if I can continue with the game. Probably need to calm down a few days after not leaving the house for almost a month :)
#12
Update:






Dear GL Basic Community,

I proudly present X Void a retro Jump N' Run scroller in an open world full of shortcuts and secrets. At the beginning you can only jump, run and shoot. Later powerups include a splitterbomb, grappler, doublejump, spacejump, energy tanks and rockets. There are two end bosses and one of them gives you an upgrade for your standard shot. What began as a small project resulted in a complexe game taking hundreds of hours to draw every sprite, create every sound and do all the programming. After showing the game to a few friends I have decided to present it to the community.

You can play with keyboard or joypad and customize the controls. The game has a save function, a map system and an ingame counter for speedrunners. I was inspired by my all time favourite games Castlevania Symphony of the Night and Super Metroid. I have always been a huge fan of retro games in general.

The game is close to completion. I am working on the overall balancing at the moment. If you like the game please spread the word and help me to release it by voting on steam.

Steam Link: http://steamcommunity.com/sharedfiles/filedetails/?id=140794628

#13
Hey vielen Dank für die guten Tips. Die keydef.gbas ist genau was ich gesucht habe. Sounds sind wav und Musik ist mp3. Nur die Musik wird beim Kollegen nicht abgespielt, und dass ist auch der, der kein Vollbild hat, werde mich mal nach den System Specs erkundigen. Ist aber ein neuer Rechner.

Bin leider noch nicht dazu gekommen, das mit den keys einzubinden, dafür habe ich mal ein preview bei Steam hochgeladen, mache gleich auch noch mal ein offiziellen Thread im Announcement Forum.

http://steamcommunity.com/sharedfiles/filedetails/?id=140794628



Grüße
#14
Seit kurzem programmiere ich, und es ist genau das worauf ich immer gewartet habe.  :)
Viele hundert Stunden später, würde ich gerne ein Spiel veröffentlichen. Bisher war ich immer nur passiv in diesem Forum, und habe viele nützliche Infos erhalten. Nun habe ich aber ein paar Fragen.

Das Spiel soll erst mal für PC und MAC rauskommen, würdet ihr hier Steam Greenlight empfehlen, und was gibt es für Alternativen?

In dem Spiel kann man seine Config einstellen, aber verschiedene Tasten werden nicht erkannt. Zum Beispiel STR und Shift.. Der Code ist in etwa:
FOR i = 0 TO 256;
IF KEY(i) = TRUE
keybuttonleft = i (zum Beispiel)
NEXT

Bei den allermeisten Rechnern läuft das Spiel, aber bei einem Kollegen funktioniert der Vollbildmodus nicht, und er hat auch keine Musik (wohl aber Sound). Bei wieder einem anderen, geht nur das Vollbild nicht. Hat jemand eine Ahnung? Das game ist auf 640 * 480: also setscreensize 640,480,1. Polyvektor habe ich mich bisher nicht beschäftigt, brauch ich das denn?

Eben habe ich für Mac kompiliert, aber das Spiel läuft nicht im Vollbild, bzw startet gar nicht auf dem anderen Mac. Das sind aber 2 sehr alte Macs, von vor 2007. Leider habe ich keinen aktuellen zum testen.

Wenn ich eine Animation stretche, habe ich so hässliche weisse pixelränder. Ist sowas überhaupt möglich, oder wo könnte der Fehler liegen?

Wie krieg ich es hin, dass mir angezeigt wird welche Taste für den entsprechenden KEY wert steht? Zum Beispiel ist variable keya = 30. Jetzt möchte ich dass mir ein "A" ausgegeben wird wenn ich variable keya anspreche. Natürlich will ich das nicht für alle 256 keys manuell definieren.

Habt ihr sonst noch welche Tips und Links, was man bei einem release von Spielen beachten sollte. Ursprünglich war das nur ein kleines Projekt, aber ich habe so viele Wochen Arbeit reingesteckt, und meine Freunde sind begeistert, weshalb ich überlege das zu verkaufen. Wie sind eure Erfahrungen?

danke und gruss