bei dem Manual Mesh geht kein dynamisches Licht.
Aber bei dem fertigen Robotmesh schon warum ist das so
könnt ihr mir bitte helfen...
manual mesh und kein Licht (Ogre)
- dllfreak2001
- Beiträge: 2925
- Registriert: 07.09.2004 23:44
- Wohnort: Bayern
manual mesh und kein Licht (Ogre)
I´a dllfreak2001
- dllfreak2001
- Beiträge: 2925
- Registriert: 07.09.2004 23:44
- Wohnort: Bayern
- dllfreak2001
- Beiträge: 2925
- Registriert: 07.09.2004 23:44
- Wohnort: Bayern
Leider funzt der Kram immer noch nicht korrekt.
Das Licht kommt an der falschen Stelle.
Die Formel für die Normals aus dem Trick-Archiv peil ich nicht
guckt mal hier. Ich hab sie in diesem Tool reingepackt:
Allerdings scheinen die NormalVektorWerte für das Manual Mesh Beispiel aus dem Example-Ordner nicht zu passen.
Hier ist mal die angepasste Version mit Licht von manual_mesh.pb,
sie nutzt die grafiken aus dem data Ordner innerhalb des Examples Ordners.:
Das Licht kommt an der falschen Stelle.
Die Formel für die Normals aus dem Trick-Archiv peil ich nicht
guckt mal hier. Ich hab sie in diesem Tool reingepackt:
Code: Alles auswählen
OpenWindow(0,0,0,180,110,#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget|#PB_Window_SystemMenu,"NormalRechner")
CreateGadgetList(WindowID(0))
TextGadget(100,5,22,20,15,"1:")
TextGadget(101,5,42,20,15,"2:")
TextGadget(102,5,62,20,15,"3:")
TextGadget(103,45,5,20,15,"X:")
TextGadget(104,95,5,20,15,"Y:")
TextGadget(105,145,5,20,15,"Z:")
TextGadget(106,5,87,20,15,"=>")
StringGadget(0,25,20,50,20,"0")
StringGadget(1,75,20,50,20,"0")
StringGadget(2,125,20,50,20,"0")
StringGadget(3,25,40,50,20,"0")
StringGadget(4,75,40,50,20,"0")
StringGadget(5,125,40,50,20,"0")
StringGadget(6,25,60,50,20,"0")
StringGadget(7,75,60,50,20,"0")
StringGadget(8,125,60,50,20,"0")
StringGadget(9,25,85,150,20,"0.000, 0.000, 0.000",#PB_String_ReadOnly)
Global x1.f, x2.f, x3.f, y1.f, y2.f, y3.f, z1.f, z2.f, z3.f, Norm_x1.f, Norm_y1.f, Norm_z1.f, Length.f
Repeat
winevent = WaitWindowEvent()
gadgetevent = EventGadgetID()
If gadgetevent <= 8 And winevent = #PB_Event_Gadget
x1 = ValF(GetGadgetText(0))
y1 = ValF(GetGadgetText(1))
z1 = ValF(GetGadgetText(2))
x2 = ValF(GetGadgetText(3))
y2 = ValF(GetGadgetText(4))
z2 = ValF(GetGadgetText(5))
x3 = ValF(GetGadgetText(6))
y3 = ValF(GetGadgetText(7))
z3 = ValF(GetGadgetText(8))
Norm_x1 = (y1 - y2) * (z2 - z3) - (z1 - z2) * (y2 - y3)
Norm_y1 = (z1 - z2) * (x2 - x3) - (x1 - x2) * (z2 - z3)
Norm_z1 = (x1 - x2) * (y2 - y3) - (y1 - y2) * (x2 - x3)
Length = Sqr(Pow(Norm_x1, 2)+ Pow(Norm_y1, 2)+ Pow(Norm_z1, 2))
If Length = 0: Length = 1: EndIf
SetGadgetText(9, StrF(Norm_x1/Length,3) + ", " + StrF(Norm_y1/Length,3) + ", " +StrF(Norm_z1/Length,3))
EndIf
Until winevent = #PB_Event_CloseWindow
CloseWindow(0)
End
Hier ist mal die angepasste Version mit Licht von manual_mesh.pb,
sie nutzt die grafiken aus dem data Ordner innerhalb des Examples Ordners.:
Code: Alles auswählen
;
; ------------------------------------------------------------
;
; PureBasic - Manul Mesh
;
; (c) 2003 - Fantaisie Software
;
; ------------------------------------------------------------
;
#CameraSpeed = 5
IncludeFile "Screen3DRequester.pb"
DefType.f KeyX, KeyY, MouseX, MouseY
If InitEngine3D()
Add3DArchive("Data\" , #PB_3DArchive_FileSystem)
Add3DArchive("Data\Skybox.zip", #PB_3DArchive_Zip)
InitSprite()
InitKeyboard()
InitMouse()
If Screen3DRequester()
; Create a cube, manually.. See the DataSetion, for more precisions
;
CreateMesh(0)
SetMeshData(0, 0, ?CubeVertices , 8)
SetMeshData(0, 1, ?CubeFacesIndexes , 12)
SetMeshData(0, 2, ?CubeTextureCoordinates, 8)
;-Hier habe ich die Normals dem Mesh übergeben
SetMeshData(0, 3, ?CubeNormal, 12)
AmbientColor(RGB(0,0,0))
CreateEntity(0, MeshID(0), CreateMaterial(0, LoadTexture(0, "Data/terrain_detail.jpg")))
;ScrollMaterial(0, 0.2, 0.2, 1)
; Just for fun, use an animated material
DisableMaterialLighting(0, 0)
ScaleEntity(0, 3, 3, 3)
;-Mein Licht
CreateLight(0,RGB(255,255,255),0,0,20)
CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0,0,0,20)
Repeat
Screen3DEvents()
ClearScreen(0, 0, 0)
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left)
KeyX = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Right)
KeyX = #CameraSpeed
Else
KeyX = 0
EndIf
If KeyboardPushed(#PB_Key_Up)
KeyY = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Down)
KeyY = #CameraSpeed
Else
KeyY = 0
EndIf
EndIf
;-Das Licht hat immer die gleiche POS wie die Cam
LightLocate(0,CameraX(0),CameraY(0),CameraZ(0))
If ExamineMouse()
MouseX = -(MouseDeltaX()/10)*#CameraSpeed/2
MouseY = -(MouseDeltaY()/10)*#CameraSpeed/2
EndIf
RotateEntity(0, 1, 1, 1)
RotateCamera(0, MouseX, MouseY, RollZ)
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
DataSection
CubeVertices:
Data.f 0, 0, 0 ; Vertex index 0
Data.f 1, 0, 0 ; Vertex index 1
Data.f 1, 0, 1 ; Vertex index 2
Data.f 0, 0, 1 ; Vertex index 3
Data.f 0, 1, 0 ; Vertex index 4 - Note: exactly the same as above, but with 'y'
Data.f 1, 1, 0 ; Vertex index 5
Data.f 1, 1, 1 ; Vertex index 6
Data.f 0, 1, 1 ; Vertex index 7
CubeFacesIndexes:
Data.w 0, 1, 2 ; bottom face (clockwise as it's reversed...)
Data.w 2, 3, 0
Data.w 6, 5, 4 ; top face
Data.w 4, 7, 6
Data.w 1, 5, 6 ; right face
Data.w 6, 2, 1
Data.w 7, 4, 0 ; left face
Data.w 0, 3, 7
Data.w 5, 1, 0 ; back face
Data.w 0, 4, 5
Data.w 2, 6, 7 ; front face
Data.w 7, 3, 2
CubeTextureCoordinates:
Data.f 0 , 0.33 ; Vertex 0
Data.f 0.33, 0.33 ; Vertex 1
Data.f 0.33, 0 ; Vertex 2
Data.f 0, 0 ; Vertex 3
Data.f 0.66, 1 ; Vertex 4
Data.f 1, 1 ; Vertex 5
Data.f 1, 0.66 ; Vertex 6
Data.f 0.66, 0.66 ; Vertex 7
;-Das sind die Normals
CubeNormal:
Data.f 0, -1, 0
Data.f 0, -1, 0
Data.f 0, 1, 0
Data.f 0, 1, 0
Data.f 1,0, 0
Data.f 1,0, 0
Data.f -1,0, 0
Data.f -1,0, 0
Data.f 0,0,-1
Data.f 0,0,-1
EndDataSection
I´a dllfreak2001
- dllfreak2001
- Beiträge: 2925
- Registriert: 07.09.2004 23:44
- Wohnort: Bayern
Hatte ich auch probleme....
Eine Normale gibt an in welche Richtung die Facette zeigt und wird für die
Lichter benötigt.
Probir mal:
http://www.purebasic.fr/english/viewtop ... highlight=
(= englisches Forum)
die Links daraus:
http://www.euclideanspace.com/maths/alg ... /index.htm
http://www.euclideanspace.com/maths/alg ... /index.htm
(Danke an traumatic!)
Eine Normale gibt an in welche Richtung die Facette zeigt und wird für die
Lichter benötigt.
Probir mal:
http://www.purebasic.fr/english/viewtop ... highlight=
(= englisches Forum)
die Links daraus:
http://www.euclideanspace.com/maths/alg ... /index.htm
http://www.euclideanspace.com/maths/alg ... /index.htm
(Danke an traumatic!)
Zuletzt geändert von Vallan am 19.04.2006 20:21, insgesamt 1-mal geändert.
Ach so.
Kreutz Produkt:
Kreutz Produkt:
(Noch mal danke an traumatic!)Code: Alles auswählen
Structure VECTOR3 x.f y.f z.f EndStructure Procedure VectorCross(*out.VECTOR3, *v1.VECTOR3, *v2.VECTOR3) *out\x = (*v1\y * *v2\z) - (*v1\z * *v2\y) *out\y = (*v1\z * *v2\x) - (*v1\x * *v2\z) *out\z = (*v1\x * *v2\y) - (*v1\y * *v2\x) ProcedureReturn *out EndProcedure