|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Eternal_pain
Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 08.10.2011, 05:46 Titel: [OpenGL] "Kamera" Probleme... |
|
|
hab es nun endlich geschafft OpenGL etwas Leben, durch einer kleinen Heightmap Routine einzuhauchen
28398 hat Folgendes geschrieben: | Du nimmst ne RGBA Textur, jedem Kanal wird eine Textur (Sand, Gras, Stein, Schnee bspw.) zugeordnet, im Fragmentshader schaust du den Wert aus deiner RGBA Textur nach und mischst entsprechend aus den anderen vier Texturen zusammen (Blending). Et voilá |
Ich glaube bis ich es soweit habe dauerts wohl noch etwas
Damits später nach was aussieht hab ich auch eine Skybox umsetzen können
gute Skymaps gibts hier:
http://www.kk3d.de/counter-strike/skies/index.htm
Jetzt habe ich allerdings das Problem das ich es nicht hinbekomme mich richtig in meiner kleinen Welt zu bewegen
Mit den Cursortasten (links/rechts) bzw A und D möchte ich mich um die Achse meiner symbolischen 'Kamera ' drehen, mit W und S vor und zurück 'laufen' und mit den Cursortasen (Hoch/Runter) nach oben bzw unten blicken, soweit klappt das auch schon halb, nur das drehen geschieht im Moment immer um die Weltmittelachse, nicht aber um die meiner symbolischen Kamera und leider weiss ich nicht recht wie ich es anders umsetzen kann?!
hier mal der loop code:
Code: |
Dim rX as Single
Dim rY as Single
Dim tWS as Single
do
if multikey(&h01) then exit do
If multikey(&h4b) or multikey(&h1E) then 'LEFT or "A"
rX-=0.5f
rX=IIF(rX<-359,rX+360,rX)
End If
If multikey(&h4d) or multikey(&h20) then 'RIGHT or "D"
rX+=0.5f
rX=IIF(rX>359,rX-360,rX)
End If
If multikey(&h48) then 'UP
rY+=0.5f
rY=IIF(rY>359,rY-360,rY)
End If
If multikey(&h50) then 'DOWN
rY-=0.5f
rY=IIF(rY<-359,rY+360,rY)
End If
If multikey(&h11) Then tWS+=0.1f ' "W"
If multikey(&h1F) Then tWS-=0.1f ' "S"
glRotatef (rY,1,0,0)
glRotatef (rX,0,1,0)
'OGL_SetSkyBox (Sky) 'zeichnet die skybox
glLoadIdentity
glTranslatef (0,-5,tWS)
glRotatef (rY,1,0,0)
glRotatef (rX,0,1,0)
'OGL_renderheightmap (test) 'zeichnet die Map
'OGL_renderscene
screensync
flip
'!' Die vorherige Szene wird vom Bildschirm gelöscht,
'' damit die neuen nicht einfach über die alten
'' Objekte gezeichnet werden
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT)
'!' Modelview-Matrix wird wieder zurückgesetzt
glLoadIdentity()
loop
|
_________________
|
|
Nach oben |
|
|
Westbeam
Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 08.10.2011, 12:15 Titel: |
|
|
Speichere die Position der Kamera in 3 Variablen und jedes mal, wenn eine Taste gedrückt wird, wird eine Variable erhöht oder verringert. Im Anschluss wird die Position der Kamera neu bestimmt(ich kenne mich mit OpenGL nicht so gut aus, gibt es überhaupt einen Befehl, der die Position eines Objekts verändert?).
Ich hoffe ich konnte helfen. |
|
Nach oben |
|
|
Eternal_pain
Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 08.10.2011, 13:00 Titel: |
|
|
Habs jetzt soweit geschafft, nur das ich beim laufen durch meiner Welt noch eine konstante 'höhe' habe und deswegen beim laufen mal eben unter einem 'hügel' oder dergleichen lande...
Mal sehen ob ich das auch noch gelöst bekomme
Hab jedoch noch ganz andere Probleme mit dem Licht und (vermutlich den) Normalen, habs erstmal ausgeschaltet...
Wenn ich nach oben blicke ist der Himmel (der obere deckel des Würfels) nicht richtig beleuchtet was natürlich schlecht aussieht...
Code: |
Type OGL_Kamera
X As Single 'X-Position
Y As Single 'Y-Position
Z As Single 'Z-Position
DY As Single 'Drehwinkel um Y-Achse
DX as Single 'Drehwinkel um X-Achse
End Type
Dim Kamera As OGL_Kamera
do
if multikey(&h01) then exit do
'Kamera.DY ist der Winkel, um den gedreht werden soll
'Drehung Links
If multikey(&h4b) or multikey(&h1E) then
Kamera.DY = Kamera.DY + 1.5
Kamera.DY = IIF(Kamera.DY>359,Kamera.DY-360,Kamera.DY)
End If
'Drehung Rechts
If multikey(&h4d) or multikey(&h20) then
Kamera.DY = Kamera.DY - 1.5
Kamera.DY = IIF(Kamera.DY<-359,Kamera.DY+360,Kamera.DY)
End If
'Drehung nach oben
If multikey(&h48) then
Kamera.DX = Kamera.DX - 1.5
Kamera.DX = IIF(Kamera.DX<-359,Kamera.DX+360,Kamera.DX)
End If
'Drehung nach unten
If multikey(&h50) then
Kamera.DX = Kamera.DX + 1.5
Kamera.DX = IIF(Kamera.DX>359,Kamera.DX-360,Kamera.DX)
End If
'vorwärts
If multikey(&h11) then
Kamera.X = Kamera.X + Sin(Kamera.DY * PiToRad) * 0.1
Kamera.Z = Kamera.Z + Cos(Kamera.DY * PiToRad) * 0.1
End If
'zurück
If multikey(&h1F) then
Kamera.X = Kamera.X - Sin(Kamera.DY * PiToRad) * 0.1
Kamera.Z = Kamera.Z - Cos(Kamera.DY * PiToRad) * 0.1
End If
glRotatef Kamera.DX, 1, 0, 0
glRotatef 360-Kamera.DY, 0, 1, 0
Kamera.Y = -5
glTranslatef Kamera.X, Kamera.Y, Kamera.Z 'Welt verschieben
''''scene rendern...
loop
|
_________________
|
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|