gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:14:47 26 4
gpt4 key购买 nike

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

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

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

以及以下用于启用绘图效果的内容

// 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 纹理的模型上运行它,并获得该纹理的 cel 阴影外观?

最佳答案

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

// 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 控制步进高度。

关于c++ - Cel-Shading 对 BMP 模型纹理的影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8216076/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com