TCP Datenübertragung(koordinaten)

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

GearTechDE

ehemals 'KillerJo96'

Betreff: TCP Datenübertragung(koordinaten)

BeitragDo, Mai 05, 2011 21:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Halle liebe Community, ich habe mal wieder ein kleines Problem. Undzwar möchte ich mit Blitz3D ein eigenes Programm schreiben sowas wie ein TCP Server. Meine sag ich mal "kleine 3d engine" ist ja noch nicht fertig. ich will nämlich jetzt noch einbauen, dass ich dort so einen kleinen Chat unten Links in der ecke habe. wenn ich dann mit der engine da was rein schreibe soll der den Text an den Server senden und der sendet sowieso alles an alle Clients weiter. wisst ihr was ich meine? einfach nur ein Chat aber halt in meiner engine. Falls das nicht so schwer sein sollte komme ich schon direkt zur nächsten Frage. wie mache ich am besten den multiplayer Modus? Vllt. einfach per TCP die Koordinaten der Position einer entity senden und diese weitergeben? wenn ja wie geht das und wie nehmen andere Clients dann diese Koordinaten auf und setzen die entity dahin?

das ist wahrscheinlich schwerer als ich mir das vorstelle.
hoffe hier auf ein paar antworten.

LG Killerjo96
Mit freundlichen Grüßen: GearTechDE

ToeB

BeitragDo, Mai 05, 2011 22:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Im Multiplayer, vor allem im "Action"-Genre, wie z.B. Renn-Spiele oder Shooter, würde ich von TCP allgemein Abraten, da es doch sehr Langsam ist bzw. das Programm für jede einzellne Nachricht solange anhält bis diese Vollständig geschickt wurde, UDP ist das geeigneter für. Entweder, du schreibst dir selber alles mit UDP, wobei ich dir jetzt schon sagen kann das es viel Arbeit ist (aus erfahrung), oder du nimmst meine Netzwerk-Lib, Link ist in meiner Signatur (SimpleUDP2), damit kannst du schnell und einfach Spieler erstellen und diesen Beitreten, als auch Nachrichten (wie z.B. deine Positionsdaten) schnell und einfach senden, und für Chat-Nachrichten z.B., also Nachrichten die auf jeden Fall ankommen müssen bei den anderen, gibt einen Sende-Modus mit dem das sichergestellt wird.

Viel Spaß Wink

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

GearTechDE

ehemals 'KillerJo96'

BeitragDo, Mai 05, 2011 22:30
Antworten mit Zitat
Benutzer-Profile anzeigen
wow danke, ich probiers mal, kannst du mir denn dabei helfen`? also wenn ichs net hinkriege. BIn ja blutiger anfänger aber ich kapiere scnell XD..

edit: der download Link von der simpleudp ist inaktiv. bitte reuppen. danke

Naja danke schomal
Mit freundlichen Grüßen: GearTechDE

Dottakopf

BeitragFr, Mai 06, 2011 9:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

also ich würde dir empfehlen das du dir zumindest mal ein kleines mini Beispiel selbst mit den UDP Befehlen von Blitz schreibst. Das hilft dir zu verstehen wie der Netzwerkkram funktioniert.
Ein Beispiel in dem du positionen von kästchen über das Netzwerk überträgst sollte da reichen...

Dabei kann dir auch das Forum toll helfen. Aber erst immer selber versuchen!


Danach kannst du dir die tolle Lib von ToeB ansehen. Wobei man sagen muss, das bald die SimpleUDP V3 von ToeB rauskommt. Wenn du Fragen zur Lib hast, kann dir hier das Forum natürlich auch weiterhelfen.

Gruß
Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

GearTechDE

ehemals 'KillerJo96'

BeitragFr, Mai 06, 2011 12:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke werde das mal versuchen

edit: Könnte mir vllt jemand ein UDP Beispiel programmieren. Ich weiß ich erwarte viel von euch. Ich meine so das ich damit dann lerne was gemeint ist. Ich habe hier mal mein Projekt hochgeladen xD

Wäre echt nett.

Es tut mir leid wenn ich hier vllt. vielen Leuten auf die Nerven gehe weil ich immer nur haben will, aber ich bin halt so und so lerne ich. Sorry an die Leute die es so sehen.

Hier mein Projekt: http://www.file-upload.net/dow...e.rar.html
edit2: Hier ein Virus Link falls den jemand möchte...:http://www.virustotal.com/file...1304681855

Ich möchte einfach, dass ihr mir einbaut, das jeder Player ein Cube ist. So und ich möchte jetzt einen Server der die Koordinaten und Chat Daten annimmt und weiter sendet(an die anderen Clients). Denn ich weiß auch nicht wie ich es anstellen soll das wenn jetzt mehrere Leute darum laufen(Als Würfel xD), wie man die dann erstellt. Also wie man dann einen neuen CUbe erstellt z.B.

Hoffe das ist nicht zu viel und das kriegt einer für mich hin. Ich wäre bereit dafür zu zahlen wenns nötig ist.

danke im voraus...

Gruß Killerjo96
Mit freundlichen Grüßen: GearTechDE

faeX

BeitragFr, Mai 06, 2011 19:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Guck bei ToeB in die Signatur, lade dir SimpleUDP2 runter, guck dir die mitgelieferten Beispiele an. Wenn du immer noch erwartest, dass wir dir Beispiele liefern, glaube ich kaum, dass du bereits mit dem richtigen UDP etwas Stabiles zum Laufen bringst. Also => Onlinehilfe / Forumsuche nach UDP, du bist garantiert nicht der erste der Probleme damit hat.

count-doku

BeitragFr, Mai 06, 2011 20:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Very Happy

Habe mal ein Beispiel gemacht. Nicht in deiner Engine aber einzeln, ohne SimpleUDP.
Zuerst das Serverprog starten, danach den Client.
Wenn sie sich erfolgreich verbunden haben (eigener PC, IP 127.0.0.1)
werden die Mauszeigerbewegungen übertragen.
Einfach mal die Fenster nebeneinander machen und probieren...

Server:BlitzBasic: [AUSKLAPPEN]
;Server
;muss (für Inetübertragung - lokal nicht)
;einen Portfreischalten.
;Diesen und seine IP muss der Client wissen

Graphics 800,600,0,2;Grafik Zeugs
SetBuffer BackBuffer()

Global stream=CreateUDPStream(6543) ; GLOBALEN Netzwerkstream UDP erzeugen PORT 6543
Global mx,my
Global gegnerX,gegnerY,gegnerIP,gegnerPORT,gegnerDOT$

Local timer=CreateTimer(60)
While Not KeyHit(1)
Cls
mx=MouseX():my=MouseY()
Color 255,0,0
Rect mx-5,my-5,10,10,1
Color 0,255,0
Rect gegnerX-5,gegnerY-5,10,10,1

UDPUpdate()

WaitTimer timer
Flip 0
Wend
End

Function UDPUpdate()
ip_rd=RecvUDPMsg(stream);Kamen neue Nachrichten?
While ip_rd;Alle abarbeiten
cmd=ReadByte(stream);Erstes Byte -> Typ der Nachricht/Kommando
Select cmd
Case 1;Client loggt ein
gegnerIP=ip_rd
gegnerDOT=DottedIP(gegnerIP)
gegnerPORT=UDPMsgPort(stream)
Case 2;Client daten kommen rein
gegnerX=ReadInt(stream)
gegnerY=ReadInt(stream)

Default
DebugLog "Unbekannter Befehl!"
DebugLog cmd
End Select
ip_rd=RecvUDPMsg(stream)
Wend
If gegnerIP<>0;Wenn schon ein Gegner verbunden hat
WriteByte stream,2;Eigene Daten verpacken
WriteInt stream,mx
WriteInt stream,my
SendUDPMsg stream,gegnerIP,gegnerPORT;Paket abschicken
End If
End Function

Client:BlitzBasic: [AUSKLAPPEN]
;Client 
;braucht keine Ports freischalten,
;muss aber IP:Port des Servers kennen

Graphics 800,600,0,2;Grafik Zeugs
SetBuffer BackBuffer()

Global stream=CreateUDPStream() ; GLOBALEN Netzwerkstream UDP erzeugen PORT wird selbstständig gewählt
Global mx,my
Global gegnerX,gegnerY,gegnerIP,gegnerPORT,gegnerDOT$

;BEIM SERVER EINLOGGEN...
gegnerDOT=Input("Gegner IP: ")
gegnerPORT=6543 ; Server PORT! Evtl. auch per Input abfragen
gegnerIP=INT_IP(gegnerDOT)
WriteByte stream,1
SendUDPMsg stream,gegnerIP,gegnerPORT

Local timer=CreateTimer(60)
While Not KeyHit(1)
Cls
mx=MouseX():my=MouseY()
Color 255,0,0
Rect mx-5,my-5,10,10,1
Color 0,255,0
Rect gegnerX-5,gegnerY-5,10,10,1

UDPUpdate()

WaitTimer timer
Flip 0
Wend
End

Function UDPUpdate()
ip_rd=RecvUDPMsg(stream);Kamen neue Nachrichten?
While ip_rd;Alle abarbeiten
cmd=ReadByte(stream);Erstes Byte -> Typ der Nachricht/Kommando
Select cmd
Case 2;Server daten kommen rein
gegnerX=ReadInt(stream)
gegnerY=ReadInt(stream)

Default
DebugLog "Unbekannter Befehl!"
DebugLog cmd
End Select
ip_rd=RecvUDPMsg(stream)
Wend
WriteByte stream,2;Eigene Daten verpacken
WriteInt stream,mx
WriteInt stream,my
SendUDPMsg stream,gegnerIP,gegnerPORT;Paket abschicken
End Function
Function INT_IP(IP$)
a1 = Int(Left(IP$, Instr(IP$, ".") - 1)) : IP$ = Right(IP$, Len(IP$) - Instr(IP$, "."))
a2 = Int(Left(IP$, Instr(IP$, ".") - 1)) : IP$ = Right(IP$, Len(IP$) - Instr(IP$, "."))
a3 = Int(Left(IP$, Instr(IP$, ".") - 1)) : IP$ = Right(IP$, Len(IP$) - Instr(IP$, "."))
a4 = Int(IP$)
Return (a1 Shl 24) + (a2 Shl 16) + (a3 Shl 8 ) + a4
End Function


Wichtig ist zu beachten, dass beim Verschicken von UDP Paketen(SendUDPMsg) nicht(!) die Dotted, also normale IP angegeben werden muss, sonder eine Integer IP. Diese errechne ich mit der Funktion INT_IP().

D.h. die globale gegnerIP enthält die Integer IP und die globale gegnerDOT$ die "normale".

Kannst das ja einfach noch duch mz und gegnerZ ergänzen, diese mitübertragen und schon hastes.
(Und halt noch Cubes statt Rects Wink )

Die Kommandos in UDPUpdate() kannst du natürlich auch ergänzen, z.B. für Ping oder Ausloggen
oder mit mehrere Clients pro Server per Type....

lg,
count-doku

GearTechDE

ehemals 'KillerJo96'

BeitragSa, Mai 07, 2011 13:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube ich bin noch nicht weit genug um das zu kapieren... Ich habe mich noch nie damit befasst. Die Befehle kkommen mir so fremd vor. Und die ganzen Variablen und so ich weiß garnicht richtig was da passiert.
Mit freundlichen Grüßen: GearTechDE

count-doku

BeitragSa, Mai 07, 2011 13:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Möglich, Netzwerk ist auch nicht das einfachste...

Trotzdem, die Befehle kannst du ja einfach durch anklicken in der Hilfe ansehen.
Und die Variablen sind halt so wenige wie möglich.
-Die Position der Spieler mx,my : gegnerX,gegnerY
-Die IP und der Port für das Netzwerkzeugs
-Stream ist die Verbindung
- und sonst noch einige lokale Rückgabewerte.

Ich bau dir das heute noch in die Engine ein,
vllt. verstehst du es dann.

Kann aber auch zur SimpleUDP raten, echt ne gute Lib Wink

Count-Doku

EDIT:
Habs jetzt eingebaut.
Programm 2Mal starten einmal als host (Anfangs 1) und einmal als Client (Anfangs 0)
Zuerst Host starten (eigentlich logisch ^^)
Dann den Client. Hier als IP 127.0.0.1 eingeben für eigenen PC.

Danach bewegt sich dann ein Cube jeweils dahin, wo die Kamera beim anderen Programm ist.
Ich nutze dafür die gleiche Funktion wie in dem 2D Beispiel nur mit 3 Koordinaten.
Auch hier kann man es wieder um mehrere Spieler ergänzen oder Daten sparen in dem man nur die Richtung und die Geschwindigkeit überträgt. Aber ich glaube so ist es für die am Einfachsten. (zu verstehen!)

Code (einfach deine Main.bb der Engine)
BlitzBasic: [AUSKLAPPEN]
;ReadConfig.ini
Config = ReadFile("Config.ini")
Breite# = ReadLine$(Config)
Hohe# = ReadLine$(Config)
Fullscreen# = ReadLine(Config)
;End Read
;Set Graphics Mode
Graphics3D Breite#,Hohe#,32,Fullscreen#
;End Set

;Windows Settings
AppTitle("3D-Engine by Killerjo96")
;Print "Du kannst die Auflösung in der Config.ini festlegen!"
SetBuffer BackBuffer()
;End Settings

;LoadScenes
sound = LoadSound (".\Music\Lied.mp3")
table = LoadMesh (".\Model\table.3ds")
ground = LoadTerrain(".\Textures\hight.jpg")
tex = LoadTexture(".\Textures\grass.jpg")
Monkey = LoadMesh(".\Model\Monkey.3ds")
MonkeyTex = LoadTexture(".\Textures\Monkey.jpg")
RabbitFairy = LoadMesh(".\Model\RabbitFairy.3ds")
RabbitFairyTex = LoadTexture(".\Textures\RabbitFairy.jpg")
Aibat = LoadMesh (".\Model\Aibat.3ds")
AibatTex = LoadTexture(".\Textures\Aibat.jpg")
Robot = LoadAnimMesh (".\Model\Robot.3ds")
gegner=CreateCube()
;End Load

;Global Variables
Global sky ;muss ich machen weil ich die skybox in einem Unterprogramm lade und im Hautprogramm verwende
Global stream
Global mx#,my#,mz#
Global gegnerX#,gegnerY#,gegnerZ#,gegnerIP,gegnerPORT,gegnerDOT$
;End Variables
Global server=Input("Host/Client? (1/0) :")
If server=1
stream=CreateUDPStream(6543); GLOBALEN Netzwerkstream UDP erzeugen PORT 6543
ElseIf server=0
stream=CreateUDPStream() ; GLOBALEN Netzwerkstream UDP erzeugen PORT wird selbstständig gewählt
gegnerDOT=Input("Gegner IP: ")
gegnerPORT=6543 ; Server PORT! Evtl. auch per Input abfragen
gegnerIP=INT_IP(gegnerDOT)
WriteByte stream,1
SendUDPMsg stream,gegnerIP,gegnerPORT
End If

;Variables

;End Variables

;Animate Objects
Animate Robot,2
;End Animate
;Types
type_camera = 1 ;für die kollisionen, einfach nur eine variable, damit ich nicht durcheinander komme.
type_terrain = 2
type_table = 3
type_Monkey = 4
type_RabbitFairy = 5
type_Aibat = 6
type_Robot = 7
;End Types

;CreateScenes
cam1 = CreateCamera()
light = CreateLight()
;End Create

;Set Types
EntityType cam1,type_camera ;Für Kollisionen Kamera auf typ "camera" stellen
EntityType ground,type_terrain ;für kollisionen auf typ "terrain" stellen.
EntityType table,type_table
EntityType Monkey,type_Monkey
EntityType RabbitFairy,type_RabbitFairy
EntityType Aibat,type_Aibat
EntityType Robot,type_Robot
;End Set

;Collisions
Collisions type_camera,type_terrain,2,2 ;Kollisionen zwischen camera und terrain setzten
Collisions type_camera,type_table,2,3
Collisions type_Monkey,type_terrain,2,4
Collisions type_RabbitFairy,type_terrain,2,5
Collisions type_Aibat,type_terrain,2,6
Collisions type_Robot,type_terrain,2,7
;End Collisions

;Set Radius
EntityRadius cam1,05 ;Radius der Kamera für Kollisionen, damit ich nicht durch die Wand durchschauen kann.
;End Set

;Activate Functions

;End Activate

;RotateEntity
RotateEntity Monkey,270,0,0
RotateEntity RabbitFairy,270,0,0
RotateEntity Aibat,270,0,0
;End Rotate

;PositionEntitys

PositionEntity cam1,77,8,55
PositionEntity table,80,1,55
PositionEntity ground,0,-1,0
PositionEntity Monkey,50,5,60
PositionEntity RabbitFairy,60,5,60
PositionEntity Aibat,70,5,70
PositionEntity Robot,60,5,100
;End Position

;Scale Entitys
ScaleEntity table,0.05,0.05,0.05
ScaleEntity ground,5,50,5
ScaleEntity Monkey,5,5,5
ScaleEntity RabbitFairy,5,5,5
ScaleEntity Aibat,5,5,5
ScaleEntity Robot,0.15,0.15,0.15
;End Scale

;Scale Texture
ScaleTexture tex,5,5
;End Scale

;Entity Textures
EntityTexture ground,tex
EntityTexture Monkey,MonkeyTex
EntityTexture RabbitFairy,RabbitFairyTex
EntityTexture Aibat,AibatTex
;End Entity

;Load Functions
LoadSkyBox()
;End Load

;
;Beginn der Hauptschleife
;
Local timer=CreateTimer(60) ; Damit dein Programm nur 60x pro Sekunde aktualiesiert wird
Repeat
;Tastenabfragen
If KeyDown(30) Then TurnEntity cam1,0,1.5,0
If KeyDown(32) Then TurnEntity cam1,0,-1.0,0
If KeyDown(31) Then MoveEntity cam1,0,0,-0.5
If KeyDown(17) Then MoveEntity cam1,0,0,0.5
If KeyDown(57) Then MoveEntity cam1,0,0.8,0
If KeyDown(18) Then MoveEntity cam1,0.5,0,0
If KeyDown(16) Then MoveEntity cam1,-0.5,0,0
If KeyHit(201) Then Ch1 = PlaySound(sound)
If KeyHit(209) Then StopChannel Ch1
If KeyDown(41) Then
WireFrame = True
Else
WireFrame = False
EndIf
;End Tastenabfragen

;Position Entity (Hauptschleife)
PositionEntity cam1,EntityX(cam1),EntityY(cam1)-0.5,EntityZ(cam1) ;schwerkraft
PositionEntity Monkey,EntityX(Monkey),EntityY(Monkey)-0.5,EntityZ(Monkey)
PositionEntity RabbitFairy,EntityX(RabbitFairy),EntityY(RabbitFairy)-0.5,EntityZ(RabbitFairy)
PositionEntity Aibat,EntityX(Aibat),EntityY(Aibat)-0.5,EntityZ(Aibat)
PositionEntity Robot,EntityX(Robot),EntityY(Robot)-0.5,EntityZ(Robot)
PositionEntity sky,EntityX(cam1),EntityY(cam1),EntityZ(cam1) ;himmel mit der Kamera mitbewegen
PositionEntity gegner,gegnerX,gegnerY,gegnerZ
mx=EntityX(cam1):my=EntityY(cam1):mz=EntityZ(cam1)
;End Position

;Netzwerk updaten
If server=1
Server_Update()
ElseIf server=0
Client_Update()
End If

UpdateWorld() ;Kollisionen updaten
RenderWorld() ;3D Szene malen
;2D Kram
;Text Functioncs
Text 0,0 ,"Kamera Position: "+EntityX(cam1) + "," + EntityY(cam1) + "," + EntityZ(cam1)
Text 0,40,"Steuerung: W,A,S,D zum Bewegen, Leertaste für Fliegen, Page Up für Musik an,Page Down für Musik aus,Esc für Beenden"
Text 0,65,"3D-Engine by Killerjo96"
;End Text
;End 2D Kram
WaitTimer timer ;auf timer warten
Flip 0 ;Damit Timer genutzt wird (0)
Until KeyHit(1)
End
;End Files

;Functions
Function Server_Update()
ip_rd=RecvUDPMsg(stream);Kamen neue Nachrichten?
While ip_rd;Alle abarbeiten
cmd=ReadByte(stream);Erstes Byte -> Typ der Nachricht/Kommando
Select cmd
Case 1;Client loggt ein
gegnerIP=ip_rd
gegnerDOT=DottedIP(gegnerIP)
gegnerPORT=UDPMsgPort(stream)
Case 2;Client daten kommen rein
gegnerX=ReadFloat(stream)
gegnerY=ReadFloat(stream)
gegnerZ=ReadFloat(stream)
Default
DebugLog "Unbekannter Befehl!"
DebugLog cmd
End Select
ip_rd=RecvUDPMsg(stream)
Wend
If gegnerIP<>0;Wenn schon ein Gegner verbunden hat
WriteByte stream,2;Eigene Daten verpacken
WriteFloat stream,mx
WriteFloat stream,my
WriteFloat stream,mz
SendUDPMsg stream,gegnerIP,gegnerPORT;Paket abschicken
End If
End Function
Function Client_Update()
ip_rd=RecvUDPMsg(stream);Kamen neue Nachrichten?
While ip_rd;Alle abarbeiten
cmd=ReadByte(stream);Erstes Byte -> Typ der Nachricht/Kommando
Select cmd
Case 2;Server daten kommen rein
gegnerX=ReadFloat(stream)
gegnerY=ReadFloat(stream)
gegnerZ=ReadFloat(stream)
Default
DebugLog "Unbekannter Befehl!"
DebugLog cmd
End Select
ip_rd=RecvUDPMsg(stream)
Wend
WriteByte stream,2;Eigene Daten verpacken
WriteFloat stream,mx
WriteFloat stream,my
WriteFloat stream,mz
SendUDPMsg stream,gegnerIP,gegnerPORT;Paket abschicken
End Function
Function INT_IP(IP$)
a1 = Int(Left(IP$, Instr(IP$, ".") - 1)) : IP$ = Right(IP$, Len(IP$) - Instr(IP$, "."))
a2 = Int(Left(IP$, Instr(IP$, ".") - 1)) : IP$ = Right(IP$, Len(IP$) - Instr(IP$, "."))
a3 = Int(Left(IP$, Instr(IP$, ".") - 1)) : IP$ = Right(IP$, Len(IP$) - Instr(IP$, "."))
a4 = Int(IP$)
Return (a1 Shl 24) + (a2 Shl 16) + (a3 Shl 8 ) + a4
End Function
Function LoadSkyBox() ;Funktion ist nicht von mir.
sky=CreateMesh()
;front face
b=LoadBrush("s4\4.bmp",49 )
s=CreateSurface( sky,b )
AddVertex s,-1,+1,-1,0,0:AddVertex s,+1,+1,-1,1,0
AddVertex s,+1,-1,-1,1,1:AddVertex s,-1,-1,-1,0,1
AddTriangle s,0,1,2:AddTriangle s,0,2,3:
FreeBrush b
;right face
b=LoadBrush("s4\5.bmp",49 )
s=CreateSurface( sky,b )
AddVertex s,+1,+1,-1,0,0:AddVertex s,+1,+1,+1,1,0
AddVertex s,+1,-1,+1,1,1:AddVertex s,+1,-1,-1,0,1
AddTriangle s,0,1,2:AddTriangle s,0,2,3
FreeBrush b
;back face
b=LoadBrush("s4\1.bmp",49 )
s=CreateSurface( sky,b )
AddVertex s,+1,+1,+1,0,0:AddVertex s,-1,+1,+1,1,0
AddVertex s,-1,-1,+1,1,1:AddVertex s,+1,-1,+1,0,1
AddTriangle s,0,1,2:AddTriangle s,0,2,3
FreeBrush b
;left face
b=LoadBrush("s4\2.bmp",49 )
s=CreateSurface( sky,b )
AddVertex s,-1,+1,+1,0,0:AddVertex s,-1,+1,-1,1,0
AddVertex s,-1,-1,-1,1,1:AddVertex s,-1,-1,+1,0,1
AddTriangle s,0,1,2:AddTriangle s,0,2,3
FreeBrush b
;top face
b=LoadBrush("s4\3.bmp",49 )
s=CreateSurface( sky,b )
AddVertex s,-1,+1,+1,0,1:AddVertex s,+1,+1,+1,0,0
AddVertex s,+1,+1,-1,1,0:AddVertex s,-1,+1,-1,1,1
AddTriangle s,0,1,2:AddTriangle s,0,2,3
FreeBrush b
;bottom face
b=LoadBrush("s4\6.bmp",49 )
s=CreateSurface( sky,b )
AddVertex s,-1,-1,-1,1,0:AddVertex s,+1,-1,-1,1,1
AddVertex s,+1,-1,+1,0,1:AddVertex s,-1,-1,+1,0,0
AddTriangle s,0,1,2:AddTriangle s,0,2,3
FreeBrush b
ScaleMesh sky,500,500,500
FlipMesh sky
EntityFX sky,1
Return sky
End Function
;End Functions


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

GearTechDE

ehemals 'KillerJo96'

BeitragMo, Mai 09, 2011 13:50
Antworten mit Zitat
Benutzer-Profile anzeigen
WoW das ist echt cool von dir Count Doku...

Wirklich danke ich werde versuchen den Code zu lernen und mir das erstmal als genug von UDP aneignen.

Lg Killerjo96

PS: Danke, echt ein sehr tolles Forum hier.
Mit freundlichen Grüßen: GearTechDE

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group