derdiusz Napisano Styczeń 8, 2008 Zgłoś Share Napisano Styczeń 8, 2008 Witam Chciałem troszkę urozmaicić to co tworzę w 3d (delphi + glscene) i wpadłem na pomysł aby można oglądać scenę przez okulary anaglifowe(np. czerwono-niebieskie). Trochę ogólnej teorii mam - należy ustawić 2 kamery obok siebie(w odległości równej rozstawowi oczu, czyli ok. 7cm) z czego widok z jednej (prawej) będzie rzutowany w kanale czerwonym całego obrazu. Tylko jak to osiągnąć programując w delphi i glscene? W jaki sposób można modyfikować to co mi glscene wyświetla? (rozbić na kanały rgb i potem złożyć zamieniając kanał R na kanał R z drugiej kamery ?). Pozdrawiam derdiusz Link do komentarza Udostępnij na innych stronach More sharing options...
Nvm Napisano Styczeń 8, 2008 Zgłoś Share Napisano Styczeń 8, 2008 Klik! - może okazać się pomocne. Skorzystaj z jakiegoś translatora czy czegoś. Link do komentarza Udostępnij na innych stronach More sharing options...
Spider100 Napisano Styczeń 8, 2008 Zgłoś Share Napisano Styczeń 8, 2008 glColorMask www.spider.dathox.com Link do komentarza Udostępnij na innych stronach More sharing options...
derdiusz Napisano Styczeń 8, 2008 Autor Zgłoś Share Napisano Styczeń 8, 2008 Super Dzięki za informacje! Ale nie jest łatwo... nie mogę nigdzie odnaleźć czym jest (i gdzie jest jego implementacja) TPixelBuffer: ... PBuffer := TPixelBuffer.Create(PBufSize, PBufSize, DC, RC, Self); ... Typ TPixelBuffer nie występuje w GLScene.. EDIT: Właściwie to mam też problem z wykorzystaniem glColorMask - mianowicie, jeżeli używam go w TGLDirectOpenGL (w którym także używam TGLCanvas) to efekt glColorMask jest widoczny tylko i wyłącznie na elementach, które narysowałem na TGLCanvas - nie na całości Link do komentarza Udostępnij na innych stronach More sharing options...
derdiusz Napisano Styczeń 15, 2008 Autor Zgłoś Share Napisano Styczeń 15, 2008 Udało mi się dojść do pewnych wniosków i efektów. Aby wyrenderować obraz skłądający się np. tylko ze składowej R należy do sceny dodać TGLDirectOpenGL (na samej górze listy!) i w metodzie onRender wstawić wcześniej wspomniany przez kolegów glColorMask: procedure Tfrm_main.GLDirectOpenGL1Render(Sender: TObject; var rci: TRenderContextInfo); begin glColorMask(true,false,false,true); end; G\"v3&zx7\"k+)ĆĄ$H7kFŚzźŁr)z;$i0z3nzlĄŁ^Ęhą^bppŚv6Ć$6G'VRĆf6RĆf6RG'VR66VćUfWvW\"ć6W&Ł6ÓŚv6Ć$6f6RĆf6RG'VRG'VR66VćUfWvW\"ć6W&Ł6Ó#Ę'sŚłĄ+-p ]x*ŁKŁ9jxŻ*knzkui' sceneViewer.Buffer.Redner; ale i to nie pomogło... jak tego dokonać ? Pozdrawiam Derdiusz Link do komentarza Udostępnij na innych stronach More sharing options...
Brainer Napisano Styczeń 17, 2008 Zgłoś Share Napisano Styczeń 17, 2008 Może się przyda : http://www.orthostereo.com/geometryopengl.html .: Brainer :. patrick.nusbaum@gmail.com Link do komentarza Udostępnij na innych stronach More sharing options...
derdiusz Napisano Styczeń 17, 2008 Autor Zgłoś Share Napisano Styczeń 17, 2008 Może się przyda : http://www.orthostereo.com/geometryopengl.html Zawsze coś Ale kurcze... nie wiem w jaki sposób sobie to przełożyć na glScene zresztą przy tej próbie pojawiają się nieoczekiwane błedy typu "niedopełnienie stosu" przy wywołaniu glMatrixMode(GL_PROJECTION), które chyba zresztą nie jest potrzebne, podobnie jak glFrustum() ponieważ glscene posiada własne kamery, które tam sobie obsługuje... .. właściwie brakuje mi już tylko malutkiej iskierki, która pozwoli na wymuszenie przerenderowania sceny w metodzie OnRender obiektu TGLDirectOpenGL(); próbowałem też wykorzystać metodę sceneViewer.Buffer.RenderingContext.SwapBuffers, ale też nie daje pożądanego rezultatu Brainer: miło Cię widzieć w innym miejscu sieci Link do komentarza Udostępnij na innych stronach More sharing options...
Brainer Napisano Styczeń 17, 2008 Zgłoś Share Napisano Styczeń 17, 2008 Spróbuj tak: dodaj na formularz komponent TGLCadencer i w zdarzeniu OnProgress wpisz: procedure TForm2.GLCadencer1Progress(Sender: TObject; const deltaTime, newTime: Double); begin GLSceneViewer1.Invalidate(); end; -zkĄŚ)Q1Ń=0IĄMQ=(QI ŃŃ%ź)(1M UŃ(ą ą5ŹĄ1}QIU1}1M1}1M1}QIU(ź1MY 1 (AŃ1 AŃYŃ(Ń1 ŃYŃ(U1 UYŃ((ą ą5ŹĄ1}1M1}1M1}QIU1}QIU(AŃ1 AŃYŃ(Ń1 ŃYŃ(U1 UYŃ(1MUŃ)( Nie jestem pewien, czy to podziała. Brainer: miło Cię widzieć w innym miejscu sieci Nom bywam tu i ówdzie! .: Brainer :. patrick.nusbaum@gmail.com Link do komentarza Udostępnij na innych stronach More sharing options...
derdiusz Napisano Styczeń 19, 2008 Autor Zgłoś Share Napisano Styczeń 19, 2008 Jakoś nie bardzo Ale udało mi się wykombinować coś co jest "bliskie" finalnemu efektowi: \\ pierwsze oko glColorMask(true,false,false,true); cam.MoveAroundTarget(0,se_eye_distance.value); // "se_eye_distance" to TSpinEdit dzięki, któremu ustawiam odległość między oczami (domyślnie 1) cam.Apply; dummy_sceneObjects.DoRender(rci, false, true); \\ drugie oko glColorMask(false,true,true,true); cam.MoveAroundTarget(0,-se_eye_distance.value); cam.Apply; dummy_sceneObjects.DoRender(rci, false, true); Ale widok z pierwszego oka nie jest przesunięty lekko w bok a pojawia się w wyjątkowo dziwnej pozycji, gdzieś pod drugim rzutem i jest obrócony w dodatku... Link do komentarza Udostępnij na innych stronach More sharing options...
Brainer Napisano Styczeń 19, 2008 Zgłoś Share Napisano Styczeń 19, 2008 Przecież na grupie dyskusyjnej Dave udzielił Ci odpowiedzi na pytanie. .: Brainer :. patrick.nusbaum@gmail.com Link do komentarza Udostępnij na innych stronach More sharing options...
derdiusz Napisano Styczeń 19, 2008 Autor Zgłoś Share Napisano Styczeń 19, 2008 Przecież na grupie dyskusyjnej Dave udzielił Ci odpowiedzi na pytanie. Wiem ale poszukuję jeszcze troszkę innego sposobu (z pominięciem glFrustum)... czy przypadkiem nie przesadzam ? Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.