簡體   English   中英

Cel-Shading對BMP模型紋理的影響?

[英]Cel-Shading effect on BMP model textures?

我偶然發現了Nehe的Cel-Shading教程 ,我想知道是否可以將這種技術應用於紋理幾何體。

我了解到,在該代碼中,效果是通過將一種單色紋理應用於模型而獲得的,我認為來自教程的相關代碼如下,用於加載着色器效果:

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)是因為x - mod(x, M)產生了很好的步進功能,M控制了步進高度。

在他的gamedev.net上的教程中,MENTAL提供了一種如何將Cel陰影外觀應用於紋理模型的方法。

但是,這種方法無法提供理想的結果-光照看起來非常“平滑”-這是因為OpenGL在切換到GL_SMOOTH模式時會沿多邊形插值顏色值。 我使用的是舊式OpenGL 1.1立即模式,對着色器沒有任何線索。

我的方法是使用ARB擴展中的多重紋理,或者使用alpha通道和混合。 從概念上講,您只需設置2個紋理-一個2D用於對象的紋理,第二個是1D-用於銳利的照明。

您可以通過點積計算第二個紋理的坐標,然后要么通過擴展使用多重紋理(雖然我自己沒有嘗試過),要么使用alpha測試和混合(或僅混合)在2條路徑中渲染對象。 為了體現這種方法,我將在不久之后嘗試發布用於實驗的源代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM