Method 1: Using OpenGL's native multi-texture support (using semantics)
// In C++ File:
// Identify the textures to use for the pixel shader...
cgGLSetTextureParameter( g_CGparam_testTexture, g_testTextureID );
cgGLSetTextureParameter( g_CGparam_checkerTexture, g_checkerTextureID );
// STAGE 0
glActiveTextureARB( GL_TEXTURE0_ARB );
glBindTexture( GL_TEXTURE_2D, g_testTextureID );
// STAGE 1
glActiveTextureARB( GL_TEXTURE1_ARB );
glBindTexture( GL_TEXTURE_2D, g_checkerTextureID );
cgGLBindProgram( g_CGprogram_pixel );
cgGLEnableProfile( g_CGprofile_pixel );
// Draw primitives
cgGLDisableProfile( g_CGprofile_pixel );
// In Cg File:
uniform sampler2D testTexture : TEXUNIT0,
uniform sampler2D checkerTexture : TEXUNIT1
Method 2: Using Cg's special texture functions:cgGLSetTextureParameter, cgGLEnableTextureParameter, and cgGLDisableTextureParameter
// In C++ File:
g_CGparam_testTexture = cgGetNamedParameter(g_CGprogram_pixel, "testTexture");
g_CGparam_checkerTexture = cgGetNamedParameter(g_CGprogram_pixel, "checkerTexture");
// Identify the textures to use for the pixel shader...
cgGLSetTextureParameter( g_CGparam_testTexture, g_testTextureID );
cgGLSetTextureParameter( g_CGparam_checkerTexture, g_checkerTextureID );
cgGLBindProgram( g_CGprogram_pixel );
cgGLEnableProfile( g_CGprofile_pixel );
cgGLEnableTextureParameter( g_CGparam_testTexture );
cgGLEnableTextureParameter( g_CGparam_checkerTexture );
// Draw primitives
cgGLDisableTextureParameter( g_CGparam_checkerTexture );
cgGLDisableTextureParameter( g_CGparam_testTexture );
cgGLDisableProfile( g_CGprofile_pixel );
// In Cg File:
uniform sampler2D testTexture,
uniform sampler2D checkerTexture
C++中OpenGL多纹理使用方法
博客介绍了在C++中使用OpenGL多纹理的两种方法。方法一是利用OpenGL原生多纹理支持,通过语义识别纹理;方法二则是使用Cg的特殊纹理函数,如cgGLSetTextureParameter等。文中给出了C++和Cg文件中的具体代码实现。
1731

被折叠的 条评论
为什么被折叠?



