Işınım oluşturma algoritması kullanarak hacim oluşturma öğreniyorum. here'da iyi bir demo ve tuturial buldum. Ama problem şu ki, nVidia yerine ATI grafik kartım var, bu da cg shader'ı demoda kullanamayacağından, cg shader'ı glsl shader'a değiştirmek istiyorum. OpenGL'nin kırmızı kitabını (7 baskı) geçtim ama glsl ve cg ile aşina değilim. Herkes demoda cg shader'ı glsl'ye değiştirmeme yardım edebilir mi? veya ışın dökümü kullanarak hacim oluşturmanın en basit demosuna (tabii ki glsl'de) yönelik herhangi bir materyal var mıdır? here, demonun cg gölgesidir. ve arkadaşımın nVidia grafik kartında çalışabilir.birim oluşturma (glsl kullanarak)
struct vertex_fragment
{
float4 Position : POSITION; // For the rasterizer
float4 TexCoord : TEXCOORD0;
float4 Color : TEXCOORD1;
float4 Pos : TEXCOORD2;
};
dahası, ben 2 doku ünitesi ile bir program bağlama 2 doku nesnesini yazabilirsiniz: beni en çok kafa karıştırıcı Ben örneğin, GLSL için cg giriş bölümünü çevirmek için nasıl bilmiyorum olmasıdır gölgelendirici ekranı çizerken demo programıiçin iki doku (bir 2D bağlanacaktır
glMultiTexCoord2f(GL_TEXTURE0, 1.0, 0.0);
glMultiTexCoord2f(GL_TEXTURE1, 1.0, 0.0);
Ben mesela, iki texcoord atamak şartıyla volume texture
içinbir 3D) ama) tek glMultiTexCoord3f(GL_TEXTURE1, x, y, z);
gibi doku ünitesi ben GL_TEXTURE1
birim hacim dokusu için olduğunu düşünüyorum, ama bir (texure birimi ile backface_buffer
içindir? bildiğim kadarıyla bir gölgelendiricide doku obj bağlamak için bildiği gibi, ben mesela bağlamak için bir doku ünitesi almak gerekir:
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);
programı ince derlenmiş ve Tamam bağlantılıdır. ama sadece her üç konumdan -1 tane aldım (texloc, volume_texloc ve stepsizeloc). Optimize edilmiş olabileceğini biliyorum. Herkes cg shader'ı glsl shader'a çevirmeme yardım edebilir mi?
Düzenleme: Eğer GLSL modern OpenGL API uygulama (C++ kaynak kodu) ilgi varsa: Volume_Rendering_Using_GLSL
Cg gölgelendiriciler, ATV/AMD'de olduğu gibi nVidia'da da çalışırlar (Cg çalışma zamanı * hatayla dolu bir hata kodu gibi oldukça görecelidir). – ssube
Sadece bir hatırlatma: Cg derleyici GLSL kodunu yayabilir. Ayrıca Cg, AMD/ATI kartları ile kullanılabilir. Sadece birkaç NVidia'ya özgü şey çalışmayacak ve performans biraz zayıflayacak. – datenwolf
@datenwolf gerçekten? Bir deneyeceğim. Glsl kodunu nasıl gönderebilirim acaba? – toolchainX