[B3D] Draw3D2 V.1.1 & SED & SGG

Übersicht BlitzBasic Codearchiv

Gehe zu Seite Zurück  1, 2, 3, 4  Weiter

Neue Antwort erstellen

Silver_Knee

BeitragDo, Jul 29, 2010 12:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Aso klar den hab ich gefunden. Meine nen editor für die Landschaften.

EDIT:
Hier was für DrawLine3D

BlitzBasic: [AUSKLAPPEN]
		If FDrawButton<>0 Then CheckQuad3D(FDrawX1-IDrawYTForm,FDrawY1+IDrawXTForm,FDrawX2-IDrawYTForm,FDrawY2+IDrawXTForm,FDrawX2+IDrawYTForm,FDrawY2-IDrawXTForm,FDrawX1+IDrawYTForm,FDrawY1-IDrawXTForm,FDrawButton,FDrawHandle)


Zwischen die letzten 2 Endifs aus der Funktion. Dann kann man hinter DrawLine3D(...........,FDrawButton=0) hängen =)

EDIT2:

DrawXTD: AddCL(FPhyxIH%...)

die variable FPhyxIH taucht in der ganzen datei nicht wieder auf o.O

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Jul 29, 2010 22:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Du meinst für DrawLine3D eine Buttonfunktion einbauen?

- - -

Es gibt leider keinen aktuellen Landschaftseditor (VED), auch kein Konstruktionseditor (CED). Beide Codes sind - mir aus unerklärlichen Gründen - nicht mehr auffindbar. Ich habe aus diesem Grund aus einem Altbestand und der Zuhilfenahme der SGG bereits neue Editoren angefangen, jedoch nicht beendet. Da auch der Zudrang auf die Draw3D2 - nicht zuletzt wegen der bereits alternden Sprache - im letzten Jahr sehr zurück gegangen ist.

Das Problem sind weniger die Editoren selbst, denn diese lassen sich mit recht wenig Auffand erstellen. Viel mehr bereitet mir Kopfschmerzen, wie man eine Verletintegration geschickt mit allen Feinheiten sinnvoll (also nah beieinander liegende mit unterschiedlichen Radien) editiert, ohne ein überlanges Video auf YouTube posten zu müssen.

Für den fehlenden Landschaftseditor hab ich grad keine passende Ausrede parat. Aber vielleicht gibt mir dieser Post wieder einen kleinen Schups in die entsprechende Richtung.

Edit1:

FPhyxIH Ist drin geblieben, da es für spätere Zwecke noch/wieder gebraucht wird. Natürlich hast du Recht, so in der Form wie es jetzt ist, ergibt das keinen Sinn. Aber bevor Parameteränderungen gemacht werden, hab ich das so belassen.

Silver_Knee

BeitragDo, Jul 29, 2010 23:38
Antworten mit Zitat
Benutzer-Profile anzeigen
ja, den Button meine ich.

Eine Kurze Einweisung was die ganzen abkürzungen heißen bei der Physik würde auch nicht schaden. Zb was Break und Adapt heißt oder welcher mode was heißt. Morgen poste ich mal ein kleines Szenario wenn ich es bis dahin nicht geschafft habe eine Ordentliche physik Szene hinzubiegen. Daran kannst du mir (und uns allen) ja deinePhysik erklären

"FPhyxIH reserved 0" klingt ja schon fast nach MSDN

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Jul 30, 2010 2:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab mir grad die Mühe gemacht, und all das nieder geschrieben. Bei Fragen immer her damit.

Gruß.

Code: [AUSKLAPPEN]
Die DrawXTD -Physik

ist eine nach dem Prinzip von Verlet.

Es gibt folgende Grundobjekte:

KP = Knotenpunkt (später: NP = Note Points)
VK = Verklinkung (später: CP = Compounds)
AM = Animate Move (später: AO = Attached Objects)
CL = Collision Line (später: noch unklar oder bleibt so)

Ein KP (Knotenpunkt)

ist ein Objekt, welches auf die Umgebung reagiert. Es kollidiert und hat somit
eine X/Y-Position,
eine X/Y-Geschwindigkeit,
einen (RD) Radius,
eine (MS) Masse,
einen (CT) CollisionType,
einen (TM) Drehmoment,
eine (ID) externe eigene ID

Eine VK (Verklinkung)

ist mathematisch, welches die KPe zusammen hält. Eine VK hat somit
die (K1) interne ID des 1. KP-Objektes,
die (K2) interen ID des 2. KP-Objektes,
die (FD) Fäderungseigenschaften,
die (DF) Dämpfungseigenschaften,
eine externe eigene ID

Ein AM (Animate Move)

ist eine Notwendigkeit, um dem ganzen einen Sinn zu geben. Es zeichnet Bilder, und hat somit:
Die Information, ob ein Bild an einem KP oder an einem VK gehängt ist
Es hat eine Framenummer, um entsprechend das richtige Bild anzeigen zu können
Ist es an einem KP, so kann es einen Skalierungsfaktor haben (zur visuellen Anpassung)
Ist es an einer VK, so gibt es drei Zeichenmodie (siehe DrawLine3D) mit X/Y-Offset

Eine CL (Collision Line)

ist ein unsichtbares Quad, dass ein CollisionType besitzt auf die KPe kollidieren. Es hat somit
ein allgemeines Mesh-Handle uns alles was dazu gehört. Also wie ein Terrain auch, nur eben 2D.

- - -

Eines vorweg: Die Physik in der Draw3D2 unterstützt nun eine Bearbeitung über Handles. Das heißt, dass die Objekte nicht mehr freistehend sind, sondern jedem Objekt (also jeder Konstruktion) ein eigenes Handle zugewiesen werden kann. So kann man zum Beispiel ein bestimmtes Objekt in einem Spiel nach laden, löschen, bewegen oder sonst was machen, ohne komplizierte Eigenberechnungen dazu tätigen zu müssen. Im Beispiel ''DrawXTD #99, (WIP) Physik Auto.bb'' wird ein Auto geladen, das anschließend als Handle gesteuert werden kann. So lassen sich weitere Fahrzeuge laden und einzeln steuern.

Außerdem besitzt jedes KP und jede VK zu der internen ID noch eine eigene vom Programmierer selbst definierbare ID. So muss man sich nicht mehr merken, dass bei einem Auto die KP/ID=13 und KP/ID=19 jeweils ein Rad ist, das angetrieben wird, sondern kann jedem Rad eine externe ID=1 gegeben werden. Will man nun jedes Rad beschleunigen, so beschleunigt man die Externe ID=1, und alle Räder beschleunigen. Wer es mag, kann natürlich auch weiterhin die interne ID=13 und ID=19 beschleunigen, was sogar schneller von statten geht, aber kaum ins Gewicht fällt.

Um unterscheiden zu können, ist jeder Befehl der eine interne ID steuert im Namen belassen worden. Befehle die das selbe auf externe Ids unternehmen, heißen mit Zusatz ...ID

- - -

->   AdaptKPID

Ist eine Kupplung, die alle KPID zusammen berechnet. Ein Kupplungswert von 0 entspricht 0%. Ein Kupplungswert von 1 entspricht nahezu 100%. Bei 1 wird die Kraft aller Räder zusammen gerechnet und anschließend wieder auf alle Räder aufgeteilt. Das entspricht zum Beispiel einem Panzerfahrzeug.

->   AddCL

Zeichnet eine Kollisionslinie von X1,Y1 nach X2,Y2. Die Koordinaten entsprechen dem der Draw3D2-System. Es ist zu empfehlen, die maximale Ausdehnung von +/- 4000 nicht zu überschreiten. Sonst kann es zu Fehlberechnungen bei der Kollision kommen. Bei größeren Welten, muss die ganze Welt kleiner skaliert werden.

->   AddKP

Erstellt ein neues KP an das Handle des ersten Parameters. Das Handle muss zuvor existieren, und wird mit NewCED erstellt. Die übrigen Parameter sind XPos, YPos, Radius, Masse, CT, Drehmoment, ExterneID

->   AddVK

Erstellt eine neue VK an das Handle des ersten Parameters. Das Handle muss zuvor existieren, und wird mit NewCED erstellt. Die übrigen Parameter sind KP/ID1, KP/ID2, Federung, Dämpfung, ExterneID

->   AddVKIDLen

Fügt eine gewisse Länge an bestehende VK. Damit lassen sich ''Tuningmassnahmen'' am lebendem Objekt durchführen. Zum Beispiel das Fahrwerk eines Autos höher oder tiefer stellen.

->   AppCED

Berechnet die Physik eines erstellten CED-Handles. Das heißt auch, das wenn mehrere Objekte im Spiel im Einsatz sind, auch mehrere solche Befehle durchgeführt werden müssen. Der zweite Parameter gibt an, wie viele Loops pro Aufruf gemacht werden sollen. Je mehr, umso stabiler und härter das Objekt, aber auch der Rechenaufwand steigt dadurch. Standardwert ist hier 2.

->   BreakKPID

Bremst alle KP einer externen ID. Das Bremsverhalten lässt sich anpassen. Parameter:
CED-Handle, externe ID, Linear, Abhängig, ABS. Das Linear gibt an, das das Bremsverhalten konstant hoch ist. Ist die Geschwindigkeit 100 und bremst mit 1, so ist im nächsten Frame die Geschwindigkeit 99, dann 98, dann 97 etc... Bei Abhängig wird die Geschwindigkeit mit einbezogen. So bremst bei der doppelten Geschwindigkeit es auch doppelt so stark. Ein realistisches Bremsverhalten eines Fahrzeuges, erhält man, wenn man eine gute Kombination von beiden findet. Der letzte Parameter ABS ist so ähnlich wie das echte ABS bei heutigen Fahrzeugen. Mit dem Unterschied, dass dann die Bremswirkung reduziert wird, sobald auch nur ein Rad einer externen ID-Gruppe nicht den Boden berührt. Im Beispielcode wird so beim Fahrzeug das eigene Überschlagen bei starker Bremsung reduziert.

->   DelCED

Löscht ein zuvor erstelltes/geladene CED-Handle und alle dessen Untergruppen wie KP, VK, AM

->   DrawCED

Zeichnet ein CED-Handle an aktueller Position. Bitte hier beachten, dass es einen Unterschied macht, ob man diesen Befehl vor oder nach AppCED durchführt. Logisch.

->   DrawKP

Zeichnet alle – auch die unsichtbaren – KP für Kontrollzwecke. Dazu ein Handle eines geladenen Images angeben, das mit LoadImage3D geladen wurde.

->   FreeCED

Ich blödkopf. Wird wohl das selbe sein wie DelCED. Beide Funktionen sind aber wohl doch unterschiedlich. Bin aber grad zu müde um das zu erfassen. Kommt alles noch.

->   GetCEDXPos / GetCEDYPos

Liefert die Mittelposition eines CED-Objektes. Dabei werden alle KP durchgesehen und entsprechend ihrer Position zusammen gerechnet. Modus=0 entspricht dem Objektmittelpunkt. Modus=1 entpricht dem Massemittelpunkt eines Objektes.

->   GetID

Keine Ahnung. Ist wohl noch aus einem Testcode geblieben... Müde und so... Kommt noch alles.

->   LoadCED

Lädt ein ganzes Objekt, das mit dem noch nicht fertigen Editor erstellt wurde.

->   LoadVED

Lädt eine ganze Landschaft, die mit dem noch nicht fertigen Editor erstellt wurde.

->   NewCED

Erstellt ein neues CED-Objekt. An diesem können dann weitere Objekte wie KP und VK angehängt werden. Diese Funktion gibt das entsprechende Handle zurück.

->   SetCED

Setzt Position, Winkel eines CED fest. Mode geht noch nicht 100% richtig. Mit Mode ließe sich das ganze absolut oder relativ anpassen.

->   TurnKPID

Beschleunigt alle externe ID. Dabei kann die Beschleunigungsart festgelegt werden. Mit den Werten rumspielen. Diese legen fest, dass nicht unendlich schnell beschleunigt werden kann, sondern einen Limit bekommt.

->   CollBzQuad3D

Steht noch in Bearbeitung

->   DrawImageKP

Ist eine CED-Interne Sache

- - -

Viele weitere Befehle sind gar nicht erst in die Veröffentlichung gegangen, da sie komplett noch ungetestet im Bezug der neuen Draw3D2 sind. Kann ich aber bei Interesse auch noch freigeben.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Silver_Knee

BeitragFr, Jul 30, 2010 20:05
Antworten mit Zitat
Benutzer-Profile anzeigen
danke. das war sehr aufschlussreich. Noch eine kleine Frage: Warum werden die Koordinaten der CLs durch 10 geteilt. Habe da die letzten nächste dran gesessen und mir n kopf gemacht, warum die Kollisionen nicht funktionieren wie einzezeichnet

count-doku

Betreff: Problem mit Origin3D

BeitragSa, Aug 07, 2010 13:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi hectic,

die Draw3D2 ist klasse Exclamation

Ich habe mich damit jetzt ein wenig auseinander gesetzt, und bin auf ein Problem mit Origin3D gestoßen...
Merkwürdigerweis kommt um ein Bild mit Alpha Channel, wenn die Auflösung <> dem Origin Wert ist,
ein pinker Rand -> 255,0,255.

Bilder:
user posted image

Komplett Dl:
https://www.blitzforum.de/upload/file.php?id=9270

Woran liegt das?
Mit dem Bild ist doch alles in Ordnung...


lg,
count-doku

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Aug 07, 2010 17:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Das liegt nicht an Origin3D direkt, sondern daran, dass die Texturen, sobald sie nicht absolut 1:1 dargestellt werden, ineinander ''verschwommen'' sind. Das nennt man dann Texel. Das ist auch Absicht, damit auch niedrige Texturauflösungen nicht gleich so billig aussehen.

Lösung ist, die Bilder vernünftig bearbeiten. Das heißt: Mach das ganze Bild schwarz und setz nur den Alphachannel entsprechend so, dass die Linien gesehen werden. Oder alternativ: Maskiere nicht lila 0.0.255, sondern 1.1.1 oder 0.0.0.

Das wäre im übrigen nicht nur bei Origin3D so, sondern auch bei DrawImage3D sobald nicht pixelperfekt skalliert ist bzw. wenn das Bild gedreht wird. Also immer auf saubere Texturen achten.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

count-doku

BeitragSa, Aug 07, 2010 18:04
Antworten mit Zitat
Benutzer-Profile anzeigen
aha.
Ich hab jetzt einfach die Farbe auf 1.0.0 gemacht und es geht.

Dass es vorher nicht ging lag dann wohl an Microsofts Photo Editor.
Ich hatte es nähmlich so gemacht:
Bild in Paint mit Lila Hintergrund.
Mit Photo Editor maskierfarbe auf lila gestellt.

Dann sind da hinter wohl noch lila teile, die dann als Texel sichtbar werden...

Danke hectic
count-doku

Xaymar

ehemals "Cgamer"

BeitragFr, Aug 20, 2010 15:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Folgendes führt zu einem RuntimeError
BlitzBasic: [AUSKLAPPEN]
Global SGG_MainMenu = CreateSGG(0,0,300,200,"Gfx\Draw3D\SGG_FlatMalistic.sgg",0,-1)


Wie benutzt man das richtig?
Warbseite

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Aug 21, 2010 13:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Die SGG-Datei ist eine normale Textdatei. Am besten mit Notepad öffnet und den Pfad der PNG anpassen. Dummerweise - und das habe ich zu spät gemerkt - wird der Pfad der da ausgelesen wird relativ vom Code und nicht von der SGG ausgelesen.

Code: [AUSKLAPPEN]
LOADIMAGE3D = SGG_FlatMilianLine.png
...

Wenn deine BB sich zum Beispiel auf root befindet, die SGG aber unter dem Verzeichnis Daten\SGG, dann muss in der SGG-Datei folgendes stehen:

Code: [AUSKLAPPEN]
LOADIMAGE3D = Daten\SGG\SGG_FlatMilianLine.png
...

Dann wird auch wieder alles gefunden.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Xaymar

ehemals "Cgamer"

BeitragSa, Aug 21, 2010 17:24
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
	;VARIABLENDEKLARATIONEN
Local IDrawTH.SGGHaupt
Local IDrawLoad%=0
Local FDrawFileFolder$

;HAUPT/TYPE/ERSTELLEN
IDrawTH.SGGHaupt=New SGGHaupt
IDrawTH\Bank=CreateBank(0)
IDrawTH\XPos=FDrawXPos
IDrawTH\YPos=FDrawYPos
IDrawTH\XRan=FDrawXRan
IDrawTH\YRan=FDrawYRan

;ALLGEMEINE/FEHLERBEHANDLUNG
For temp_Pos = Len(FDrawFile)-1 To 1 Step -1
If Mid(FDrawFile, temp_Pos, 1) = "/" Or Mid(FDrawFile, temp_Pos, 1) = "\"
FDrawFileFolder = Left(FDrawFile, temp_Pos)
Exit
EndIf
Next
If FileType(FDrawFileFolder+ParseSGG(FDrawFile,"LOADIMAGE3D"))<>1 Then RuntimeError "CreateSGG"+Chr$(10)+Chr$(10)+"typed file in ''"+FDrawFile+"'' Not found!"+Chr(10)+FDrawFileFolder+ParseSGG(FDrawFile,"LOADIMAGE3D")

;SGG/MAINIMAGE/LADEN
IDrawLoad=LoadImage3D(FDrawFileFolder+ParseSGG(FDrawFile,"LOADIMAGE3D"),2,2,FDrawPvot,FDrawOrdr)

Problem behoben, denke ich mal
Warbseite

Xaymar

ehemals "Cgamer"

Betreff: Slider für DrawSGG

BeitragSa, Aug 28, 2010 14:01
Antworten mit Zitat
Benutzer-Profile anzeigen
In DrawSGG.bb in der Funktion DrawSGG dieses Case einfügen:
BlitzBasic: [AUSKLAPPEN]
			Case SGGSLIDER

;TEMPWERTE/VORRECHNEN
IDrawX[0]=FDrawXPos+IDrawTN\XPos-IDrawTN\XRan+IDrawTH\ButtonMainU2-IDrawTH\ButtonMainU3
IDrawX[1]=FDrawXPos+IDrawTN\XPos-IDrawTN\XRan
IDrawX[2]=FDrawXPos+IDrawTN\XPos+IDrawTN\XRan
IDrawX[3]=FDrawXPos+IDrawTN\XPos+IDrawTN\XRan-IDrawTH\ButtonMainU2+IDrawTH\ButtonMainU3
IDrawY[0]=FDrawYPos+IDrawTN\YPos+(IDrawTH\ButtonMainV1-IDrawTH\ButtonMainV0)*0.15
IDrawY[1]=FDrawYPos+IDrawTN\YPos-(IDrawTH\ButtonMainV1-IDrawTH\ButtonMainV0)*0.15

;VERTEX/POLYGON/ZUWEISUNGEN
IDrawV0=AddVertex(IDrawTH\Face,IDrawX[0],IDrawY[0],0 ,IDrawTH\ButtonMainU0,IDrawTH\ButtonMainV0)
IDrawV1=AddVertex(IDrawTH\Face,IDrawX[1],IDrawY[0],0 ,IDrawTH\ButtonMainU1,IDrawTH\ButtonMainV0)
IDrawV2=AddVertex(IDrawTH\Face,IDrawX[2],IDrawY[0],0 ,IDrawTH\ButtonMainU2,IDrawTH\ButtonMainV0)
IDrawV3=AddVertex(IDrawTH\Face,IDrawX[3],IDrawY[0],0 ,IDrawTH\ButtonMainU3,IDrawTH\ButtonMainV0)
IDrawV4=AddVertex(IDrawTH\Face,IDrawX[0],IDrawY[1],0 ,IDrawTH\ButtonMainU0,IDrawTH\ButtonMainV1)
IDrawV5=AddVertex(IDrawTH\Face,IDrawX[1],IDrawY[1],0 ,IDrawTH\ButtonMainU1,IDrawTH\ButtonMainV1)
IDrawV6=AddVertex(IDrawTH\Face,IDrawX[2],IDrawY[1],0 ,IDrawTH\ButtonMainU2,IDrawTH\ButtonMainV1)
IDrawV7=AddVertex(IDrawTH\Face,IDrawX[3],IDrawY[1],0 ,IDrawTH\ButtonMainU3,IDrawTH\ButtonMainV1)
AddTriangle IDrawTH\Face,IDrawV0,IDrawV1,IDrawV5: AddTriangle IDrawTH\Face,IDrawV5,IDrawV4,IDrawV0
AddTriangle IDrawTH\Face,IDrawV1,IDrawV2,IDrawV6: AddTriangle IDrawTH\Face,IDrawV6,IDrawV5,IDrawV1
AddTriangle IDrawTH\Face,IDrawV2,IDrawV3,IDrawV7: AddTriangle IDrawTH\Face,IDrawV7,IDrawV6,IDrawV2

;TEMPWERTE/VORRECHNEN
IDrawTU.SGGUnter=Object.SGGUnter(PeekInt(IDrawTN\Bank,IDrawTN\Bffs))
If Float(IDrawTU\Item) > 1 Then IDrawTU\Item = 1
If Float(IDrawTU\Item) < 0 Then IDrawTU\Item = 0
IDrawX[0]=FDrawXPos+IDrawTN\XPos-IDrawTN\XRan-IDrawTN\XRan*(16/IDrawTN\XRan)+IDrawTH\ButtonMainU2-IDrawTH\ButtonMainU3+IDrawTN\XRan*Float(IDrawTU\Item)*2
IDrawX[1]=FDrawXPos+IDrawTN\XPos-IDrawTN\XRan-IDrawTN\XRan*(16/IDrawTN\XRan)+IDrawTN\XRan*Float(IDrawTU\Item)*2
IDrawX[2]=FDrawXPos+IDrawTN\XPos-IDrawTN\XRan+IDrawTN\XRan*(16/IDrawTN\XRan)+IDrawTN\XRan*Float(IDrawTU\Item)*2
IDrawX[3]=FDrawXPos+IDrawTN\XPos-IDrawTN\XRan+IDrawTN\XRan*(16/IDrawTN\XRan)-IDrawTH\ButtonMainU2+IDrawTH\ButtonMainU3+IDrawTN\XRan*Float(IDrawTU\Item)*2
IDrawY[0]=FDrawYPos+IDrawTN\YPos+(IDrawTH\ButtonMainV1-IDrawTH\ButtonMainV0)*0.5
IDrawY[1]=FDrawYPos+IDrawTN\YPos-(IDrawTH\ButtonMainV1-IDrawTH\ButtonMainV0)*0.5

;VERTEX/POLYGON/ZUWEISUNGEN
IDrawV0=AddVertex(IDrawTH\Face,IDrawX[0],IDrawY[0],0 ,IDrawTH\ButtonMainU0,IDrawTH\ButtonMainV0)
IDrawV1=AddVertex(IDrawTH\Face,IDrawX[1],IDrawY[0],0 ,IDrawTH\ButtonMainU1,IDrawTH\ButtonMainV0)
IDrawV2=AddVertex(IDrawTH\Face,IDrawX[2],IDrawY[0],0 ,IDrawTH\ButtonMainU2,IDrawTH\ButtonMainV0)
IDrawV3=AddVertex(IDrawTH\Face,IDrawX[3],IDrawY[0],0 ,IDrawTH\ButtonMainU3,IDrawTH\ButtonMainV0)
IDrawV4=AddVertex(IDrawTH\Face,IDrawX[0],IDrawY[1],0 ,IDrawTH\ButtonMainU0,IDrawTH\ButtonMainV1)
IDrawV5=AddVertex(IDrawTH\Face,IDrawX[1],IDrawY[1],0 ,IDrawTH\ButtonMainU1,IDrawTH\ButtonMainV1)
IDrawV6=AddVertex(IDrawTH\Face,IDrawX[2],IDrawY[1],0 ,IDrawTH\ButtonMainU2,IDrawTH\ButtonMainV1)
IDrawV7=AddVertex(IDrawTH\Face,IDrawX[3],IDrawY[1],0 ,IDrawTH\ButtonMainU3,IDrawTH\ButtonMainV1)
AddTriangle IDrawTH\Face,IDrawV0,IDrawV1,IDrawV5: AddTriangle IDrawTH\Face,IDrawV5,IDrawV4,IDrawV0
AddTriangle IDrawTH\Face,IDrawV1,IDrawV2,IDrawV6: AddTriangle IDrawTH\Face,IDrawV6,IDrawV5,IDrawV1
AddTriangle IDrawTH\Face,IDrawV2,IDrawV3,IDrawV7: AddTriangle IDrawTH\Face,IDrawV7,IDrawV6,IDrawV2

;TEMPWERTE/VORRECHNEN
IDrawX[0]=FDrawXPos+IDrawTN\XPos-IDrawTN\XRan+IDrawTH\ButtonMainU2-IDrawTH\ButtonMainU3
IDrawX[1]=FDrawXPos+IDrawTN\XPos-IDrawTN\XRan
IDrawX[2]=FDrawXPos+IDrawTN\XPos+IDrawTN\XRan
IDrawX[3]=FDrawXPos+IDrawTN\XPos+IDrawTN\XRan-IDrawTH\ButtonMainU2+IDrawTH\ButtonMainU3
IDrawY[0]=FDrawYPos+IDrawTN\YPos+(IDrawTH\ButtonMainV1-IDrawTH\ButtonMainV0)*0.5
IDrawY[1]=FDrawYPos+IDrawTN\YPos-(IDrawTH\ButtonMainV1-IDrawTH\ButtonMainV0)*0.5

;MOUSE/CHECK
If IDrawOver>0 And CheckQuad3D(IDrawX[0],IDrawY[0],IDrawX[3],IDrawY[0],IDrawX[3],IDrawY[1],IDrawX[0],IDrawY[1],1,IDrawTH\Glow)>0 Then

;GLOBALEN/OVER/WERTEVERGABE
SGGOver3D=PeekInt(IDrawTH\Bank,IDrawTHCount*4)

;BUTTON/VERARBEITUNG
If MouseDown3D>0 Then

;TEMPWERTE/VORRECHNEN
IDrawX[0]=FDrawXPos+IDrawTN\XPos-IDrawTN\XRan-IDrawTN\XRan*(16/IDrawTN\XRan)+IDrawTH\ButtonMainU2-IDrawTH\ButtonMainU3+IDrawTN\XRan*Float(IDrawTU\Item)*2
IDrawX[1]=FDrawXPos+IDrawTN\XPos-IDrawTN\XRan-IDrawTN\XRan*(16/IDrawTN\XRan)+IDrawTN\XRan*Float(IDrawTU\Item)*2
IDrawX[2]=FDrawXPos+IDrawTN\XPos-IDrawTN\XRan+IDrawTN\XRan*(16/IDrawTN\XRan)+IDrawTN\XRan*Float(IDrawTU\Item)*2
IDrawX[3]=FDrawXPos+IDrawTN\XPos-IDrawTN\XRan+IDrawTN\XRan*(16/IDrawTN\XRan)-IDrawTH\ButtonMainU2+IDrawTH\ButtonMainU3+IDrawTN\XRan*Float(IDrawTU\Item)*2
IDrawY[0]=FDrawYPos+IDrawTN\YPos+(IDrawTH\ButtonMainV1-IDrawTH\ButtonMainV0)*0.5
IDrawY[1]=FDrawYPos+IDrawTN\YPos-(IDrawTH\ButtonMainV1-IDrawTH\ButtonMainV0)*0.5

;VERTEX/POLYGON/ZUWEISUNGEN
IDrawV0=AddVertex(IDrawTH\Face,IDrawX[0],IDrawY[0],0 ,IDrawTH\ButtonDownU0,IDrawTH\ButtonDownV0)
IDrawV1=AddVertex(IDrawTH\Face,IDrawX[1],IDrawY[0],0 ,IDrawTH\ButtonDownU1,IDrawTH\ButtonDownV0)
IDrawV2=AddVertex(IDrawTH\Face,IDrawX[2],IDrawY[0],0 ,IDrawTH\ButtonDownU2,IDrawTH\ButtonDownV0)
IDrawV3=AddVertex(IDrawTH\Face,IDrawX[3],IDrawY[0],0 ,IDrawTH\ButtonDownU3,IDrawTH\ButtonDownV0)
IDrawV4=AddVertex(IDrawTH\Face,IDrawX[0],IDrawY[1],0 ,IDrawTH\ButtonDownU0,IDrawTH\ButtonDownV1)
IDrawV5=AddVertex(IDrawTH\Face,IDrawX[1],IDrawY[1],0 ,IDrawTH\ButtonDownU1,IDrawTH\ButtonDownV1)
IDrawV6=AddVertex(IDrawTH\Face,IDrawX[2],IDrawY[1],0 ,IDrawTH\ButtonDownU2,IDrawTH\ButtonDownV1)
IDrawV7=AddVertex(IDrawTH\Face,IDrawX[3],IDrawY[1],0 ,IDrawTH\ButtonDownU3,IDrawTH\ButtonDownV1)
AddTriangle IDrawTH\Face,IDrawV0,IDrawV1,IDrawV5: AddTriangle IDrawTH\Face,IDrawV5,IDrawV4,IDrawV0
AddTriangle IDrawTH\Face,IDrawV1,IDrawV2,IDrawV6: AddTriangle IDrawTH\Face,IDrawV6,IDrawV5,IDrawV1
AddTriangle IDrawTH\Face,IDrawV2,IDrawV3,IDrawV7: AddTriangle IDrawTH\Face,IDrawV7,IDrawV6,IDrawV2

;SPZ3D
IDrawOver=2

;SPEZIELLE/MAUSABFRAGE
If MouseDown3D=2 Then SGGSpz3D=SGGOver3D

;GLOBALEN/WERTEVERGABE
SGGDown3D=SGGOver3D

;POSITION/MARKIEREN
If MouseHit3D>0 Then
IDrawTN\Bffs=IDrawTN\Bffs+4
If IDrawTN\Bffs=BankSize(IDrawTN\Bank) Then IDrawTN\Bffs=0
SGGHit3D=SGGOver3D
SGGSpz3D=SGGOver3D
End If

Local FlP# = ((MouseX3D-(FDrawXPos+IDrawTN\XPos-IDrawTN\XRan))/Float(IDrawTN\XRan))*0.5
IDrawTU\Item = FlP
Else
;TEMPWERTE/VORRECHNEN
IDrawX[0]=FDrawXPos+IDrawTN\XPos-IDrawTN\XRan-IDrawTN\XRan*(16/IDrawTN\XRan)+IDrawTH\ButtonMainU2-IDrawTH\ButtonMainU3+IDrawTN\XRan*Float(IDrawTU\Item)*2
IDrawX[1]=FDrawXPos+IDrawTN\XPos-IDrawTN\XRan-IDrawTN\XRan*(16/IDrawTN\XRan)+IDrawTN\XRan*Float(IDrawTU\Item)*2
IDrawX[2]=FDrawXPos+IDrawTN\XPos-IDrawTN\XRan+IDrawTN\XRan*(16/IDrawTN\XRan)+IDrawTN\XRan*Float(IDrawTU\Item)*2
IDrawX[3]=FDrawXPos+IDrawTN\XPos-IDrawTN\XRan+IDrawTN\XRan*(16/IDrawTN\XRan)-IDrawTH\ButtonMainU2+IDrawTH\ButtonMainU3+IDrawTN\XRan*Float(IDrawTU\Item)*2
IDrawY[0]=FDrawYPos+IDrawTN\YPos+(IDrawTH\ButtonMainV1-IDrawTH\ButtonMainV0)*0.5
IDrawY[1]=FDrawYPos+IDrawTN\YPos-(IDrawTH\ButtonMainV1-IDrawTH\ButtonMainV0)*0.5

;VERTEX/POLYGON/ZUWEISUNGEN
IDrawV0=AddVertex(IDrawTH\Face,IDrawX[0],IDrawY[0],0 ,IDrawTH\ButtonGlowU0,IDrawTH\ButtonGlowV0)
IDrawV1=AddVertex(IDrawTH\Face,IDrawX[1],IDrawY[0],0 ,IDrawTH\ButtonGlowU1,IDrawTH\ButtonGlowV0)
IDrawV2=AddVertex(IDrawTH\Face,IDrawX[2],IDrawY[0],0 ,IDrawTH\ButtonGlowU2,IDrawTH\ButtonGlowV0)
IDrawV3=AddVertex(IDrawTH\Face,IDrawX[3],IDrawY[0],0 ,IDrawTH\ButtonGlowU3,IDrawTH\ButtonGlowV0)
IDrawV4=AddVertex(IDrawTH\Face,IDrawX[0],IDrawY[1],0 ,IDrawTH\ButtonGlowU0,IDrawTH\ButtonGlowV1)
IDrawV5=AddVertex(IDrawTH\Face,IDrawX[1],IDrawY[1],0 ,IDrawTH\ButtonGlowU1,IDrawTH\ButtonGlowV1)
IDrawV6=AddVertex(IDrawTH\Face,IDrawX[2],IDrawY[1],0 ,IDrawTH\ButtonGlowU2,IDrawTH\ButtonGlowV1)
IDrawV7=AddVertex(IDrawTH\Face,IDrawX[3],IDrawY[1],0 ,IDrawTH\ButtonGlowU3,IDrawTH\ButtonGlowV1)
AddTriangle IDrawTH\Face,IDrawV0,IDrawV1,IDrawV5: AddTriangle IDrawTH\Face,IDrawV5,IDrawV4,IDrawV0
AddTriangle IDrawTH\Face,IDrawV1,IDrawV2,IDrawV6: AddTriangle IDrawTH\Face,IDrawV6,IDrawV5,IDrawV1
AddTriangle IDrawTH\Face,IDrawV2,IDrawV3,IDrawV7: AddTriangle IDrawTH\Face,IDrawV7,IDrawV6,IDrawV2
EndIf
EndIf

und die Konstante einfügen:
BlitzBasic: [AUSKLAPPEN]
Const SGGSLIDER%=5


GetStringSGG() liefert euch dann eine Float der Sliderposition zurück und umgekehrt setzt ihr sie mit SetStringSGG()

bei AddingSGG wird Align ignoriert, weshalb ihr das als Variablenspeicher verwenden könnt um z.b. das maximum zu speichern
Warbseite

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Aug 28, 2010 19:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Xaymar, danke für die beiden Erweiterungen. Beide funktionieren wunderbar! Ich hab auch schon beide in meiner Version aktualisiert.

Die Slider-Funktion ist auch super. Ich hab mich nun heute - voll motiviert - ran gestürzt und den Code noch gekürzt und noch so umgestaltet, dass die Slider auch auf frei positionierten Pivots funktionieren. Very Happy

Werde ich dann wohl in den nächsten Tagen eine neue aktuelle Version raus hauen.

Danke nochmal. Finde ich gut, wenn auch andere sich an der Draw3D2 beteiligen.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Xaymar

ehemals "Cgamer"

BeitragSo, Aug 29, 2010 13:27
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
						If Float(IDrawTU\Item) > 1 Then IDrawTU\Item = 1
If Float(IDrawTU\Item) < 0 Then IDrawTU\Item = 0

Muss nach:
BlitzBasic: [AUSKLAPPEN]
Local FlP# = ((MouseX3D-(FDrawXPos+IDrawTN\XPos-IDrawTN\XRan))/Float(IDrawTN\XRan))*0.5
IDrawTU\Item = FlP

um das -0.05 - 1.05 zu eliminieren
Warbseite

Xaymar

ehemals "Cgamer"

BeitragSa, Sep 04, 2010 10:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Mir stellt sich gerade die Frage wie ich CLs lösche. Wenn es nicht geht, kann ich ja CEDs als alternative nehmen oder?
Warbseite

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Sep 04, 2010 11:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit CLs meinst du Kollisionslinien die mit AddCL erstellt wurden?

Wenn ja, dann kann man diese nicht nachträglich löschen, da es auch nur transparente Triangles sind. Und diese lassen sich nicht einzeln löschen. In solchen Fällen die ganze CL löschen (und ich sehe gerade das es dazu noch keine Funktion gibt). Mach dir dazu selbst eine, oder schreib einfach:

Code: [AUSKLAPPEN]
ClearSurface GCEDFace

Danach ist die ganze CL weg, und man kann sie ohne der einen gewünschten neu zeichnen. Das Problem wollte ich früher schon über eine Handlesteuerung lösen. So das man die Möglichkeit hätte einzelne Wände wie Türen etc. über EntityType aus/ein zu schalten.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

judos

BeitragSo, Sep 05, 2010 2:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Wow, ich hab mir die ganzen Beispiele gerade angesehen und muss sagen, die draw3d2 sieht super super aus!! Wenn ich mal mehr zeit habe werde ich die genauer anschauen und vielleicht auch mal in ein Spiel oder so einbauen. Nur leider ist da immer dieser Zeitfaktor der mich von viel abhält Rolling Eyes

Also nochmals: Weltklasse!!! Shocked Wink

Eine kleine Eigenheit ist mir aufgefallen. Das Beispiel "Draw3D2 Stuff, Create Minimap.bb" wirft einen "Entity is not a model or camera" Fehler beim Start und zwar bei dieser Zeile: "EntityOrder P2,-1000".
Bin mir gerade nicht sicher wo da der Fehler liegt...

Grüsse,
judos

TurTur

BeitragDi, Sep 14, 2010 19:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Eines gleich vorweg -- ein Supertool. Habe es mir vor ein paar Wochen heruntergeladen und gegen die vorherige Version ausgetauscht.
Ich verwende die Routine CheckQuad3D(..) in meinen Programmen auch direkt.
Dabei ist mir aufgefallen, das die Routine unter ganz bestimmten Voraussetzungen "nicht ganz" korrekt arbeitet.
Dies geschieht NUR bei unterschiedlichen Angaben für Bildschirmauflösung und Origin3D(..) und dem Defaultwert für FDrawHandle% [CheckQuad3D(..,FDrawHandle%=0) ] .
Der Glow-Effekt wird zwar an der an die Routine übergebenen Position ausgegeben, aber zu einem falschen Zeitpunkt. Normalerweise sollte das geschehen, wenn sich die Maus über dem definierten Bereich befindet, unter den o.g. Bedingungen erfolgt es aber zu früh oder zu spät (abhängig von der Bildschirmauflösung und Origin3D()).
Beispiel: an die Routine übergeben X1=-20 Y1=104 X2=20 Y2=65
Die Einblendung des Glow-Effektes erfolgt in diesem Fall, wenn sich die Maus im Bereich Y1=80 Y2=51 befindet (also ein Stück weiter unten auf der Y-Achse). Laughing

Da ich mittlerweile herausgefunden habe, das ich als FDrawHandle nur den Zeiger auf die Basis-BMP oder das gegrabte Image übergeben muß, kann ich dem Problem schon aus dem Weg gehen.
Ich habe aber in deinem Tool die Routine DrawImage4D(..) gefunden.
Im Gegensatz zu den übrigen Routinen rufts du hier CheckQuad3D(..) mit dem Defaultwert 0 auf.
... und unter den o.g. Bedingungen mit einem ähnlichen Fehler (ausprobiert), schau mal nach.

Zum Schluß aber doch noch die Frage: Ist der Zeiger auf die Basis-Bitmap oder das gegrabbte Teilbild die bessere Variante für FDrawHandle% ?

Schöne Grüsse
TurTur

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDi, Sep 14, 2010 20:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstmal freut es mich, dass noch Interesse an der Draw3D2 besteht. Nun zum Thema:

judos
Danke für den Tipp! Tatsächlich ist das EntityOrder P1,-1000 überflüssig, da an dieser Stelle eh keine Sortierung gemacht werden kann. Fehler von mir. Kannst du also einfach löschen diese Zeile. Wink

TurTur
Hab mir das mit CheckQuad3D kurz angesehen. Ich bin auch mal auf dieses Problem gestoßen, und wollte es auch automatisch beheben. Doch dann kommen immer wieder Spezialfälle, wo es doch wieder anders geregelt werden muss. Folgenden Tipps hab ich für dich, wenn du CheckQuad3D anwenden willst. Setz auf den Parameter Handle das selbe ein, was auch in Button steht. Es ist im übrigen egal ob es ein geladenes Bild, oder nur ein Teilbild ist. Die Draw3D2 liest es eh über DRAWFONTLINK aus.

BeispielCode: [AUSKLAPPEN]
CheckQuad3D(-100,+100, +100,+100, +100,-100, -100,-100, Glow, Glow)

Dann wird in allen Skalierungen das richtig abgefragt, da das zeichnen als auch die Abfrage gleichgestellt sind.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

TurTur

BeitragMi, Sep 15, 2010 12:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für den guten Tipp. Das vereinfacht das Ganze nochmals. Very Happy

Ich denke das Interresse an dem Tool ist nach wie vor da. Aber es ist wie es ist. Es wird kopiert, eingesetzt, man freut sich das alles funktioniert, ...... und vergißt dabei tunlichst, das jemand anderes eine Menge "Hirnschmalz" verbraucht hat, um es zu realisieren.
Besonders die konsequente Weiterentwicklung der Routinen für die Erstellung graphischer Zeichensätze hat mir gefallen. Da jetzt auch reduzierte Zeichensätze (nur bis ASCII 127) möglich sind und diese auch noch mit anderen Grafiken gemischt werden können, führt das zu einer enormen Einsparung an Arbeitspeicher. Super.

Das Problem mit den deutschen Umlauten habe ich bei einem reduzierten Zeichensatz so gelöst, das an der Position ASCII 16 der Platzhalter für alle nicht darstellbaren Zeichen untergebracht ist und ab ASCII 17 dann die deutschen Umlaute.
Deine Routine Text3D habe ich dann um einen optionalen Parameter ASCII128%=0 erweitert und im Quelltext der Routine diese kleine Änderung vorgenommen:

Code: [AUSKLAPPEN]

 :
 :
   ;TEXTAUSGABE/DURCHFÜHREN
   For IDrawCount=1 To IDrawLen
;      IDrawAsc=Asc(Mid(FDrawString,IDrawCount,1))       ;-- alte Zeile

      IDrawBuf$=Mid(FDrawString,IDrawCount,1)             ;-- neue Ergänzung
      IDrawAsc=Asc(IDrawBuf$)
      
      ;-- Bei reduziertem Font ASCII-Werte der Sonderzeichen korrigieren, liegen auf den Positionen 17..23
      If IDrawAsc>=128 Then
         If FDrawASCII128% Then IDrawAsc=Instr("äÄöÖüÜß", IDrawBuf$)+16
      End If
  :
  :


Der Vorteil liegt dann darin, das bei einem reduzierten Font der String wie gehabt übergeben werden kann, ohne das man "von Hand" diesen String mit CHR$(xx) "verunstalten" muß.

Das die Modifikation mit so kleinem Aufwand möglich war, zeigt auch noch mal die Qualität des Tools.
Du siehst also, das Interresse an deinem Tool ist unverändert. Laughing

Schöne Grüsse
TurTur

Gehe zu Seite Zurück  1, 2, 3, 4  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group