Xors3D

Übersicht BlitzBasic FAQ und Tutorials

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

Neue Antwort erstellen

tft

BeitragFr, Apr 09, 2010 17:34
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
;
; Xors3D examples by TFT
;
; 008 : Basic 8
;
; Ein Raumschiff gefällig..
; Auch ohne Modell Programm können wir mit etwas
; Ideenreichtum ein kleines Raumschiff erzeugen.
; Wir verwenden dazu einige der Mesh Befehle mit dehnen
; sich herlich Basteln läst und machen mit AddMesh eins draus.
;

Include "xors3d.bb"

; Für all diejenigen die nachstehende DLL kennen. Eine erleichterung
; bei allen Windows bezogenen dingen.

;Include"blitzsys.bb"
;If DLLBlitzSysInitialise() = False Then RuntimeError("Blitzsys.dll not found")
;Global BlitzSys=1

Global ap$="Xors3D example by TFT for german comunity"

Global ScrX,Scry
Global WinMode=True

If BlitzSys=1 And WinMode=True
; ScrX=DLLDesktopWidth()
; ScrY=DLLDesktopHeight()
Else
ScrX=800:Scry=600
EndIf

xGraphics3D(ScrX,Scry,32,True,True)
xAppTitle(ap$)

Global CPiv=xCreatePivot()
Global CPiv2=xCreatePivot(CPiv)
Global Cam=xCreateCamera(CPiv2)
xPositionEntity(Cam,0,1,-5)

Global Ligt=xCreateLight(LIGHT_DIRECTIONAL)
xTurnEntity(Ligt,90,0,0)

; wir basteln uns ein Raumschiff

; Der grund Körper
PlayerObject=xCreateCone(14,True,CPiv)
xRotateEntity(PlayerObject,90,0,0)
xScaleMesh(PlayerObject,1,1,0.2)

; Ein seiten Teil
; Es wird nicht als eigenes Entity behandelt.
; Wir addieren die Mesh Informationen zum grund Körper
c=xCreateCylinder(14,True)
xScaleMesh(c,0.02,0.3,0.02)
xPositionMesh(c,0.6,0,0)
xAddMesh(c,PlayerObject)
; Nach dem Addieren wird das muster Object nicht mer benötigt und
; kann freigegeben werden.
xFreeEntity(c)

c=xCreateCylinder(14,True)
xScaleMesh(c,0.02,0.3,0.02)
xPositionMesh(c,-0.6,0,0)
xAddMesh(c,PlayerObject)
xFreeEntity(c)
c=xCreateCone(4,True)
xEntityColor(c,$0,$ff,$ff)
xScaleMesh(c,0.4,0.4,0.15)
xPositionMesh(c,0,-0.2,-0.1)
xAddMesh(c,PlayerObject)
xFreeEntity(c)
c=xCreateCylinder(14,True,PlayerObject)
xEntityColor(c,$ff,$0,$0)
xScaleMesh(c,0.15,0.2,0.15)
xPositionMesh(c,0.35,-0.9,0)
xAddMesh(c,PlayerObject)
xFreeEntity(c)
c=xCreateCylinder(14,True,PlayerObject)
xEntityColor(c,$ff,$0,$0)
xScaleMesh(c,0.15,0.2,0.15)
xPositionMesh(c,-0.35,-0.9,0)
xAddMesh(c,PlayerObject)
xFreeEntity(c)

; --------------------------------------------------------

Cube=StarCube()

QubeField()

z#=0:x#=0:y#=0
xColor($33,$ff,$ff)

xHidePointer()
xFlushMouse()

Repeat

alpha#=MilliSecs()-timer:timer=MilliSecs()

y#=y#+(xMouseYSpeed()/50000.0)*alpha#
xTurnEntity(CPiv,y#*alpha#,0,0)
x#=x#-(xMouseXSpeed()/50000.0)*alpha#
xTurnEntity(CPiv,0,x#*alpha#,0)
z#=z#+(xMouseZSpeed()/1000.0)*alpha#

xMoveMouse(ScrX/2,ScrY/2)

; Damit wir auch mal von der seite schauen dürfen

If xKeyDown(203); Pfeil lings
xTurnEntity(CPiv2,0,0.06*alpha#,0)
Else If xKeyDown(205); Pfeil rechts
xTurnEntity(CPiv2,0,-0.06*alpha#,0)
EndIf

xMoveEntity(CPiv,0,0,z#)

xPositionEntity(Cube,xEntityX(Cam,1),xEntityY(Cam,1),xEntityZ(Cam,1),1)

xRenderWorld

xText(10,10,"FPS "+xGetFPS())

xText(scrx/2,560,"Press arrow key left or right to look around the ship",1)
xFlip

Until xKeyHit(1)

End

Function StarCube()

Local Cube,Texture,i

Texture=xCreateTexture(512,512,1,1)
If Texture=0 Then RuntimeError("Handler=0")

xSetBuffer(xTextureBuffer(Texture,0))

xColor($ff,$ff,$ff)
For i=0 To 300
xRect(Rand(2,510),Rand(2,510),1,1,1)
Next

xColor($99,$99,$99)
For i=0 To 200
xRect(Rand(2,510),Rand(2,510),1,1,1)
Next

xColor($44,$44,$44)
For i=0 To 100
xRect(Rand(2,510),Rand(2,510),1,1,1)
Next

xColor($99,$44,$44)
For i=0 To 100
xRect(Rand(2,510),Rand(2,510),1,1,1)
Next

xColor($99,$99,$44)
For i=0 To 100
xRect(Rand(2,510),Rand(2,510),1,1,1)
Next

xSetBuffer(xBackBuffer())

Cube=xCreateCube()
xEntityTexture(Cube,Texture,0,0)
xEntityFX(Cube,1)
xFlipMesh(Cube)
xScaleEntity(Cube,10,10,10,1)
xEntityOrder(Cube,1)

Return Cube
End Function

Function WireQube()

Local Cube,Texture

Cube=xCreateCube()

Texture=xCreateTexture(32,32,1,1) : If Texture=0 Then RuntimeError("Handler=0")
xSetBuffer(xTextureBuffer(Texture,0))
xColor($ff,$ff,$ff)
xRect(0,0,31,31,0)

xSetBuffer(xBackBuffer())

xEntityTexture(Cube,Texture,0,0)
xEntityFX(Cube,17)
xTextureBlend(Texture,1)
xEntityBlend(Cube,3)
xEntityAlpha(Cube,0.1)

xEntityColor(Cube,$ff,0,0)

Return Cube
End Function

Function QubeField()

Local Cube2,ae,d,i,i1,i2

Cube2=WireQube()

ae=0
d=32
For i2=-d To d Step 6
For i1=-d To d Step 6
For i=-d To d Step 6
c=xCopyEntity(Cube2)
xPositionEntity(c,i2,i1,i)
xEntityColor(c,Rnd($99,$ff),Rnd($99,$ff),Rnd($99,$ff))
xScaleEntity(c,1,1,1)
ae=ae+1
Next
Next
Next

xFreeEntity(Cube2)

Return ae

End Function
TFT
http://www.optima-code.ch
Monkey,HTML5,CSS3,W 7 64 Bit, 8 GB Ram, GT470, W8 ist Müll !!!!!!
 

googlehupf

BeitragFr, Apr 09, 2010 23:36
Antworten mit Zitat
Benutzer-Profile anzeigen
@tft find das gut daß du dich mit xors3d beschäftigst....
bin damit auch schon ne weile unterwegs....
habs komplett mit lizenz und stehe auch gut mit den admins dort in kontakt.
kann auch gerne paar beispiel codes bringen aber eher für bmax.

betreibe die seite xors3d.de welche noch unter der umstrukturierung meinerseits leidet und bald im neuen gewand online geht.

kannst mich gerne mal per pm kontaktieren.

tft

BeitragSa, Apr 10, 2010 13:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich nehme das angeboht gerne in anspruch, vorallem weil mir etliche dinge beim ausarbeiten der Demos auffallen. Die man als Bugs betrachten kann, aber nicht muss. Deine Seite habe ich schon gesehen, und werde mich mal sehe lassen.

Gruss TFT
TFT
http://www.optima-code.ch
Monkey,HTML5,CSS3,W 7 64 Bit, 8 GB Ram, GT470, W8 ist Müll !!!!!!

tft

BeitragSo, Apr 11, 2010 1:33
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
;
; Xors3D examples by TFT
;
; 009 : Basic 9
;
; Kollision ........
; mal sehen was passiert.

Include "xors3d.bb"

Include"blitzsys.bb"
If DLLBlitzSysInitialise() = False Then RuntimeError("Blitzsys.dll not found")
Global BlitzSys=1

Global ap$="Xors3D example by TFT for german comunity"

Global ScrX,Scry
Global WinMode=False

If BlitzSys=1 And WinMode=True
ScrX=DLLDesktopWidth()
ScrY=DLLDesktopHeight()
Else
ScrX=800:Scry=600
EndIf

xGraphics3D(ScrX,Scry,32,WinMode,True)
xAppTitle(ap$)

Global CPiv=xCreatePivot()
Global CPiv2=xCreatePivot(CPiv)
Global Cam=xCreateCamera(CPiv2)
xPositionEntity(Cam,0,1,-5)

Global Ligt=xCreateLight(LIGHT_DIRECTIONAL)
xTurnEntity(Ligt,90,0,0)

;------------------------------------------

PlayerShip=CreateShip()

; Da stellt sich doch gleich die frage, warum den das Pivot und nicht
; das Shiff selber verwendet wird. In unserem fall liegt das daran das
; die Slide und Stop befehle bei Child Objecten nicht immer richtig
; funktioniert. Beim Sliden wird dann das Object im Koordinaten Raum
; des Parent verschoben. Probiert es doch einfach aus. Ersetzt CPiv durch
; PlayerShip und den letzten Parameter von Collision von 0 nach 2.

xEntityType(CPiv,1)
xEntityRadius(CPiv,1)

; Eine der wesentlichen grund Züge der Collisions Erkennung ist
; die Typen trennung. Dadurch kann man gezielt objecte auf
; Kollision prüfen.

xCollisions(1,2,1,0)

;------------------------------------------

Cube=StarCube()
QubeField()

z#=0:x#=0:y#=0
xColor($33,$ff,$ff)

xHidePointer()
xFlushMouse()
xFlushKeys()

Repeat

alpha#=MilliSecs()-timer:timer=MilliSecs()

y#=y#+(xMouseYSpeed()/50000.0)*alpha#
xTurnEntity(CPiv,y#*alpha#,0,0)
x#=x#-(xMouseXSpeed()/50000.0)*alpha#
xTurnEntity(CPiv,0,x#*alpha#,0)
z#=z#+(xMouseZSpeed()/1000.0)*alpha#

xMoveMouse(ScrX/2,ScrY/2)

If xKeyDown(203); Pfeil lings
xTurnEntity(CPiv2,0,0.06*alpha#,0)
Else If xKeyDown(205); Pfeil rechts
xTurnEntity(CPiv2,0,-0.06*alpha#,0)
EndIf

xMoveEntity(CPiv,0,0,z#)

xPositionEntity(Cube,xEntityX(Cam,1),xEntityY(Cam,1),xEntityZ(Cam,1),1)

xUpdateWorld()

; Nach dem UpdateWorld prüfen wir ob unser Schiff mit einem
; Object zusammen gestossen ist und löschen dies.

c=xCountCollisions(CPiv)
If c>0
For i=1 To c
; !!!! Wichtig ist das der Counter hir bei 0 anfängt.
cc=xCollisionEntity(CPiv,i-1)
xFreeEntity(cc)
Next
EndIf
xResetEntity(CPiv)

;-------------------------------------------------------------------------

xRenderWorld

xText(10,10,"FPS "+xGetFPS())

xFlip

Until xKeyHit(1)

End

Function StarCube()

Local Cube,Texture,i

Texture=xCreateTexture(512,512,1,1)
If Texture=0 Then RuntimeError("Handler=0")

xSetBuffer(xTextureBuffer(Texture,0))

xColor($ff,$ff,$ff)
For i=0 To 300
xRect(Rand(2,510),Rand(2,510),1,1,1)
Next

xColor($99,$99,$99)
For i=0 To 200
xRect(Rand(2,510),Rand(2,510),1,1,1)
Next

xColor($44,$44,$44)
For i=0 To 100
xRect(Rand(2,510),Rand(2,510),1,1,1)
Next

xColor($99,$44,$44)
For i=0 To 100
xRect(Rand(2,510),Rand(2,510),1,1,1)
Next

xColor($99,$99,$44)
For i=0 To 100
xRect(Rand(2,510),Rand(2,510),1,1,1)
Next

xSetBuffer(xBackBuffer())

Cube=xCreateCube()
xEntityTexture(Cube,Texture,0,0)
xEntityFX(Cube,1)
xFlipMesh(Cube)
xScaleEntity(Cube,10,10,10,1)
xEntityOrder(Cube,1)

Return Cube
End Function

Function WireQube()

Local Cube,Texture

Cube=xCreateCube()

Texture=xCreateTexture(32,32,1,1) : If Texture=0 Then RuntimeError("Handler=0")
xSetBuffer(xTextureBuffer(Texture,0))
xColor($ff,$ff,$ff)
xRect(0,0,31,31,0)

xSetBuffer(xBackBuffer())

xEntityTexture(Cube,Texture,0,0)
xEntityFX(Cube,17)
xTextureBlend(Texture,1)
xEntityBlend(Cube,3)
xEntityAlpha(Cube,0.1)

xEntityColor(Cube,$ff,0,0)

Return Cube
End Function

Function Qube()

Local Cube,Texture

Cube=xCreateCube()

Texture=xCreateTexture(32,32,1,1) : If Texture=0 Then RuntimeError("Handler=0")
xSetBuffer(xTextureBuffer(Texture,0))
xColor($0,$0,$0)
xRect(0,0,31,31,0)
xColor($ff,$ff,$ff)
xRect(1,1,29,29,1)

xSetBuffer(xBackBuffer())

xEntityTexture(Cube,Texture,0,0)
xEntityColor(Cube,$ff,0,0)

Return Cube
End Function

Function QubeField()

Local Cube2,ae,d,i,i1,i2

Cube2=Qube()

ae=0
d=60
For i2=-d To d Step 6
For i1=-d To d Step 6
For i=-d To d Step 6
c=xCopyEntity(Cube2)
xPositionEntity(c,i2,i1,i)
xEntityColor(c,Rnd($99,$ff),Rnd($99,$ff),Rnd($99,$ff))
xScaleEntity(c,1,1,1)

;------------------------------------------------
xEntityType(c,2)
xEntityRadius(c,1)
;------------------------------------------------

ae=ae+1
Next
Next
Next

xFreeEntity(Cube2)

Return ae

End Function

Function CreateShip()

Local c,PlayerObject

PlayerObject=xCreateCone(14,True,CPiv)
xRotateEntity(PlayerObject,90,0,0)
xScaleMesh(PlayerObject,1,1,0.2)
c=xCreateCylinder(14,True)
xScaleMesh(c,0.02,0.3,0.02)
xPositionMesh(c,0.6,0,0)
xAddMesh(c,PlayerObject)
xFreeEntity(c)
c=xCreateCylinder(14,True)
xScaleMesh(c,0.02,0.3,0.02)
xPositionMesh(c,-0.6,0,0)
xAddMesh(c,PlayerObject)
xFreeEntity(c)
c=xCreateCone(4,True)
xEntityColor(c,$0,$ff,$ff)
xScaleMesh(c,0.4,0.4,0.15)
xPositionMesh(c,0,-0.2,-0.1)
xAddMesh(c,PlayerObject)
xFreeEntity(c)
c=xCreateCylinder(14,True,PlayerObject)
xEntityColor(c,$ff,$0,$0)
xScaleMesh(c,0.15,0.2,0.15)
xPositionMesh(c,0.35,-0.9,0)
xAddMesh(c,PlayerObject)
xFreeEntity(c)
c=xCreateCylinder(14,True,PlayerObject)
xEntityColor(c,$ff,$0,$0)
xScaleMesh(c,0.15,0.2,0.15)
xPositionMesh(c,-0.35,-0.9,0)
xAddMesh(c,PlayerObject)
xFreeEntity(c)

Return PlayerObject

End Function
TFT
http://www.optima-code.ch
Monkey,HTML5,CSS3,W 7 64 Bit, 8 GB Ram, GT470, W8 ist Müll !!!!!!
 

Mau

BeitragSo, Apr 11, 2010 10:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hätte mal eine Grundsatzfrage, bevor ich umsteige -wie kompatibel und stabil ist die Xors3D Engine denn auf den verschiedenen Betriebssystemen (XP, Vista, 7), 32- / 64-Bit Modi und NVidia / ATI-Karten? Ist das ganze nur eine Spielerei bisher oder wirklich stabil, kompatibel und einsatzbereit?


TFT hat Folgendes geschrieben:
; Texturen >512*512 werden nicht richtig verarbeitet.

(Aus dem Sternenhintergrund-Beispiel). Wie darf man das verstehen? Shocked
Alles muss, nichts kann!

tft

BeitragSo, Apr 11, 2010 10:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo.......

ich hoffe das euch das Thema interessiert. Für die nächsten Teile werden
wir noch einige andere coole funktions Sammlungen mit ins Boot nehmen.
Das bedeutet natürlich das die Codes immer länger werden. Daher werden
wir das ganze so abspecken das die Funktionen in einer Include landen.



BlitzBasic: [AUSKLAPPEN]
;
; Xors3D examples by TFT
;
; 010 : Basic 10
;
; Zielen ........ Schiessen ...... BOOM
; Jetzt kommt mehr Action rein ......
;
; Diejenigen unter euch die schon mehr Erfahrung mit den Tücken
; der Collisions erkennung habe. Werden jetzt sicher sagen ......
; BOOOAAAA so geht das ja nun garnicht.
; Und ich stimme dem zu. Aber dazu gibts fileicht ein Exanche ...

Include "xors3d.bb"

Include"blitzsys.bb"
If DLLBlitzSysInitialise() = False Then RuntimeError("Blitzsys.dll not found")
Global BlitzSys=1

Global ap$="Xors3D example by TFT for german comunity"

Global ScrX,Scry
Global WinMode=False

If BlitzSys=1 And WinMode=True
ScrX=DLLDesktopWidth()
ScrY=DLLDesktopHeight()
Else
ScrX=800:Scry=600
EndIf

xGraphics3D(ScrX,Scry,32,WinMode,True)
xAppTitle(ap$)

Global CPiv=xCreatePivot()
Global CPiv2=xCreatePivot(CPiv)
Global Cam=xCreateCamera(CPiv2)
xPositionEntity(Cam,0,1,-5)

Global Ligt=xCreateLight(LIGHT_DIRECTIONAL)
xTurnEntity(Ligt,90,0,0)

PlayerShip=CreateShip()
xEntityType(CPiv,1)
xEntityRadius(CPiv,1)
xCollisions(1,2,1,0)
Cube=StarCube()
QubeField()

;-----------------------------------------------

; Hir machen wir uns eine Bullet

cone=xCreateCone(3)
xRotateMesh(cone,90,0,0)
xScaleMesh(cone,0.1,0.1,0.4)
xEntityColor(cone,$ff,0,0)
xEntityFX(cone,1)
xHideEntity(cone)

; da wir 2 Kannonen leufe haben, switshen wir
WappenSwitsh=0

; Speicher für die Bullet daten.
Global Bullet.bullet
Type bullet
Field handler
End Type

; Die Bullets bekommen den Type 3
xCollisions(3,2,1,0)

;-----------------------------------------------
z#=0:x#=0:y#=0

xHidePointer()
xFlushMouse()
xFlushKeys()

Repeat

alpha#=MilliSecs()-timer:timer=MilliSecs()

y#=y#+(xMouseYSpeed()/50000.0)*alpha#
xTurnEntity(CPiv,y#*alpha#,0,0)
x#=x#-(xMouseXSpeed()/50000.0)*alpha#
xTurnEntity(CPiv,0,x#*alpha#,0)
z#=z#+(xMouseZSpeed()/1000.0)*alpha#

xMoveMouse(ScrX/2,ScrY/2)

If xKeyDown(203); Pfeil lings
xTurnEntity(CPiv2,0,0.06*alpha#,0)
Else If xKeyDown(205); Pfeil rechts
xTurnEntity(CPiv2,0,-0.06*alpha#,0)
EndIf

xMoveEntity(CPiv,0,0,z#)

;---------------------------------------------
If xKeyDown(57) ; Space Taste
; Eine Zeitliche betrenzung muss sein
If FireTimer<MilliSecs()
FireTimer=MilliSecs()+200 ; Und hir stellt man die Schuss Folge geschwindigkeit ein
WaponSwitsh= Not WaponSwitsh ; Waffenwechsel
If WaponSwitsh=0
WaponXPos#=0.6
Else
WaponXPos#=-0.6
EndIf
Bullet.bullet= New bullet
; Bullet copieren und positionieren.
Bullet.bullet\handler=xCopyEntity(cone)
xPositionEntity(Bullet.bullet\handler,xEntityX(PlayerShip,1),xEntityY(PlayerShip,1),xEntityZ(PlayerShip,1))
xRotateEntity(Bullet.bullet\handler,xEntityPitch(PlayerShip,1),xEntityYaw(PlayerShip,1),xEntityRoll(PlayerShip,1))
xMoveEntity (Bullet.bullet\handler,WaponXPos#,0,0)
xTurnEntity(Bullet.bullet\handler,270,0,0)
xEntityType(Bullet.bullet\handler,3)
xEntityRadius(Bullet.bullet\handler,0.2)
EndIf
EndIf

; und damit das ganze sich auch bewegt
Bullet.bullet= First bullet
For Bullet.bullet= Each bullet
; Und wozu das Z am ende ???
; Damit wir unsere Bullets nicht selber einholen :-)
xMoveEntity(Bullet.bullet\handler,0,0,0.01*alpha#+z#)
Next
;---------------------------------------------

xPositionEntity(Cube,xEntityX(Cam,1),xEntityY(Cam,1),xEntityZ(Cam,1),1)

xUpdateWorld()

;---------------------------------------------

; zu guter letzt reagieren wir noch auf die entstehende Collision
; Cube und Bullet werden entfernt
Bullet.bullet= First bullet
For Bullet.bullet= Each bullet
c=xCountCollisions(Bullet.bullet\handler)
If c>0
For i=1 To c
cc=xCollisionEntity(Bullet.bullet\handler,i-1)
xFreeEntity(cc)
xFreeEntity(Bullet.bullet\handler)
Delete Bullet.bullet
Next
EndIf
xResetEntity(CPiv)
Next

;-------------------------------------------------------------------------

xRenderWorld

xColor($0,$0,$0)
xText(10,10,"FPS "+xGetFPS())
xText(scrX/2,550,"Press space to fire bullet",1)
xColor($33,$ff,$ff)
xText(11,11,"FPS "+xGetFPS())
xText(scrX/2+1,551,"Press space to fire bullet",1)

xFlip

Until xKeyHit(1)

End

Function StarCube()

Local Cube,Texture,i

Texture=xCreateTexture(512,512,1,1)
If Texture=0 Then RuntimeError("Handler=0")

xSetBuffer(xTextureBuffer(Texture,0))

xColor($ff,$ff,$ff)
For i=0 To 300
xRect(Rand(2,510),Rand(2,510),1,1,1)
Next

xColor($99,$99,$99)
For i=0 To 200
xRect(Rand(2,510),Rand(2,510),1,1,1)
Next

xColor($44,$44,$44)
For i=0 To 100
xRect(Rand(2,510),Rand(2,510),1,1,1)
Next

xColor($99,$44,$44)
For i=0 To 100
xRect(Rand(2,510),Rand(2,510),1,1,1)
Next

xColor($99,$99,$44)
For i=0 To 100
xRect(Rand(2,510),Rand(2,510),1,1,1)
Next

xSetBuffer(xBackBuffer())

Cube=xCreateCube()
xEntityTexture(Cube,Texture,0,0)
xEntityFX(Cube,1)
xFlipMesh(Cube)
xScaleEntity(Cube,10,10,10,1)
xEntityOrder(Cube,1)

Return Cube
End Function

Function WireQube()

Local Cube,Texture

Cube=xCreateCube()

Texture=xCreateTexture(32,32,1,1) : If Texture=0 Then RuntimeError("Handler=0")
xSetBuffer(xTextureBuffer(Texture,0))
xColor($ff,$ff,$ff)
xRect(0,0,31,31,0)

xSetBuffer(xBackBuffer())

xEntityTexture(Cube,Texture,0,0)
xEntityFX(Cube,17)
xTextureBlend(Texture,1)
xEntityBlend(Cube,3)
xEntityAlpha(Cube,0.1)

xEntityColor(Cube,$ff,0,0)

Return Cube
End Function

Function Qube()

Local Cube,Texture

Cube=xCreateCube()

Texture=xCreateTexture(32,32,1,1) : If Texture=0 Then RuntimeError("Handler=0")
xSetBuffer(xTextureBuffer(Texture,0))
xColor($0,$0,$0)
xRect(0,0,31,31,0)
xColor($ff,$ff,$ff)
xRect(1,1,29,29,1)

xSetBuffer(xBackBuffer())

xEntityTexture(Cube,Texture,0,0)
xEntityColor(Cube,$ff,0,0)

Return Cube
End Function

Function QubeField()

Local Cube2,ae,d,i,i1,i2

Cube2=Qube()

ae=0
d=30
For i2=-d To d Step 6
For i1=-d To d Step 6
For i=-d To d Step 6
If i=0 And i1=0 And i2=0
Else
c=xCopyEntity(Cube2)
xPositionEntity(c,i2,i1,i)
xEntityColor(c,Rnd($99,$ff),Rnd($99,$ff),Rnd($99,$ff))
xScaleEntity(c,1,1,1)

xEntityType(c,2)
xEntityRadius(c,1)
EndIf

ae=ae+1
Next
Next
Next

xFreeEntity(Cube2)

Return ae

End Function

Function CreateShip()

Local c,PlayerObject

PlayerObject=xCreateCone(14,True,CPiv)
xRotateEntity(PlayerObject,90,0,0)
xScaleMesh(PlayerObject,1,1,0.2)
c=xCreateCylinder(14,True)
xScaleMesh(c,0.02,0.3,0.02)
xPositionMesh(c,0.6,0,0)
xAddMesh(c,PlayerObject)
xFreeEntity(c)
c=xCreateCylinder(14,True)
xScaleMesh(c,0.02,0.3,0.02)
xPositionMesh(c,-0.6,0,0)
xAddMesh(c,PlayerObject)
xFreeEntity(c)
c=xCreateCone(4,True)
xEntityColor(c,$0,$ff,$ff)
xScaleMesh(c,0.4,0.4,0.15)
xPositionMesh(c,0,-0.2,-0.1)
xAddMesh(c,PlayerObject)
xFreeEntity(c)
c=xCreateCylinder(14,True,PlayerObject)
xEntityColor(c,$ff,$0,$0)
xScaleMesh(c,0.15,0.2,0.15)
xPositionMesh(c,0.35,-0.9,0)
xAddMesh(c,PlayerObject)
xFreeEntity(c)
c=xCreateCylinder(14,True,PlayerObject)
xEntityColor(c,$ff,$0,$0)
xScaleMesh(c,0.15,0.2,0.15)
xPositionMesh(c,-0.35,-0.9,0)
xAddMesh(c,PlayerObject)
xFreeEntity(c)

Return PlayerObject

End Function
TFT
http://www.optima-code.ch
Monkey,HTML5,CSS3,W 7 64 Bit, 8 GB Ram, GT470, W8 ist Müll !!!!!!

tft

BeitragSo, Apr 11, 2010 11:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

@MAU, ich wollte eigentlich eine Texture 1024*1024 benutzen. Aber da
scheint etwas nicht zu funktiorien. Versuch doch selber mal eine solche
Texture zu erzeugen. Entweder funktioieren die Zeichenbefehle nicht
oder die berechnung der Texture Cords sind fehlerhaft. Man kann nichts von der Texture sehen. Ich habe aber auch nicht lange rum experimentiert...
weis also auch nicht obs an der NVidea Graka liegt.

Gruss TFT
TFT
http://www.optima-code.ch
Monkey,HTML5,CSS3,W 7 64 Bit, 8 GB Ram, GT470, W8 ist Müll !!!!!!

tft

BeitragDo, Apr 15, 2010 17:38
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
;
; Xors3D examples by TFT
;
; 011 : Basic 11
;
; Der weltraum ist leer?
; Ja dies ist eine besonderheit diese Menschenunwirklichen
; gebildes gähnender Leere. Selbst wenn man mit 100000 Kmh
; durchs Weltall düst. Bekommt man den eindruck das es nicht vor
; werts geht. Dazu haben sich findige Programierer den Sternen
; Staub ausgedacht. Ein paar wenige Objecte die sehr klein sind
; werden in der umgebung dargestellt und vermitteln den eindruck
; von bewegung. Hir ein ansatzt dazu.....
;

Include "xors3d.bb"

Include"blitzsys.bb"
If DLLBlitzSysInitialise() = False Then RuntimeError("Blitzsys.dll not found")
Global BlitzSys=1

Global ap$="Xors3D example by TFT for german comunity"

Global ScrX,Scry
Global WinMode=False

If BlitzSys=1 And WinMode=True
ScrX=DLLDesktopWidth()
ScrY=DLLDesktopHeight()
Else
ScrX=800:Scry=600
EndIf

xGraphics3D(ScrX,Scry,32,WinMode,True)
xAppTitle(ap$)

Global CPiv=xCreatePivot()
Global CPiv2=xCreatePivot(CPiv)
Global Cam=xCreateCamera(CPiv2)
xPositionEntity(Cam,0,1,-5)

Global Ligt=xCreateLight(LIGHT_DIRECTIONAL)
xTurnEntity(Ligt,90,0,0)

PlayerObject=CreateShip()
Cube=StarCube()

;-------------------------------------------------------------

; Das hir bedarf glaube ich nicht wirklich einer grösseren Erklärung

cstaub=xCreateCone(3)
xScaleMesh(cstaub,0.051,0.051,0.051)
;xEntityColor(cstaub,$55,$55,$55)
xEntityFX(cstaub,1)
;xHideEntity(cstaub)

Global Staub.Staub
Type Staub
Field handler
End Type

For i=0 To 90
staub.staub= New staub
Staub\handler=xCopyEntity(cstaub)
If staub\handler=0 Then RuntimeError("Handler=0")
xPositionEntity(Staub\handler,15-Rnd(0,30),15-Rnd(0,30),15-Rnd(0,30))
Next

;-------------------------------------------------------------

z#=0:x#=0:y#=0
xColor($33,$ff,$ff)

xHidePointer()
xFlushMouse()

Repeat

alpha#=MilliSecs()-timer:timer=MilliSecs()

y#=y#+(xMouseYSpeed()/50000.0)*alpha#
xTurnEntity(CPiv,y#*alpha#,0,0)
x#=x#-(xMouseXSpeed()/50000.0)*alpha#
xTurnEntity(CPiv,0,x#*alpha#,0)
z#=z#+(xMouseZSpeed()/1000.0)*alpha#

xMoveMouse(ScrX/2,ScrY/2)

If xKeyDown(203); Pfeil lings
xTurnEntity(CPiv2,0,0.06*alpha#,0)
Else If xKeyDown(205); Pfeil rechts
xTurnEntity(CPiv2,0,-0.06*alpha#,0)
EndIf

xMoveEntity(CPiv,0,0,z#)

xPositionEntity(Cube,xEntityX(Cam,1),xEntityY(Cam,1),xEntityZ(Cam,1),1)

;--------------------------------------------

; Und das hir ist auch recht einfach gehalten. Die 90 Staub teile werden
; hir auf entfernung geprüft und gegebenenfals gelöscht. Sofort wird in$
; Flugrichtung ein neues erzeugt.
staub.staub= First staub
For staub.staub= Each staub
If xEntityDistance(Staub\handler,CPiv)>30
; Angleichung an die Schiffposition und rotation
xPositionEntity(staub\handler,xEntityX(CPiv),xEntityY(CPiv),xEntityZ(CPiv))
xRotateEntity(staub\handler,xEntityPitch(CPiv),xEntityYaw(CPiv),xEntityRoll(CPiv))
; Dann zufällig um das Zentrum verteilen
xMoveEntity(staub\handler,15-Rnd(0,30),15-Rnd(0,30),0)
; und in Fartrichtung ins sichtfeld schieben.
If z#>0 Then xMoveEntity(staub\handler,0,0,15)
If z#<0 Then xMoveEntity(staub\handler,0,0,-15)
EndIf
Next
;--------------------------------------------

xRenderWorld

xText(10,10,"FPS "+xGetFPS())
xText(10,25,"Z "+xentityz(cpiv,1))
xText(scrx/2,560,"Press arrow key left or right to look around the ship",1)
xFlip

Until xKeyHit(1)

End

Function StarCube()

Local Cube,Texture,i

Texture=xCreateTexture(512,512,1,1)
If Texture=0 Then RuntimeError("Handler=0")

xSetBuffer(xTextureBuffer(Texture,0))

xColor($ff,$ff,$ff)
For i=0 To 300
xRect(Rand(2,510),Rand(2,510),1,1,1)
Next

xColor($99,$99,$99)
For i=0 To 200
xRect(Rand(2,510),Rand(2,510),1,1,1)
Next

xColor($44,$44,$44)
For i=0 To 100
xRect(Rand(2,510),Rand(2,510),1,1,1)
Next

xColor($99,$44,$44)
For i=0 To 100
xRect(Rand(2,510),Rand(2,510),1,1,1)
Next

xColor($99,$99,$44)
For i=0 To 100
xRect(Rand(2,510),Rand(2,510),1,1,1)
Next

xSetBuffer(xBackBuffer())

Cube=xCreateCube()
xEntityTexture(Cube,Texture,0,0)
xEntityFX(Cube,1)
xFlipMesh(Cube)
xScaleEntity(Cube,10,10,10,1)
xEntityOrder(Cube,1)

Return Cube
End Function

Function WireQube()

Local Cube,Texture

Cube=xCreateCube()

Texture=xCreateTexture(32,32,1,1) : If Texture=0 Then RuntimeError("Handler=0")
xSetBuffer(xTextureBuffer(Texture,0))
xColor($ff,$ff,$ff)
xRect(0,0,31,31,0)

xSetBuffer(xBackBuffer())

xEntityTexture(Cube,Texture,0,0)
xEntityFX(Cube,17)
xTextureBlend(Texture,1)
xEntityBlend(Cube,3)
xEntityAlpha(Cube,0.1)

xEntityColor(Cube,$ff,0,0)

Return Cube
End Function

Function CreateShip()

Local c,PlayerObject

PlayerObject=xCreateCone(14,True,CPiv)
xRotateEntity(PlayerObject,90,0,0)
xScaleMesh(PlayerObject,1,1,0.2)
c=xCreateCylinder(14,True)
xScaleMesh(c,0.02,0.3,0.02)
xPositionMesh(c,0.6,0,0)
xAddMesh(c,PlayerObject)
xFreeEntity(c)
c=xCreateCylinder(14,True)
xScaleMesh(c,0.02,0.3,0.02)
xPositionMesh(c,-0.6,0,0)
xAddMesh(c,PlayerObject)
xFreeEntity(c)
c=xCreateCone(4,True)
xEntityColor(c,$0,$ff,$ff)
xScaleMesh(c,0.4,0.4,0.15)
xPositionMesh(c,0,-0.2,-0.1)
xAddMesh(c,PlayerObject)
xFreeEntity(c)
c=xCreateCylinder(14,True,PlayerObject)
xEntityColor(c,$ff,$0,$0)
xScaleMesh(c,0.15,0.2,0.15)
xPositionMesh(c,0.35,-0.9,0)
xAddMesh(c,PlayerObject)
xFreeEntity(c)
c=xCreateCylinder(14,True,PlayerObject)
xEntityColor(c,$ff,$0,$0)
xScaleMesh(c,0.15,0.2,0.15)
xPositionMesh(c,-0.35,-0.9,0)
xAddMesh(c,PlayerObject)
xFreeEntity(c)

Return PlayerObject

End Function
TFT
http://www.optima-code.ch
Monkey,HTML5,CSS3,W 7 64 Bit, 8 GB Ram, GT470, W8 ist Müll !!!!!!

tft

BeitragDo, Apr 15, 2010 18:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Einer meiner grösten Hoffnungen war. Das die Rechenungenauigkeit durch
64 Bit Aritmetik eleminiert wurde. Jeder kennt sicher den Effekt das Objekte die sich bewegen und vom Welt Zentrum weiter als 28000 entfernt sind anfangen zu wackeln. Das ist bei Xors3D noch genauso wir bei B3D. Desweiteren gibt es Probleme bei der Mesh addition. Die Cords sind scheinbar auf 256 begrenzt. Alles darüber wird als MOD angehängt und taucht somit an falscher Stelle auf. Dann lassen sich Texturen zwar erzeugen und bearbeiten. Auch Rendern ist möglich. Aber die Zeichen befehle arbeiten mit Texturen Grösser 512*512 nicht richtig zusammen.

Also mein erster eintruck nach einer Woche ist. Eine solide Engine, mit noch dem einen oder anderen Problem. Ich werde fleisig weiter probieren.

Wenn jemand etwas besonderes ausprobiert haben möchte. Kann er hir ruhig mal was Posten.

Gruss TFT
TFT
http://www.optima-code.ch
Monkey,HTML5,CSS3,W 7 64 Bit, 8 GB Ram, GT470, W8 ist Müll !!!!!!

Ray-Tracer

BeitragFr, Apr 16, 2010 12:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, erstmal Danke für die Einführung in Xors3d.

Zitat:
Wenn jemand etwas besonderes ausprobiert haben möchte. Kann er hir ruhig mal was Posten.


Ich hab mal nen bissl rumprobiert, aber ich bekomme das mit den Schatten nicht hin. Wäre toll wenn du dafür nen Beispielcode hättest, wie man die Schattenengine einbaut, ich seh da nich durch.
__wunschklang__
 

Mau

BeitragMi, Apr 21, 2010 11:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Klasse Tutorial, habe aber noch einige Fragen & Anregungen dazu:


tft hat Folgendes geschrieben:
Desweiteren gibt es Probleme bei der Mesh addition. Die Cords sind scheinbar auf 256 begrenzt. Alles darüber wird als MOD angehängt und taucht somit an falscher Stelle auf.

Was genau ist hier denn mit "Cords" und "MOD" gemeint?


Zitat:
Dann lassen sich Texturen zwar erzeugen und bearbeiten. Auch Rendern ist möglich. Aber die Zeichen befehle arbeiten mit Texturen Grösser 512*512 nicht richtig zusammen.

Auf meiner ATI-Karte funktioniert das auch mit grösseren Texturen einwandfrei. Scheint also (mal wieder) ein NVidia Problem zu sein.


Dann hätte ich noch eine Anregung:
Das Tutorial ist zwar sehr interessant, geht aber leider nicht wirklich auf die Möglichkeiten der Xors3D Engine ein (Shader, Bumpmapping, Shadows), sondern ist eher eine Art Grundkurs in B3D, auch wenn dabei Xors-Befehle verwendet werden. Dabei wäre es doch viel interessanter, wie man die neuen Features benutzt und in eigenen Spielen implementiert. Hoffe, du kannst uns da vielleicht noch einige Tutorials zur Hand geben (die beiliegenden Samples sind leider nicht sehr erklärend) Wink

Ausserdem frage ich mich immer noch, wie kompatibel die Engine auf verschiedenen Karten und Windows-Systemen ist, dazu lassen sich irgendwie nur schwer Fakten finden, wahrscheinlich weil die Engine noch nicht so stark verbreitet ist Sad
Alles muss, nichts kann!

tft

BeitragMi, Apr 21, 2010 16:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

danke für deine Anregung.

MOD: Mann nehme einen Wert 299 und schaut wie offt 255 hineinpast und gibt den restbetrag aus. In unserem falle 44. Konkret bedeutet das. Wenn ich ein Object mit der X Koordinate von +299 In ein Mesh kopiere wird es an die Koordinate -255 + 44 gestellt. Das ist zumindestens bei mir so.

Cords: Falsch geschrieben....... ist Umgangssprache für Koordinaten.

Da sich das Tutorial erst am Anfang befindet, bitte ich um Gedult. Momentan versuche ich selber gerade die sache mit Schatten auf die rolle zu bringen. Was sich als schwieriger erweist als gedacht.

Gruss TFT
TFT
http://www.optima-code.ch
Monkey,HTML5,CSS3,W 7 64 Bit, 8 GB Ram, GT470, W8 ist Müll !!!!!!
 

Mau

BeitragDo, Apr 22, 2010 12:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich muss echt sagen, das ich schon recht enttäuscht bin, was die Dokumentation von Xors3D angeht -ganze 13 Beispielcodes (die sich alle nur auf Shader beziehen), ist das alles? Shocked

Kein Beispiel zu Shadows und kaum Tutorials zu finden. Der User muss sich wohl alles erst selbst zusammen suchen. Die Befehlsreferenz ist ziemlich kryptisch, in den wenigstens Fällen wirklich selbsterklärend und das Forum gibt auch nicht viel her. Bei einem Preis von 100$ für mich nicht nachvollziehbar Confused
Alles muss, nichts kann!

tft

BeitragDo, Apr 22, 2010 14:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo MAU,

befor man so richtig abmeckert ... sollte man doch einfach mal Google
bemühen .... gugst du hir

http://area.xors3d.com/deposit...20-samples

ausserdem sind die meisten ( Aussnahmen schon weiter oben angesprochen ) Befehle eins zu eins kompatibel. Und dazu gibts eine SUPER deutsche Hilfe hir im Forum.

Und für das ding mit dem Schatten ..... gibts sogar auch eine leuffähige version. Und wider ein Thema abgehagt.

gruss TFT
TFT
http://www.optima-code.ch
Monkey,HTML5,CSS3,W 7 64 Bit, 8 GB Ram, GT470, W8 ist Müll !!!!!!
 

Mau

BeitragDo, Apr 22, 2010 19:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
ausserdem sind die meisten ( Aussnahmen schon weiter oben angesprochen ) Befehle eins zu eins kompatibel. Und dazu gibts eine SUPER deutsche Hilfe hir im Forum.

Mir geht's doch nicht darum, wie man B3D benutzt, sondern eben genau die Features, die B3D NICHT hat. Und ich bin es einfach leid, mir wegen schlecht geordneten Websites oder kryptischer Docs alles erst mal umständlich aus tausend Foren zusammensuchen zu müssen. Ist ja nicht so, das man den ganzen Tag nichts anderes zu tun hätte Confused Und wenn man erst mal Google extern bemühen muss, um auf einer Website etwas zu finden, ist das in meinen Augen sowieso ein Armutszeugnis.

Aber gut, die Samples aus dem "Depository" erklären da schon um einiges mehr, danke dir. An der Engine selbst gibt's bisher nichts auszusetzen.
Alles muss, nichts kann!
 

super_castle

BeitragSo, Apr 25, 2010 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Also mir kommt es so vor, als wenn die Russen den Code von B3D aufgebrochen haben und dann dieses Strickmuster verfolgt haben.
Es fehlt zum Programm "die liebe fürs Detail" .

Die Russen haben ja auch damals (1986) verschiedenen Dos-Versionen(MS-Dos ähnlich) in Deutschland verkauft. Wenn man das ASM zerfriemelt hatte , kam fast "MS-Dos" raus.

Gruss

Goodjee

BeitragSo, Apr 25, 2010 19:06
Antworten mit Zitat
Benutzer-Profile anzeigen
du wirst es nicht glauben, aber es war das ziel etwas zu schaffen was fast so funktioniert wie b3d, damit man sich nicht umgewöhnen muss und trotzdem mit der zeit gehn kann.

btw, "die russen" ist schon ziemlich rassistisch
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Apr 25, 2010 23:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Falls hier PTS-DOS gemeint ist, dann hat es überhaupt 0 Ähnlichkeit zu dem kack MS-DOS gehabt.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

tft

BeitragMo, Apr 26, 2010 7:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

als erstes möchte ich euch bitten diese Nebendiskusion woanders abzuhalten. Danke Smile

xCreateWorld()
xSetActivWorld()
xGetActivWorld()
xGetDefaultWorld ()
xDeleteWorld()

Diese Befehle gehören zu denjenigen. Die biss anhin immer von Hand realisiert werden musten.

Bei B3D gab es immer nur eine 3DWelt. Wollte man mehrer zur auswahl haben. So musten alle Elemente in separaten Listen gehalten werden, um diese im bedarfsfall Sceeneweise löschen zu können. Auch das Wechseln von Sceenen war doch eher ein Krampf.

Das ganze Funktioniert wie bei den Buffer() befehlen. Mit xCreateWold() erzeugt man eine separate Welt. Mit SetActivWorld() wird bestimmt welche Welt gerade actuell ist. (Wie bei Setbuffer() für die zeichen Befehle) Dann werden Entitys und Cameras erzeugt etc. Wichtig .... es wird diejenige Welt mit xRenderWorld() auf den Bildschirm gebracht die durch xSetActivWorld gesetzt ist.

Es gibt da noch die DefauldWelt. Diese kann nicht gelöscht werden. Aber der Handler dazu kann mit xGetDefauldWorld() geholt werden.

xDeleteWorld() löscht die komplette Welt. Mit allen geladenen Elementen.

Gruss TFT
TFT
http://www.optima-code.ch
Monkey,HTML5,CSS3,W 7 64 Bit, 8 GB Ram, GT470, W8 ist Müll !!!!!!
 

Mau

BeitragMi, Apr 28, 2010 8:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Das mit den verschiedenen Worlds ist praktisch.

Kann es übrigens sein, das xVertexColor aus irgendeinem Grund nicht funktioniert bzw. keinen Effekt hat? Bei mir lassen sich einzelne Vertices trotz xEntityFX 1+2+4+8+32 nicht einfärben Shocked Lediglich das gesamte Mesh lässt sich mit xEntityColor färben. Läuft da bei Xors3D irgendwas anders als bei B3D?
Alles muss, nichts kann!

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

Neue Antwort erstellen


Übersicht BlitzBasic FAQ und Tutorials

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group