जीएलएसएल में विशेष सापेक्षता शैडर


11

मैं एक GLSL shader को लागू करने की कोशिश कर रहा हूं जो विशेष सापेक्षता लोरेंत्ज़ परिवर्तन को समझने में मदद करता है।

चलो दो अक्ष-संरेखित जड़त्वीय पर्यवेक्षक लेते हैं Oऔर O'। प्रेक्षक O'गति के Oसाथ गति wrt पर्यवेक्षक में है v=(v_x,0,0)

O'निर्देशांक के संदर्भ में वर्णित होने पर , एक घटना P' = (x',y',z',ct')ने निर्देशांक को रूपांतरित कर दिया है(x,y,z,ct)= L (x',y',z',ct')

जहां L एक 4x4 मैट्रिक्स है जिसे लोरेंत्ज़ ट्रांसफॉर्मेशन कहा जाता है जो हमें निर्देशांक में इवेंट P 'के निर्देशांक लिखने में मदद करता है O

(विवरण के लिए http://en.wikipedia.org/wiki/Lorentz_transformation#Boost_in_the_x-direction देखें )

मैंने एक पहला प्रारंभिक वर्टेक्स शडर नीचे लिखा है जो लोरेंट्ज़ ट्रांसफ़ॉर्मेशन को हर वर्टेक्स पर वेग को लागू करता है, लेकिन मुझे सही तरीके से काम करने के लिए ट्रांसफ़ॉर्मेशन नहीं मिल सकता है।

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) );

यह शेडर प्रत्येक शीर्ष पर लागू होना चाहिए और गैर-रेखीय लोरेंत्ज़ परिवर्तन करना चाहिए, लेकिन यह जो परिवर्तन करता है वह स्पष्ट रूप से उस चीज़ से अलग है जो मैं उम्मीद करता हूं (इस मामले में एक्स-अक्ष पर एक लंबाई-संकुचन)।

क्या किसी ने पहले से ही 3 डी वीडियोगेम के लिए विशेष सापेक्षता shader पर काम किया है?


यह वास्तव में एक रेखीय परिवर्तन है, गैर-रैखिक नहीं, जैसा कि आप जुड़े राज्यों से विकि करते हैं। तो आप जो देखते हैं वह ठीक लगता है, हालांकि, इसे देखे बिना सुनिश्चित करना कठिन है।
माईक सेमर

प्रभावों को देखने के लिए आप ShaderMaker में इस शेडर को आज़मा सकते हैं, लेकिन जो मैं प्राप्त करना चाहता हूँ, वह यह प्रभाव है: spacetimetravel.org/relaflug/relaflug.html यहाँ हमें x- अक्ष पर लंबित संकुचन देखना चाहिए, लेकिन मुझे गलत स्केलिंग दिखाई देती है
लिनेलो

क्या आप वास्तव में कैमरा ले जाते हैं?
Spacetimetravle-

गति 0.5 c / s थोड़ी छोटी है, 0.9 से कुछ बड़ा उपयोग करने का प्रयास करें, उदाहरण 0.93 c / s का उपयोग करता है और उस गति के साथ कैमरा को स्थानांतरित करता है
Maik Semder

नहीं, मुझे लगता है कि पर्यवेक्षक Oz- अक्ष को नीचे देख रहा है (जबकि 0 ऑब्जर्वर O'गति के Oसाथ गति wrt में है v_xऔर इसमें बताई गई वस्तुएं O'बाकी हैं। मुझे पता है कि इस शीर्ष छायादार में परिवर्तन केवल लंबों के लिए लागू किया जाता है ताकि लाइनों की विकृति खो जाए लेकिन मैं बस इसे समझना और काम करना चाहता हूं। लगता है कि खेल बहुपद पहले से ही इस तरह के बदलाव किए, लेकिन मुझे जो मिला है वह दिलचस्प नहीं है, क्योंकि मुझे एक ही परिणाम मिलता है! bit.ly/MueQqo
linello

जवाबों:


4

लोरेंत्ज़ संकुचन को लागू करने के लिए, आपकी सबसे अच्छी शर्त संभवतः गति की दिशा में 1 / गामा द्वारा वस्तु को स्पष्ट रूप से मापना है।

परेशानी यह है कि लोरेंत्ज़ परिवर्तन समय दिशा के साथ-साथ अंतरिक्ष में भी लंबों को विस्थापित करता है, इसलिए स्वयं से यह आपको यह नहीं बताएगा कि एक गतिमान वस्तु समय में एक विशिष्ट क्षण में कैसी दिखती है। ऐसा करने के लिए, आपको पहले पूरी वस्तु को बदलना होगा और उसके बाद एक "स्लाइस" को अंतरिक्ष अक्ष के समानांतर ले जाना होगा, जैसे कि इस चित्र में:

लोरेंट्ज़ संकुचन स्थान-समय आरेख

वास्तविक के लिए इसकी गणना करने के लिए, आपको पर्यवेक्षक के संदर्भ फ्रेम में समय के वर्तमान क्षण के 3 डी हाइपरप्लेन के साथ शीर्ष की विश्व-रेखा को पार करते हुए, 4 डी में प्रभावी रूप से चलना होगा। मेरा मानना ​​है कि ऐसा करने का परिणाम केवल 1 / गामा द्वारा स्केलिंग के समान है।

(अतिरिक्त क्रेडिट के लिए, इस तथ्य को ध्यान में रखें कि एक पर्यवेक्षक वास्तव में एक ही समय में पूरी वस्तु को नहीं देख सकता है: वे इसे प्रकाश किरणों का उपयोग करके देखेंगे। इसलिए आपको विश्व-रेखा को पार करने की आवश्यकता होगी। पर्यवेक्षक के पिछले प्रकाश शंकु के साथ शिखर यह वास्तव में परिणाम में परिवर्तन काफी:। एक वस्तु दूर जा रहा आप छोटा देखो होगा, लेकिन एक वस्तु आगे बढ़ ओर लंबाई दिखाई देगा और एक वस्तु sidways चलती हो जाएगा घुमाया - देख Penrose-टेरेल रोटेशन अधिक जानकारी के लिए।)


ठीक है, लेकिन क्या होगा अगर मैं सिमुलेशन के अंदर समय बदल रहा हूं? मैं समय को एक समान फ्लोट के रूप में मानता हूं, जो कि छायादार के बाहर से गुजरता है, यह समय में वस्तु को सही ढंग से ख़राब करना चाहिए?
लिनेलो

यदि समय प्रत्येक फ्रेम के लिए एक स्थिर है, तो आप 4 डी दुनिया का 3 डी टाइम-स्लाइस ले रहे हैं, इसलिए हां, जो मैंने ऊपर कहा था, वह है।
नाथन रीड

मुझे यह भी समझ में नहीं आता है कि क्या मुझे लोरेंट्ज़ परिवर्तन से अलग से सापेक्षतावादी कार्यान्वयन को लागू करना है।
लिनेलो

@linello यदि आप विपथन के बारे में परवाह करते हैं, तो ऐसा लगता है कि आपको इस के और अधिक परिष्कृत संस्करण की आवश्यकता है जिसे मैंने पिछले पैराग्राफ में वर्णित किया है - अर्थात, पर्यवेक्षक के पिछले प्रकाश शंकु के साथ वर्टेक्स की विश्व-रेखा को काटें, और वर्टेक्स को चौराहे के बिंदु पर ले जाएं। स्थानिक स्थान। मुझे लगता है कि शीर्ष की छाया में रहने योग्य होना चाहिए। लोरेंत्ज़ परिवर्तन केवल शीर्ष की विश्व-रेखा को स्थापित करने में शामिल होगा। यह भी ध्यान दें कि यदि वस्तु में तेजी आ रही है, घूम रही है, आदि तो विश्व-रेखा घुमावदार है।
नाथन रीड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.