T.E.D.D.Y Draw 2D - Output 3D

Übersicht Sonstiges Smalltalk

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

 

FWeinb

ehemals "ich"

BeitragFr, Apr 06, 2007 12:54
Antworten mit Zitat
Benutzer-Profile anzeigen
WOW das ist ja super wie das bei dir schon aussieht also ich werde mal versuchen die beispiel nachzuprogrammieren aber ich denke mal das wird schwer werden also die Letzte frage Währe noch Embarassed Embarassed



Wie Berechen ich die Bounding Box also das ist doch das rect indem sich alle Punkte das Objekts Befinden oder ??


mfg

ich
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs
 

E. Urbach

ehemals "Basicprogger"

BeitragFr, Apr 06, 2007 13:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Wie Berechen ich die Bounding Box also das ist doch das rect indem sich alle Punkte das Objekts Befinden oder ??

Eigentlich bezieht sich der Begriff auf 3D-Programmierung, aber ich habe ihn einfach mal im 2D-Kontext verwendet und dort bedeutet er genau das, was du schon vermutet hast.
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik
 

FWeinb

ehemals "ich"

BeitragFr, Apr 06, 2007 13:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Gut also muss ich nur die beiden Größten X und Y koordinaten und die Kleinsten x und y koordinaten finden.

[edit]
Gut die Box habe ich jetzt hier der Code:

Code: [AUSKLAPPEN]

Graphics3D 800,600,16,2
SetBuffer BackBuffer()
xk=800
yk=600

Type TPunkt
Field x
Field y
End Type


While Not KeyHit(1)

  If MouseDown(1) Then
    t.TPunkt=New TPunkt
    t\x=MouseX()
    t\y=MouseY()
  EndIf 



 For t.TPunkt=Each TPunkt
    WritePixel t\x,t\y,$FF0000,BackBuffer()
     If t\x>xg Then xg=t\x
     If t\y>yg Then yg=t\y
     If t\x<xk Then xk=t\x
     If t\y<yk Then yk=t\y
 Next


Rect xk,yk,(xg-xk)+1,(yg-yk)+1,0


 Flip
 Cls
Wend



PS: und ab jetzt Versehe ich in den Anleitungen nur noch BANHOF *Tuht TUht* Crying or Very sad
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs
 

E. Urbach

ehemals "Basicprogger"

BeitragFr, Apr 06, 2007 14:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich geb dir den gleichen Rat wie StepTiger: Versuch erstmal was einfacheres.
An deinem genannten Code wäre beispielsweise folgendes zu kritisieren:

1.
Code: [AUSKLAPPEN]
Flip
Cls

Cls steht nicht am Anfang der Schleife, wer weiß mit welchem Schrott dein BackBuffer beim ersten Frame gefüllt ist Wink

2.
Code: [AUSKLAPPEN]
Graphics3D 800,600,16,2
SetBuffer BackBuffer()
xk=800
yk=600

Du setzt die Auflösung und erstellst die Variablen für die Größe erst nachher, wesentlich besser wäre:
Code: [AUSKLAPPEN]
xk=800
yk=600
Graphics3D xk,yk,16,2
SetBuffer BackBuffer()

wobei man auch besser aussagekräftige Variablennamen wählen sollte...

3.
Code: [AUSKLAPPEN]
  If MouseDown(1) Then
    t.TPunkt=New TPunkt
    t\x=MouseX()
    t\y=MouseY()
  EndIf 

Es wird in jedem Frame ein Punkt erstellst, wenn die Maus gedrückt wird, sogar, wenn man die Maus nicht bewegt, was unnötig viele Punkte verursacht: Du musst prüfen, ob der letzte Punkt dieselben Koordinaten hat, wie die Maus, erst wenn dies nicht der Fall ist, musst du mit New einen neuen Punkt erzeugen.
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik
 

FWeinb

ehemals "ich"

BeitragFr, Apr 06, 2007 14:18
Antworten mit Zitat
Benutzer-Profile anzeigen
ich Prüfe nicht ob die sich auf dem Bildschierm Befinden ^^


xg und yg
SInd die werte für den Größten Punkt den ich gemald habe

xk und yk
SInd die werte für den Kleinsten Punkt dre Gemacht würde

Deshalb auch Code:
Code: [AUSKLAPPEN]
Rect xk,yk,(xg-xk)+1,(yg-yk)+1,0



Das mit der Maus ist Richtieg aber das mit dem CLS ist doch egal also ich werde doch wissen was ich am anfang (wenn ich überhaubt was Zeichen) gezeichnet habe ^^

Und das mit dem Code.
Code: [AUSKLAPPEN]

Graphics3D 800,600,16,2
SetBuffer BackBuffer()
xk=800
yk=600


ist Doch Richtieg denn Wenn ich schon versuche den Kleinsten Punkt Rauszubekommen also
Code: [AUSKLAPPEN]

 If t\x>xg Then xg=t\x
     If t\y>yg Then yg=t\y
     If t\x<xk Then xk=t\x
     If t\y<yk Then yk=t\y


und die Variablen xk und yk am Anfang 0 Währen würde das ja bedeuten das t\x und t\y nimals Kleiner als xk und yk währen und somit wärhe xk und yk immer 0 ^^

PS: Ich verstehe nicht wie ich alle Punkte mit Allen andern Punken Verbindne Soll ^^

Also bin jetzt auch nen Bischen Weiter ^^
jetzt werden die Punkte schon miteinandre verbunden Aber nur der letzte und der davor ^^
mehr bekomme ich immer noch nicht hin

Code: [AUSKLAPPEN]

Graphics3D 800,600,16,2
SetBuffer BackBuffer()
xk=800
yk=600

Type TPunkt
Field x
Field y
End Type

While Not KeyHit(1)

  If MouseDown(1) Then
    If MouseX()<>Mxa And MouseY()<>mya Then
     mxa=MouseX()
     mya=MouseY()
     t.TPunkt=New TPunkt
     t\x=Mxa
     t\y=mya
    EndIf
  EndIf 



 For t.TPunkt=Each TPunkt
     If t\x>xg Then xg=t\x
     If t\y>yg Then yg=t\y
     If t\x<xk Then xk=t\x
     If t\y<yk Then yk=t\y

      t1.TPunkt=Before t
      If t1.Tpunkt<>Null Then
       If t2.TPunkt<>Null Then
         Line t\x,t\y,t2\x,t2\y
       EndIf
       Line t\x,t\y,t1\x,t1\y
      EndIf
 Next


Rect xk,yk,(xg-xk)+1,(yg-yk)+1,0


 Flip
 Cls
Wend
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs
 

FWeinb

ehemals "ich"

BeitragSo, Apr 08, 2007 13:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich habe das jetzt soweit geschafft das ich jeden Punkt mit allen Andreren Verbinden kann ^^

Code: [AUSKLAPPEN]

Global xa,ya,mesh,surface

Graphics3D 800,600,16,2
SetBuffer BackBuffer()

xk=800
yk=600

Type TPunkt
Field x
Field y
Field id
End Type

While Not KeyHit(1)

  If MouseDown(1) Then
    If MouseX()<>Mxa And MouseY()<>mya Then
     mxa=MouseX()
     mya=MouseY()
     t.TPunkt=New TPunkt
     t\x=Mxa
     t\y=mya
    EndIf
  EndIf 



  For t.TPunkt=Each TPunkt
     If t\x>xg Then xg=t\x
     If t\y>yg Then yg=t\y
     If t\x<xk Then xk=t\x
     If t\y<yk Then yk=t\y
     xa=t\x
     ya=t\y
     verbinde()
 Next


 Rect xk,yk,(xg-xk)+1,(yg-yk)+1,0

 Flip
 Cls
Wend

Function Verbinde()
 
 For t.TPunkt=Each TPunkt
       Line xa,ya,t\x,t\y
     Next 
End Function




Sorry Habe die Edit Funktion Total Vergessen Embarassed

PS: ich weiß jetzt nicht mehr weiter ich muss ja jetzt die Vertex Machen und dann daraus nen Dreieck weiß aber nicht wie ich das machen soll kann mir da einer mal helfen ?
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs
 

konstantin

BeitragSo, Apr 08, 2007 14:25
Antworten mit Zitat
Benutzer-Profile anzeigen
kleiner tip: gib's auf... versuch erstmal was einfacheres. du hast bisher weder die logik hinter der allgemeinen programmierungen durchschaut, noch die mathematik, die fuer diese aufgabe noetig waere. ich fang doch auch nicht an, etwas zu kochen, wo ich bei jedem schritt meine mama fragen muss, was als naechstes kommt Wink
 

FWeinb

ehemals "ich"

BeitragSo, Apr 08, 2007 14:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja also das mit den Linene und so habe ich jetzt verstanden nur das mit dem Setzen der Dreiecke ist eben das prob Crying or Very sad Crying or Very sad
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs
 

FWeinb

ehemals "ich"

BeitragMo, Apr 09, 2007 20:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Also Ich gebe es auf und ich rate auch Jedem garnicht erst damit anzufangen ist mist das ganze.

Also soweit bin ich gekommen. (es ist total langsam)


Code: [AUSKLAPPEN]

Global xa,ya,mesh,surface,i#,p_x1,p_y1

Graphics3D 800,600,16,2
SetBuffer BackBuffer()

xk=800
yk=600

Type TPunkt
Field x
Field y
Field id
End Type



While Not KeyHit(1)
  If MouseDown(1) Then
    If MouseX()<>Mxa And MouseY()<>mya Then
     mxa=MouseX()
     mya=MouseY()
     t.TPunkt=New TPunkt
     t\x=Mxa
     t\y=mya
    EndIf
  EndIf 

  For t.TPunkt=Each TPunkt
     If t\x>xg Then xg=t\x
     If t\y>yg Then yg=t\y
     If t\x<xk Then xk=t\x
     If t\y<yk Then yk=t\y
     xa=t\x
     ya=t\y
     t1.TPunkt=Before t
     If t1.Tpunkt<>Null Then
       verbinde()
     EndIf
    Rect xk,yk,(xg-xk)+1,(yg-yk)+1,0
 Next


 
 Flip
 Cls
Wend

Function Verbinde()
 For t.TPunkt=Each TPunkt
   For f.Tpunkt=Each Tpunkt
    f1.Tpunkt=Before t
    If f1<>Null Then
     If LinieSchneidetLinie(xa,ya,t\x,t\y,f1\x,f1\y,f\x,f\y)=True Then
       ;Color 255,0,0
       ;Oval p_x1-5,p_y1-5,10,10
       ;Color 255,255,255
      C=1
     EndIf
    EndIf
   Next
  If C<>1 Then Line t\x,t\y,xa,ya
 Next 
 


End Function


Function LinieSchneidetLinie(x0#,y0#,x1#,y1#,x2#,y2#,x3#,y3#)
   d#=(y3-y2)*(x1-x0)-(x3-x2)*(y1-y0)
   If d = 0 Return False
   ua#=((x3-x2)*(y0-y2)-(y3-y2)*(x0-x2)) / d
   ub#=((x1-x0)*(y0-y2)-(y1-y0)*(x0-x2)) / d   
   If (ua>=0 And ua<=1) And (ub>=0 And ub<=1)
      p_x1=x0+ua*(x1-x0)
      p_y1=y0+ua*(y1-y0)
      Return True
   Else
      Return False   
   EndIf

   Return False   
End Function
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group