首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cel-Shading对BMP模型纹理的影响?

Cel-Shading对BMP模型纹理的影响?
EN

Stack Overflow用户
提问于 2011-11-22 01:42:46
回答 2查看 1K关注 0票数 1

我偶然发现了Nehe's Cel-Shading Tutorial,我想知道是否有可能将这种技术应用于纹理几何体……

我知道在该代码中,效果是通过将一个单色纹理应用于模型而获得的,我认为教程中的相关代码如下所示,用于加载着色器效果:

代码语言:javascript
复制
In = fopen ("Data\\shader.txt", "r");           // Open The Shader File

if (In)                         // Check To See If The File Opened
{
    for (i = 0; i < 32; i++)         // Loop Though The 32 Greyscale Values
    {
        if (feof (In))              // Check For The End Of The File
            break;

        fgets (Line, 255, In);          // Get The Current Line

// Copy Over The Value
        shaderData[i][0] = shaderData[i][1] = shaderData[i][2] = atof (Line);
    }

    fclose (In);                    // Close The File
}

else
    return FALSE;  

glGenTextures (1, &shaderTexture[0]);           // Get A Free Texture ID

glBindTexture (GL_TEXTURE_1D, shaderTexture[0]);    // Bind This Texture. From Now On It Will Be 1D

// For Crying Out Loud Don't Let OpenGL Use Bi/Trilinear Filtering!
glTexParameteri (GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri (GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

// Upload
glTexImage1D (GL_TEXTURE_1D, 0, GL_RGB, 32, 0, GL_RGB , GL_FLOAT, shaderData);

以及以下用于启用绘制效果的

代码语言:javascript
复制
// Cel-Shading Code
glEnable (GL_TEXTURE_1D);               // Enable 1D Texturing
glBindTexture (GL_TEXTURE_1D, shaderTexture[0]);    // Bind Our Texture

glColor3f (1.0f, 1.0f, 1.0f);  

....

有没有一种方法可以在带有BMP GL_TEXTURE_2纹理的模型上运行它,并获得该纹理的大提琴阴影外观?

EN

回答 2

Stack Overflow用户

发布于 2011-11-22 02:26:52

你实际上并不需要1D纹理来进行大提琴着色。您可以通过以下方式使其程序化:

代码语言:javascript
复制
// GLSL fragment shader
vec3 colour = /* a value in range 0..1, possibly from a texture */
colour -= mod(colour, 0.2) /* limit the colour range for cel-shading */

这是因为x - mod(x, M)产生了一个很好的步进函数,M控制步长。

票数 1
EN

Stack Overflow用户

发布于 2013-02-03 20:28:45

在他的gamedev.net教程中,MENTAL给出了如何将Cel着色外观应用于纹理模型的方法。

然而,这种方法并没有给出预期的结果-照明看起来非常“平滑”-这是因为当切换到GL_SMOOTH模式时,OpenGL会沿着多边形插值颜色值。我使用的是老式的OpenGL 1.1即时模式,对着色器一无所知。

我的方法是要么使用ARB扩展中的多纹理,要么使用alpha通道和混合。从概念上讲,你只需要设置2个纹理-一个2D用于对象的纹理,第二个是1D -用于锐利的照明。

你计算第二个的纹理坐标的点积和你要么通过扩展使用多纹理(虽然我还没有尝试过),或者在两个路径中渲染你的对象,应用alpha测试和混合(或者仅仅是混合)。不久之后,我将尝试发布我的实验的源代码,以演示这种方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8216076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档