Jump to content

[C++, DirectX] Algorytm Obrazu Stereoskopowego


RhaQ

Recommended Posts

Witajcie!

 

Czy są tu osoby mające doświadczenie w tworzeniu aplikacji wyświetlających obraz stereoskopowo?

Po przeczytaniu mnóstwa artykułów i zagłębieniu się w problem postanowiłem podziałać na tym polu.

 

Program ma działać tak, że część obiektu przeznaczona jest dla lewego oka, natomiast druga - dla prawego.

Napisałem już jego większość, jednak nadal nie potrafię poradzić sobie ze scaleniem dwóch obrazów w jeden.

 

Znalazłem coś takiego http://ironicresearch.com/stereo3d/algorithm.html ale jak dla mnie, to trochę za stare.

Używano tam DirectDraw 7, gdzie ja bazuję na d3dx9.

 

Szkoda tylko, że nigdzie nie mogę znaleźć przykładowego programu, który wyjaśniłby mi zasadę łączenia tego w C++.

Dlatego piszę tu, choć wiem, że nikt nie będzie odwalał za mnie roboty...

 

...a może powinienem przestawić myślenie? Macie ludziska jakieś koncepcje, rady, przykłady?

Naprawdę chciałbym się tego nauczyć i liczę na Wasze wsparcie.

Link to comment
Share on other sites

Nie wiem czy o takie łączenie obrazów Ci chodzi, ale lepsze to niż nic :)

Jak masz dwa prostokąty w OpenGL to możesz je połączyć blendingiem. wyłączasz sprawdzanie głębi i rysujesz jeden prostokąt z obrazem z kanałem alpha na 100% (glColor4f(1,1,1,1);), a drugi obraz rysujesz w tym samym miejscu z kanałem alpha na 50% (glColor4f(1,1,1,0.5);) no i oczywiście ustawiasz odpowiedni BlendFunc.

Link to comment
Share on other sites

hey :)

 

no chyba raczej nie o to chodzi...

kombinowałem coś w stronę dwóch różnych ustawień kamery patrzącej na ten sam obiekt, ale i tak nic z tego nie wyszło ;]

zawiesiłem prace, bo na razie mam jeden drobny problem (błahy dla wprawnego programisty)

otóż zastanawiam się, jak za pomocą klawiszy 1, 2, 3... zmieniać wyświetlane obiekty?

 

mam funkcję, która tworzy pewien obiekt:

 
init_graphics(void)
{
struct CUSTOMVERTEX vertices[] = 
{ 
// długa lista
}

d3ddev->CreateVertexBuffer(...)
VOID* pVoid; 

   // ładowanie współrzędnych do bufora
   v_buffer->Lock(0, 0, (void**)&pVoid, 0);
   memcpy(pVoid, vertices, sizeof(vertices));
   v_buffer->Unlock();

   short indices[] =
   {   
       // kolejna długa lista
   };

   d3ddev->CreateIndexBuffer(...)

   // ładowanie indeksów podobnie jak z v_buffer
}
%'s7Ś     
void render_frame(void)
{
// ustawianie view i transform projection itp.
d3ddev->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 56, 0, 80); // tak rysuję obiekt z init_graphics()
}
&+^Ź0'!ŚkćĄ\"i&Ęiz;X9$śśjhĘY(Ś0Ąźr'ŚĄ.IZ&źr$)ĄŃŃm%-|t(%%AŃĄAQ}QI%911%MP)ĄŃŃm%-|t(%%AŃĄAQ}QI%911%MP(':,\"&ĘY(\"zŚ\"yVóyŁŚw(k)Vj\"+rę-o*ŹF0i\"jjg'Ś
rx,\"zZr$)ŃŃĄ)ŃĄ))(%%AŃĄAQ}QI%911%MP(%Ź)(%%AŃĄAQ}QI%911%MP(%Ź)(

 

Druga sprawa dotyczy samych modeli.

Tutaj próbuję wczytać raz cały, raz połowę tego samego obiektu.

Co powinienem stworzyć, żeby pokazać zupełnie nowy?

a ) całą nową dodatkową funkcję init_graphics()

b ) nową strukturę wierzchołków i buforów w obecnej init_graphics()

c ) coś innego

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...