Seite 1 von 2
innerhalb einer Sphere (3D)
Verfasst: 25.04.2012 09:59
von swissgregi
Hallo
Ich habe ein Material einem Sphere zugewiesen.
Nun sehe ich das Material nicht mehr, sobald sich die Kamera innerhalb der Sphere befindet.
Kann man das irgenwie beeinflussen, so dass ich eine Textur auch dann sehe, wenn sich die Kamera innerhalb des Sphere's befindet?
Re: innerhalb einer Sphere (3D)
Verfasst: 25.04.2012 10:49
von WPö
Moin!
Es wäre uns eine Hilfe, stelltest Du Deinen Quelltext ein, damit wir uns überhaupt sinnvoll damit befassen können.
Gruß - WPö
Re: innerhalb einer Sphere (3D)
Verfasst: 25.04.2012 11:08
von swissgregi
Code: Alles auswählen
;
; ------------------------------------------------------------
;
; PureBasic - Mesh (Skeleton Animation)
;
; (c) 2002 - Fantaisie Software
;
; ------------------------------------------------------------
;
IncludeFile "Screen3DRequester.pb"
Define.f KeyX, KeyY, MouseX, MouseY
#PanoMesh = 0
#PanoTexture = 0
#Pano = 0
If InitEngine3D()
Add3DArchive("Data/Textures", #PB_3DArchive_FileSystem)
InitSprite()
InitKeyboard()
InitMouse()
If Screen3DRequester()
LoadTexture(#PanoTexture, "darlux.jpg")
CreateMaterial(0, TextureID(#PanoTexture))
CreateSphere(#PanoMesh,50,90,90)
CreateEntity(#Pano, MeshID(#PanoMesh), MaterialID(0))
SetEntityMaterial(#Pano, MaterialID(0))
DisableMaterialLighting(0, 1)
CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0, 0, 40, 150)
CameraBackColor(0, RGB(0, 0, 128))
Repeat
Screen3DEvents()
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left)
KeyX = -1
ElseIf KeyboardPushed(#PB_Key_Right)
KeyX = 1
Else
KeyX = 0
EndIf
If KeyboardPushed(#PB_Key_Up)
KeyY = -1
ElseIf KeyboardPushed(#PB_Key_Down)
KeyY = 1
Else
KeyY = 0
EndIf
If KeyboardPushed(#PB_Key_PageUp)
RollZ = 3
Else
RollZ = 0
EndIf
EndIf
If ExamineMouse()
MouseX = -MouseDeltaX()/10
MouseY = -MouseDeltaY()/10
EndIf
RotateEntity(#Pano, 0, 0.5, 0, #PB_Relative)
RotateCamera(0, MouseY, MouseX, RollZ, #PB_Relative)
MoveCamera (0, KeyX, 0, KeyY)
RenderWorld()
Screen3DStats()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
End
Beispielgrafiken findet man hier genug:
https://www.google.ch/search?hl=de&safe ... 80&bih=892
Das ganze möchte ich für die Darstellung von Panoramen verwenden.
Dazu könnte ich die "SkyBox" verwenden. Dann kann ich aber das Panorama später nicht zu einem anderen Panorama überblenden.
Re: innerhalb einer Sphere (3D)
Verfasst: 25.04.2012 11:23
von WPö
Bedaure, "d3dx9_42.dll wurde nicht gefunden". Mit 3D mache ich sowieso nichts. DirectX ist längst auf meinem System. Deshalb weiß ich nicht recht, was da schon wieder angemeckert wird. Vielleicht kann Dir sonst jemand helfen.
Übrigens ändere mal die Zeile 11 in
Code: Alles auswählen
IncludeFile "D:\Programme\PureBasic\Examples\Sources\Screen3DRequester.pb"
o.ä., denn nicht jeder wird sofort diese Bibliotheken in den Beispielen finden.
Gruß - WPö
Re: innerhalb einer Sphere (3D)
Verfasst: 25.04.2012 11:28
von ts-soft
Zeile 11 lieber in:
Code: Alles auswählen
IncludeFile #PB_Compiler_Home + "Examples\Sources\Screen3DRequester.pb"
dann klappt es auch mit dem Nachbarn

Re: innerhalb einer Sphere (3D)
Verfasst: 25.04.2012 11:31
von WPö
ts-soft hat geschrieben:Zeile 11 lieber in:
Code: Alles auswählen
IncludeFile #PB_Compiler_Home + "Examples\Sources\Screen3DRequester.pb"
dann klappt es auch mit dem Nachbarn

Danke, Thomas. War nur zu faul, die Konstante 'rauszusuchen.
Gruß - WPö
Re: innerhalb einer Sphere (3D)
Verfasst: 25.04.2012 11:37
von ts-soft
WPö hat geschrieben:Danke, Thomas. War nur zu faul, die Konstante 'rauszusuchen.
Braucht man doch gar nicht
Das es eine Compilerdirektive ist weiß man ja, also #PB_COMPILER_ tippen und gucken was Autocomplete so anbietet
Gruß
Thomas
Re: innerhalb einer Sphere (3D)
Verfasst: 25.04.2012 12:58
von Schobaer
Moin,
die DLL meckert PB an, weil es keine Directx10 kann. Üblicherweise alle Win7. Die DLL aus dem Internet ziehen und in den Ordner mit dem PB-Code packen. Dann läuft es.
Re: innerhalb einer Sphere (3D)
Verfasst: 25.04.2012 13:37
von ts-soft
DirectX 9 c installieren, per WebInstaller bei Microsoft. Benötigt fast jedes Spiel, ist also auf fast jedem Win7 System vorhanden,
wird aber nicht autom. mit dem OS installiert.
/edit
Hier der Download:
http://www.microsoft.com/downloads/de-d ... 6652cd92a3
Diese DLL wird nicht einzeln von MS angeboten und sollte auch niemals aus irgendwelchen dubiosen Quellen installiert werden!
Es ist kein Problem, DirectX 9, 10 und 11 gleichzeitig auf dem System zu haben!
Re: innerhalb einer Sphere (3D)
Verfasst: 25.04.2012 16:22
von FosJonas
Das Problem ist das Faces immer nur in eine Richtung "schauen" also nur von einer Seite Sichtbar ist, um diese in beide Seiten Sichtbar zu machen muss man, zumindest in Purebasic, 2 Faces, also für jede Sichtrichtung eine, erstellen.
Da es von Purebasic aus keinen befehl gibt um die Faces zu flippen wäre es wohl am einfachsten mit einem Programm wie Blender einfach eine Kugel zu erstellen in der die Faces von Haus aus geflippt (Da gibts nen Befehl der heißt FlipFaces) sind und dann einfach in Purebasic als Kugel zu laden.