Saya mencoba menerapkan shader GLSL yang membantu memahami relativitas khusus Lorentz Transformation.
Mari kita ambil dua pengamat inersia poros-sejajar O
dan O'
. Pengamat O'
bergerak pengamat O
dengan kecepatan v=(v_x,0,0)
.
Ketika dijelaskan dalam hal O'
koordinat, suatu peristiwa P' = (x',y',z',ct')
telah mengubah koordinat(x,y,z,ct)= L (x',y',z',ct')
di mana L adalah matriks 4x4 yang disebut transformasi Lorentz yang membantu kita menulis koordinat peristiwa P 'dalam O
koordinat.
(untuk detail lihat http://en.wikipedia.org/wiki/Lorentz_transformation#Boost_in_the_x-direction )
Saya telah menulis shader vertex pendahuluan pertama yang menerapkan transformasi Lorentz mengingat kecepatan untuk setiap vertex, tapi saya tidak bisa mendapatkan transformasi untuk bekerja dengan benar.
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) );
Shader ini harus berlaku untuk setiap titik dan melakukan transformasi Lorentz non-linear, tetapi transformasi yang dilakukannya jelas berbeda dari yang saya harapkan (dalam hal ini kontraksi panjang pada sumbu x).
Apakah seseorang sudah bekerja pada shader relativitas khusus untuk videogame 3D?
O
berada di (0,0,0) melihat ke bawah sumbu z sementara pengamat O'
bergerak O
dengan kecepatan v_x
dan benda-benda yang dijelaskan untuk O'
beristirahat. Saya tahu bahwa dalam vertex shader ini transformasi diterapkan hanya untuk simpul sehingga deformasi garis hilang tetapi saya hanya ingin memahami dan membuat pekerjaan ini pada awalnya. Sepertinya game Polynomial sudah membuat transformasi seperti ini, tetapi shader yang saya temukan tidak ada yang menarik, karena saya mendapatkan hasil yang sama! bit.ly/MueQqo