3D-Punkt

Probleme beim Erstellen von 3D-Modellen und Texturen, keine Ahnung womit man Musik macht? Dies ist dein Forum.
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

3D-Punkt

Beitrag von Macros »

Wie kann ich am einfachsten und
schnellsten einen Punkt in einer 3D Umgebung darstellen?

Stehend!
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Meinst du einen Pixel oder eher eine kleine Kugel, die wie ein Pixel
aussieht?
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Ich meine eher eine Kugel, da man sie auch noch aus einer etwas größeren
Entfernung sehen sollte (4000).
Aber ich brauche keine Kollision oder sowas, sondern nur die Darstellung.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

schau mal im OGL-compendium, ( nach Redbook googeln)
da gibt es nämlich nen extra befehl für einen punkt, der auch aus der entfernung immer als genau ein punkt erscheint... also kein gebastele mit einer sphere mit obskuren, entfernungsabhängigen durchmessern...

...falls du mit OGL arbeiten willst, für D§D ist das vllt anders, in PB kenn ich das 3D zuwenig...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Wenn du nur Punkte darstellen willst kannste dir doch auch selbst 'ne Proc dafür schreiben. z.B. sowas: (Der Code ist uralt, also bitte nicht schlagen ;) )

Code: Alles auswählen

Global d_scrw2.f,d_scrh2.f ;(ScreenWidth/2;ScreenHeight/2)
#zoom2 = 300
Dim _sin.f(360)
Dim _cos.f(360)
For x = 0 To 360
  _sin(x) = Sin(x/(180/3.141))
  _cos(x) = Cos(x/(180/3.141))
Next x

Procedure d_point3d(x1.f,y1.f,z1.f,wx.l,wy.l,wz.l,color.l) ;wx;wy;wz -> KameraPosition
  Protected draw
  Protected xx.f,yy.f,zz.f
  ; Drehung berechnen
  xx.f = _cos(wy) * _cos(wz) * x1 - _cos(wy) * _sin(wz) * y1 + _sin(wy) * z1
  yy.f = (_cos(wx) * _sin(wz) + _sin(wx) * _sin(wy) * _cos(wz)) * x1 + (_cos(wx) * _cos(wz) - _sin(wx) * _sin(wy) * _sin(wz)) * y1 - _sin(wx) * _cos(wy) * z1
  zz.f = (_sin(wx) * _sin(wz) - _cos(wx) * _sin(wy) * _cos(wz)) * x1 + (_sin(wx) * _cos(wz) + _cos(wx) * _sin(wy) * _sin(wz)) * y1 + _cos(wx) * _cos(wy) * z1
  yy = -yy
  ;Testen ob die Linie hinter der Camera ist
  draw = 1
  If zz >= 0
    ; 1. In 2D-Coordianten umwandeln 2. Malen
    ; "normale" Perspektive
    Debug Round(xx*#zoom2/(zz+1),0)+d_scrw2
    Debug Round(yy*#zoom2/(zz+1),0)+d_scrh2
    Plot(Round(xx*#zoom2/(zz+1),0)+d_scrw2,Round(yy*#zoom2/(zz+1),0)+d_scrh2,color)
    ; Kavalierperspektive
    ;LineXY(Round(xx-zz/2.828,0)+scrw2,Round(yy-zz/2.828,0)+scrh2,Round(xx2-zz2/2.828,0)+scrw2,Round(yy2-zz2/2.828,0)+scrh2)
  EndIf
EndProcedure

OpenWindow(0,0,0,400,400,#PB_Window_ScreenCentered|#PB_Window_SystemMenu,"")
d_scrw2 = 200
d_scrh2 = 200
Repeat
  StartDrawing(WindowOutput())
  z = Random(1000)
    d_point3d(Random(400)-200,Random(400)-200,z,0.0,0.0,0.0,255<<16+z)
  StopDrawing()
  Repeat
  WE = WindowEvent()
  Select WE
    Case #PB_Event_CloseWindow
      quit = 1
  EndSelect
  Until WE = 0
Until quit
Läuft bei mir nur ohne Debugger, da sonst "Plot ist outside Drawingarea" kommt. Sollte aber für den Zweck ausreichen.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Danke, sieht nach dem aus, was ich brauche :allright:
Antworten