Cubemapping - Kamera falsch?
Übersicht

![]() |
NightPhoenixBetreff: Cubemapping - Kamera falsch? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi!
Ich versuch jetzt mal alles richtig zu machen was ich hier im Forum so beachten sollte. ![]() Ich habe jetzt einfach von Cubewater_demo die water.3ds als Wasser geladen, weil jemand so freundlich war und mir gesagt hat, dass Cubemappin nicht mit Planes funktioniert. Jetzt sehe ich falsch angeordnete Bilder im Wasser (also Umrisse des Würfels mit falschen Bildern) Ist jemand so freundlich und kann mir sagen, ob nicht vielleicht die Cubemapping-Kamera oder so falsch eingestellt ist? Danke ![]() >Edit:< Ich kniffle daran bereits schon 2 tage und finde keine Lösung. Mein Code: Code: [AUSKLAPPEN] Graphics3D 1024,768,32,1 SetBuffer BackBuffer() light=CreateLight() TurnEntity light,45,45,0 PositionEntity light,0,10000,0 CamPivo=CreatePivot(); Pivot für die Gravitation cam1=CreateCamera(CamPivo) CameraFogMode cam1,1 CameraRange cam1,1,26000 CameraFogRange cam1,10000,25000 CameraFogColor cam1,100,150,255 CameraClsColor cam1,100,150,255 RotateEntity cam1,0,0,0 PositionEntity cam1,0,10,-100 EntityRadius cam1,50 EntityType cam1,1 MoveEntity cam1,17500,1400,17500 CameraProjMode cam1,1 cube_cam=CreateCamera() HideEntity cube_cam CameraProjMode cube_cam,0 CameraRange cube_cam,1,26000 Isle=LoadTerrain ("IsleTerrain.bmp") ScaleEntity Isle,100,2500,100 TerrainDetail Isle,5000,False IsleTexture=LoadTexture ("TerrainTex1.bmp") EntityTexture Isle,IsleTexture EntityFX Isle,16 ScaleTexture IsleTexture,500,500 EntityType Isle,2 water=LoadMesh("water.3ds") PositionEntity water,30000,800,250000 ScaleEntity water,2000,1,2000 EntityAlpha water,1 EntityFX water,16 Himmel=CreateSphere(20) ScaleEntity Himmel,70000,70000,8000 RotateEntity Himmel,90,0,0 EntityFX Himmel,16 HT=LoadTexture("Wolken1.bmp") EntityTexture Himmel,HT ScaleTexture HT,0.1,0.1 tex=CreateTexture(256,256,1+128+256); erstellen der Cubemode Texture EntityTexture water,tex; legen der Cubemode-Textur auf das Wasser cube_mode=1; Spiegelungsverhalten Collisions (1,2,2,3) Collisions (2,1,2,3) While Not KeyHit(1) RotateTexture HT,MilliSecs()*0.00005 MoveEntity CamPivo,0,0,0; Pivot wird durch Gravitation heruntergezogen und die Kamera dadurch mit -> damit Grav. nicht an Richtung der Kamera gebunden ist ; >>Kamera Kontrolle<< ; Maussteuerung RotateEntity cam1,EntityPitch(cam1)+MouseYSpeed(),EntityYaw(cam1)-MouseXSpeed(),0 MoveMouse 512,384 ; Bewegt die Kamera mit den Kursortasten Vorwärts, Rückwärts, etc. If KeyDown(200)=True Then MoveEntity cam1,0,0,10.2 If KeyDown(208)=True Then MoveEntity cam1,0,0,-10.2 If KeyDown(205)=True Then MoveEntity cam1,10.2,0,0 If KeyDown(203)=True Then MoveEntity cam1,-10.2,0,0 ; Wenn M gedrückt wird ändert sich SetCubeMode um +1 If KeyHit(50) cube_mode=cube_mode+1 If cube_mode=4 Then cube_mode=1 SetCubeMode tex,cube_mode EndIf HideEntity cam1 UpdateCubemap(tex,cube_cam,water) ShowEntity cam1 UpdateWorld RenderWorld Flip Wend ;Die Function hab ich aus der Hilfe für SetCubeFace kopiert Function UpdateCubemap(tex,camera,entity) tex_sz=TextureWidth(tex) ; Show the camera we have specifically created for updating the cubemap ShowEntity camera ; Hide entity that will have cubemap applied to it. This is so we can get cubemap from its position, without it blocking the view HideEntity entity ; Position camera where the entity is - this is where we will be rendering views from for cubemap PositionEntity camera,EntityX#(entity),EntityY#(entity),EntityZ#(entity) CameraClsMode camera,False,True ; Set the camera's viewport so it is the same size as our texture - so we can fit entire screen contents into texture CameraViewport camera,0,0,tex_sz,tex_sz ; Update cubemap ; do left view SetCubeFace tex,0 RotateEntity camera,0,90,0 RenderWorld CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex) ; do forward view SetCubeFace tex,1 RotateEntity camera,0,0,0 RenderWorld CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex) ; do right view SetCubeFace tex,2 RotateEntity camera,0,-90,0 RenderWorld CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex) ; do backward view SetCubeFace tex,3 RotateEntity camera,0,180,0 RenderWorld CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex) ; do up view SetCubeFace tex,4 RotateEntity camera,-90,0,0 RenderWorld CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex) ; do down view SetCubeFace tex,5 RotateEntity camera,90,0,0 RenderWorld CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex) ; Show entity again ShowEntity entity ; Hide the cubemap camera HideEntity camera End Function ClearWorld End Sorry wegen meinem letzten Thema, kommt nicht wieder vor ![]() |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sicher das das Positionieren der Cam stimmt?
Denn das was du dort angibst ist 0,0,0 des Wassermeshes und das macht nur dann sinn, wenn der 0,0,0 Punkt des Wassers in der Mitte liegt und nicht in einer Ecke. Sonst könnte das ziemlich unschöne, ungewollte grafische Konsequenzen haben ![]() |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke für die schnelle Antwort, aber welche Positionierung meinst du genau? Bei CreateCamera cube_cam (am Anfang) oder bei der Kamera-Rotation, wo die 6 Texturen auf den Würfel gelegt werden? | ||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
PositionEntity camera,EntityX#(entity),EntityY#(entity),EntityZ#(entity)
diese Position Denn EntityX ist am 0 Punkt im Model und wenn dieser 0 Punkt nicht in der Mitte der Wasserfläche war bekommst du die Reflektion aus sicht einer der Ecken und das dürfte ziemlich schief aussehen. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da ich ein totaler Noob in Cubemapping bin, vermute ich jetzt einfach mal ich muss nur hinter: "EntityX#(entity)" bzw. Y,Z ein + oder - "Zahl" oder sowas für Koordinaten setzen bis es passt?
Kannst du versuchen mir das ganze nochmal in "Noobish" zu erklären? ![]() Ich habe sowas verstanden wie dass die Kamera an einer Ecke des Objektes sitzt und deshlab verzerte Bilder an die Cubemap gibt? Deshalb dann diese unsauberen übergänge? (d.h. würfelumrisse erkennbar) Kannste mir bissl helfen das Kamera Dingens richtig einzustellen? Sorry dass ich dir so ne Mühe mache ![]() Danke! Edit: Ganz vergessen: Immer wenn ich nach unten schaue ins Wasser wird alles tief Schwarz. Wenn ich die Cubemapping texture auf 1024,1024 stelle dann sehe ich Programm-fremde texturen von meinen anderen Blitz 3D Projekten+Schwarz wenn ich nach unten sehe. Dieses Cubemapping ist von ner anderen Dimension ![]() Hat jemand ein Rat für mich? |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das Edit ergibt ziemlich genau 0 Sinn, da das nie passieren dürfte.
Auch sollte es nicht tiefschwarz werden, wenn du nach unten guckst, ausser dein Himmel wäre schwarz (-> keine Skybox) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nein eine Skybox ist vorhanden (siehe Code) Vielleicht sollte ich FlipMesh machen anstatt nur beide Seiten zu texturieren (mit EntityFX 16). Das könnte klappen...
Ja das mit den fremden Texturen ist taurig aber war... Ich hatte darüber schonmal gelesen... moment.... da: https://www.blitzforum.de/foru...ubemapping Wie man auf dem Screenshot sehen kann und in der dazugehörigen Beschreibung unten im ersten Beitrag. Jetzt weiß ich aber immernoch nicht wie ich dieses blöde: PositionEntity camera,EntityX#(entity),EntityY#(entity),EntityZ#(entity) verändern muss, damit ich schöne spiegelungen hinbekomme. Hängt die Kamera nun zu niedrig? zu hoch? .. ![]() ![]() Jemand eine Idee zur Lösung des Problems? ![]() ![]() Danke Dreamora für alle Antworten bis hierhin ![]() |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Solange ich nicht weiss wo der 0,0,0 Punkt in deinem Mesh hängt kann ich dir das nicht mit sicherheit sagen.
Aber vermutlich wird ein +MeshWidth(entity)/2 / meshheight/2 / meshdepth/2 tun. Was Sky betrifft: ist eventuell unten schwarz? falls ja wärs auch möglich das du das die cam renders falsch kopierst also in die falschen cubefaces. Das schwarz könnte übrigens auch an der grösse der Skybox liegen. (siehe letztes posting in genanntem Thread bzw. der thread allgemein für ideen was hier das problem sein könnte) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke für den Tipp =)
Das Entity müsste in meinem Code das eigentliche Wasser sein. Denn als Entity in der Function unten wurde ja das wasser ausgewählt. Ich vermute mal es ist besser die Cube_cam unter wasser zu bringen damit nicht die spiegelung selbst nochmal gespiegelt wird ^^ Ich werds mal versuchen. Zu dem Schwarz: Problem gelöst! Hate vergessen auf das wasser eine textur zu machen die mit EntityFX 1 leuchtend wirkt. Jetzt ists kein schwarz mehr.. .sondern gelb wie die blöde insel ^^ D.h. meine Cam ist immernoch falsch auf die 6 Würfelseiten der Cubemap gelegt. Ich werds mit herumexperimentieren weiter versuchen... Danke Dreamora |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group