के साथ वॉल्यूम प्रतिपादन (glsl का उपयोग करके) मैं रे कास्टिंग एल्गोरिदम का उपयोग करके वॉल्यूम प्रतिपादन सीख रहा हूं। मुझे here में एक अच्छा डेमो और ट्यूटोरियल मिला है। लेकिन समस्या यह है कि मेरे पास एनवीडिया के बजाय एक अति ग्राफिक कार्ड है जो मुझे डेमो में सीजी शेडर का उपयोग नहीं कर सकता है, इसलिए मैं सीजी शेडर को glsl shader में बदलना चाहता हूं। मैं ओपनजीएल की लाल किताब (7 संस्करण) से गुजर चुका हूं, लेकिन ग्लस्ल और सीजी से परिचित नहीं हूं। क्या कोई मुझे डीएसओ में सीजी शेडर को glsl में बदलने में मदद कर सकता है? या रे कास्टिंग (निश्चित रूप से glsl में) का उपयोग कर वॉल्यूम प्रतिपादन के सबसे सरल डेमो के लिए कोई सामग्री है। here डेमो का सीजी शेडर है। और यह मेरे दोस्त के एनवीडिया ग्राफिक कार्ड पर काम कर सकता है।रे कास्टिंग एल्गोरिदम
struct vertex_fragment
{
float4 Position : POSITION; // For the rasterizer
float4 TexCoord : TEXCOORD0;
float4 Color : TEXCOORD1;
float4 Pos : TEXCOORD2;
};
क्या अधिक है, मैं करने के लिए 2 बनावट यूनिट के साथ एक कार्यक्रम बाँध 2 बनावट वस्तु लिख सकते हैं: क्या सबसे मुझे भ्रमित कर रहा है कि कैसे उदाहरण के लिए, GLSL के लिए तटरक्षक के प्रवेश हिस्सा अनुवाद करने के लिए नहीं पता है कि है शेडर प्रदान की है कि मैं उदाहरण के लिए दो texcoord आवंटित जब स्क्रीन आकर्षित,
glMultiTexCoord2f(GL_TEXTURE0, 1.0, 0.0);
glMultiTexCoord2f(GL_TEXTURE1, 1.0, 0.0);
डेमो में कार्यक्रमके लिए दो बनावट (एक 2 डी करने के लिए बाध्य होगा volume texture
के लिएएक 3 डी), लेकिन glMultiTexCoord3f(GL_TEXTURE1, x, y, z);
जैसी केवल एक बनावट इकाई के साथ मुझे लगता है कि GL_TEXTURE1
इकाई वॉल्यूम बनावट के लिए है, लेकिन कौन सी (टेक्सचर इकाई) backface_buffer
के लिए है? जहाँ तक मैं आदेश में एक शेडर में बनावट obj बाध्य करने में पता है, मैं उदाहरण के लिए बाध्य करने के लिए एक बनावट यूनिट मिल चाहिए:
glLinkProgram(p);
texloc = glGetUniformLocation(p, "tex");
volume_texloc = glGetUniformLocation(p, "volume_tex");
stepsizeloc = glGetUniformLocation(p, "stepsize");
glUseProgram(p);
glUniform1i(texloc, 0);
glUniform1i(volume_texloc, 1);
glUniform1f(stepsizeloc, stepsize);
//When rendering an object with this program.
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, backface_buffer);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_3D, volume_texture);
कार्यक्रम ठीक संकलित और ठीक जुड़ा हुआ है। लेकिन मुझे केवल तीनों स्थान (texloc, volume_texloc और stepizeloc) में से -1 मिला। मुझे पता है कि इसे अनुकूलित किया जा सकता है। कोई भी मुझे सीजी शेडर को glsl shader में अनुवाद करने में मदद कर सकता है?
संपादित करें: आप GLSL के साथ आधुनिक ओपन API कार्यान्वयन (सी ++ स्रोत कोड) में रुचि रखते हैं: Volume_Rendering_Using_GLSL
छग shaders (है, जो बल्कि रिश्तेदार है के रूप में छग क्रम * कई * दुर्घटना-ऑन-त्रुटि codepaths है) अति/AMD पर बस के रूप में अच्छी तरह से काम के रूप में वे nVidia पर करते हैं। – ssube
बस एक अनुस्मारक: सीजी कंपाइलर जीएलएसएल कोड उत्सर्जित कर सकता है। सीजी का उपयोग एएमडी/एटीआई कार्ड के साथ भी किया जा सकता है। केवल कुछ एनवीडिया विशिष्ट चीजें काम नहीं करेंगे, और प्रदर्शन थोड़ा खराब होगा। – datenwolf
@ डेटनवॉल्फ वास्तव में? मुझे इसे एक मौका और देना होगा। मुझे आश्चर्य है कि glsl कोड कैसे निकालें? – toolchainX