Winterlandschaft 3D

Spiele, Demos, Grafikzeug und anderes unterhaltendes.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Ich finds auch cool, finde as aber schade das du nicht den Source reinstellt, ich habe nämlich ne menge 2D kampfspiele die würden dann mit 3D noch besser aussehen, außerdem könnte man ja zusammenarbeiten :wink:

PS: habe erst mal aus der Winterlandschaft ne Wüste mit Kaktenen gemacht :wink:
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Danke für die kurze Beschreibung, aber wie realisierst Du das mit den Sprite3D-Befehlen?!
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

ZeHa hat geschrieben:Danke für die kurze Beschreibung, aber wie realisierst Du das mit den Sprite3D-Befehlen?!
danke für die frage wollte ich auch drauf kommen !
denn NUR mit Sprite3D-Befehlen geht das nicht so einfach :oops:
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

Das ist Vergewaltigung der Tastatur! Bitte, ASYX zum Laufen? Dafür gibt's doch WASD! Bitte bitte, schnell ändern!
Ansonsten ist's ganz okay. Man sieht zu stark die unterschiedlichen Polygone heraus. Also es fehlt eine Routine welche die Schattierung rund erscheinen lässt. Keine Ahnung wie der Fachausdruck dafür lautet.

Aber es läuft sehr flüssig, auch mit > 2000 Polygonen noch auf 66/ 33 FPS (schwenkt immer um).
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Viele Kollegen hat geschrieben:... wie realisierst Du das mit den Sprite3D-Befehlen?!
...ein Sprite3D ist nur ein 4-Punkt-Polygon...
geradezu prädestiniert für die klassische landschaftsdarstellung...

früher hat man sowas händisch proggen müssen, und ahnung von matritzenrechnung haben...

mit Sprite3D ist das schon viel einfacher...


@Yps: Gute Arbeit :allright:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Kaeru Gaman hat geschrieben:
Viele Kollegen hat geschrieben:... wie realisierst Du das mit den Sprite3D-Befehlen?!
...ein Sprite3D ist nur ein 4-Punkt-Polygon...
geradezu prädestiniert für die klassische landschaftsdarstellung...

früher hat man sowas händisch proggen müssen, und ahnung von matritzenrechnung haben...

mit Sprite3D ist das schon viel einfacher...
ja ja aber wenn ich mit TransformSprite3D verzerrt es sich und mit ZoomSpirte3D aleine geht es nicht . mmmm
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

<alte meinung>Schon klar, aber das ist doch mit den PB-Commands gar nicht möglich, oder?

Man kann doch nur zoomen und rotieren, nicht aber die 4 Punkte frei plazieren...</alte meinung>

Hab grad den TransformSprite-Befehl entdeckt :allright:
Benutzeravatar
Ypser
XMas-Contest-Gewinner '03
Beiträge: 128
Registriert: 29.08.2004 14:35
Computerausstattung: Win7
Wohnort: Ingelheim
Kontaktdaten:

Beitrag von Ypser »

STARGÅTE hat geschrieben:... denn NUR mit Sprite3D-Befehlen geht das nicht so einfach :oops:
Doch, das geht. Der Wunderbefehl, dessen Potenzial die meisten PBler leider nicht kennen,
heisst TransformSprite3D(). Alles andere ist Mathematik, bei der mir damals übrigens TomCat
(kennt ihr vll. aus dem engl. Forum) geholfen hat. Von ihm war die "PureRacerDemo".

Die Schattierung erledigt eine Procedure, die Danilo vor einiger Zeit geschrieben hat,
als es um TransformSprite3D() ging. Ich hatte damals an einer Grafik-Engine für Rennspiele gearbeitet,
und eine Diskussion über die Einsatzfähigkeit des aktuellen TransformSprite3D() angestossen,
aus der die 4 optionalen Z-Parameter hervorgingen. Dadurch wurden solche Projekte eigentlich
erst möglich (mit Sprite3Ds). :D
Diese Z-Parameter ermöglichen korrekte Verzerrungen, wenn man die Werte entsprechend berechnet.

Und ja, man kann die vier "Punkte" absolut frei platzieren. Der DisplaySprite3D()-Befehl
bekommt bei mir am Ende als X/Y-Parameter nur 0,0. 8)
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Ypser hat geschrieben:
STARGÅTE hat geschrieben:... denn NUR mit Sprite3D-Befehlen geht das nicht so einfach :oops:
Doch, das geht. Der Wunderbefehl, dessen Potenzial die meisten PBler leider nicht kennen,
heisst TransformSprite3D(). Alles andere ist Mathematik, bei der mir damals übrigens TomCat
(kennt ihr vll. aus dem engl. Forum) geholfen hat. Von ihm war die "PureRacerDemo".

Die Schattierung erledigt eine Procedure, die Danilo vor einiger Zeit geschrieben hat,
als es um TransformSprite3D() ging. Ich hatte damals an einer Grafik-Engine für Rennspiele gearbeitet,
und eine Diskussion über die Einsatzfähigkeit des aktuellen TransformSprite3D() angestossen,
aus der die 4 optionalen Z-Parameter hervorgingen. Dadurch wurden solche Projekte eigentlich
erst möglich (mit Sprite3Ds). :D
Diese Z-Parameter ermöglichen korrekte Verzerrungen, wenn man die Werte entsprechend berechnet.

Und ja, man kann die für "Punkte" absolut frei platzieren. Der DisplaySprite3D()-Befehl
bekommt am Ende als X/Y-Parameter nur 0,0. 8)
ist ja klar das es mit TransformSprite3D() geht aber mein problem ist :
"Warnung: Da ein Sprite3D sich in 2 Richtungen ausdehnt (2 Dreiecke), kann die Verformung sehr seltsam aussehen... " wie soll man das verhindern :roll: (sorry wegen des nervens)

Mein Beispiel :
Bild
da ist ein knick in den Fugen!
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Ypser
XMas-Contest-Gewinner '03
Beiträge: 128
Registriert: 29.08.2004 14:35
Computerausstattung: Win7
Wohnort: Ingelheim
Kontaktdaten:

Beitrag von Ypser »

Das "Geheimnis" ist, dass du ja vorher die Koordinaten aus 3D in 2D umrechnest, also
hast du auch die nötigen Z-Werte.

Hab mal nen kleinen Code geschrieben, der das veranschaulicht:

Code: Alles auswählen

InitSprite()
InitSprite3D()
InitKeyboard()

OpenScreen(800, 600, 32, "")

s2D = CreateSprite(#PB_Any, 64, 64, #PB_Sprite_Texture)
StartDrawing(SpriteOutput(s2D))
Box(0, 0, 64, 64, RGB(50, 50, 200))
For I = 0 To 5
 Line(2, I*10, 64, 0, RGB(255, 255, 255))
 Line(I*10, 2, 0, 64, RGB(255, 255, 255))
Next
StopDrawing()
s3D = CreateSprite3D(#PB_Any, s2D)

ScreenMidX = 400
ScreenMidY = 300



z1 = 2
z2 = 4
z3 = 4
z4 = 2

x1 = ScreenMidX - (400 / z1)
y1 = ScreenMidY + (300 / z1)

x2 = ScreenMidX - (400 / z2)
y2 = ScreenMidY - (300 / z2)

x3 = ScreenMidX + (400 / z3)
y3 = ScreenMidY - (300 / z3)

x4 = ScreenMidX + (400 / z4)
y4 = ScreenMidY + (300 / z4)


Repeat
  ExamineKeyboard()
  If KeyboardReleased(#PB_Key_Space)
    WithZValues = (1 - WithZValues)
  EndIf

  
  ClearScreen(0, 0, 0)
  Start3D()
  If (WithZValues = 1)    
    ;MIT z-Werten
    TransformSprite3D(s3D, x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4)
  Else
    ;Ohne z-Werte
    TransformSprite3D(s3D, x1, y1, 1, x2, y2, 1, x3, y3, 1, x4, y4, 1)  ;1=Standard = alle z-Werte gleich
  EndIf
    DisplaySprite3D(s3D, 0, 0) 
  Stop3D()
    StartDrawing(ScreenOutput())
    DrawingMode(1)
    FrontColor(255, 255, 255)
    Locate (20, 20): DrawText("[SPACE] = Switch with/without Z-Values")
    StopDrawing()
  FlipBuffers()
Until KeyboardReleased(#PB_Key_Escape)
Probiert mal mit den 4 Z-Werten rum, die ja nur die Entfernung zur Kamera angeben...
Zuletzt geändert von Ypser am 20.12.2005 00:31, insgesamt 3-mal geändert.
Bild
Antworten