Özel görelilik Lorentz Dönüşümünü anlamaya yardımcı olan bir GLSL gölgelendirici uygulamaya çalışıyorum.
İki eksene hizalanmış atalet gözlemcisi alalım O
ve O'
. Gözlemci O'
hareket wrt gözlemci olan O
hız ile v=(v_x,0,0)
.
O'
Koordinatlar açısından tanımlandığında , bir olay P' = (x',y',z',ct')
koordinatları dönüştürdü(x,y,z,ct)= L (x',y',z',ct')
burada L, P 'olayının koordinatlarını koordinatlarda yazmamıza yardımcı olan Lorentz dönüşümü adı verilen 4x4 bir matristir O
.
(ayrıntılar için bkz. http://en.wikipedia.org/wiki/Lorentz_transformation#Boost_in_the_x-direction )
Her tepe noktasına hız verildiğinde Lorentz dönüşümünü uygulayan ilk ön köşe gölgelendiricisini yazdım, ancak dönüşümü doğru şekilde çalıştıramıyorum.
vec3 beta= vec3(0.5,0.0,0.0);
float b2 = (beta.x*beta.x + beta.y*beta.y + beta.z*beta.z )+1E-12;
float g=1.0/(sqrt(abs(1.0-b2))+1E-12); // Lorentz factor (boost)
float q=(g-1.0)/b2;
//http://en.wikipedia.org/wiki/Lorentz_transformation#Matrix_forms
vec3 tmpVertex = (gl_ModelViewMatrix*gl_Vertex).xyz;
float w = gl_Vertex.w;
mat4 lorentzTransformation =
mat4(
1.0+beta.x*beta.x*q , beta.x*beta.y*q , beta.x*beta.z*q , beta.x*g ,
beta.y*beta.x*q , 1.0+beta.y*beta.y*q , beta.y*beta.z*q , beta.y*g ,
beta.z*beta.x*q , beta.z*beta.y*q , 1.0+beta.z*beta.z*q , beta.z*g ,
beta.x*g , beta.y*g , beta.z*g , g
);
vec4 vertex2 = (lorentzTransformation)*vec4(tmpVertex,1.0);
gl_Position = gl_ProjectionMatrix*(vec4(vertex2.xyz,1.0) );
Bu gölgelendirici her tepe noktasına uygulanmalı ve doğrusal olmayan Lorentz dönüşümünü gerçekleştirmelidir, ancak gerçekleştirdiği dönüşüm beklediğimden açıkça farklıdır (bu durumda x ekseni üzerinde bir uzunluk daralması).
Birisi zaten 3D video oyunu için özel görelilik gölgelendirici üzerinde çalıştı mı?
O
(0,0,0) z-eksenine bakarken gözlemci hız ile O'
hareket halindeyken ve açıklanan nesneler hareketsizken sanırım . Bu köşe gölgeleyicisinde dönüşümün yalnızca köşeler için uygulandığını biliyorum, böylece çizgilerin deformasyonu kaybolur, ancak sadece bunu ilk başta anlamak ve çalışmak istiyorum. Görünüşe göre Polinom oyunu zaten bu tür dönüşümler yaptı, ama bulduğum gölgelendirici ilginç bir şey değil, çünkü aynı sonuçları elde ediyorum! bit.ly/MueQqoO
v_x
O'