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

FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() ![]() 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. Urbachehemals "Basicprogger" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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* ![]() |
||
"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. Urbachehemals "Basicprogger" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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 |
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() |
||
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja also das mit den Linene und so habe ich jetzt verstanden nur das mit dem Setzen der Dreiecke ist eben das prob ![]() ![]() |
||
"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 |
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group