簡體   English   中英

在openGL中紋理線

[英]texture a line in openGL

我想畫一條在OpenGL中有很多顏色的線。 我已經生成了GL_TEXTURE_1D對象,並使用glTexCoord1i將坐標分配給我的線(使用GL_LINE_STRIP繪制)中的不同頂點,但是我的線顯示為白色。 這是錯誤的方法嗎? 有一個更好的方法嗎?

編輯:我的問題不是“我在做什么錯”或“我該怎么做”,而是“這是做的合理的事情,還是我應該嘗試使用其他機制來做到這一點?”

抱歉,缺乏清晰性。

線紋理可在至少一個系統上運行:

紋理線

#include <GL/glut.h>

GLuint tex = 0;
void init()
{
    glGenTextures( 1, &tex );
    glBindTexture( GL_TEXTURE_1D, tex );
    glTexParameteri( GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT );
    glTexParameteri( GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
    glTexParameteri( GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
    unsigned char buf[ 32 * 4 ];
    for( size_t i = 0; i < sizeof( buf ); i += 4 )
    {
        buf[ i+0 ] = rand() % 255;
        buf[ i+1 ] = rand() % 255;
        buf[ i+2 ] = rand() % 255;
        buf[ i+3 ] = 255;
    }
    glTexImage1D( GL_TEXTURE_1D, 0, 4, sizeof( buf ) / 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, buf );
}

void display()
{
    glClear( GL_COLOR_BUFFER_BIT );

    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    glOrtho( -2, 2, -2, 2, -1, 1);

    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();

    glEnable( GL_TEXTURE_1D );
    glBindTexture( GL_TEXTURE_1D, tex );
    glColor3ub( 255, 255, 255 );

    glLineWidth( 10 );
    glBegin( GL_LINES );
    glTexCoord1i( 0 );
    glVertex2i( -1, -1 );
    glTexCoord1i( 1 );
    glVertex2i(  1,  1 );
    glEnd();

    glutSwapBuffers();
}

int main( int argc, char **argv )
{
    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_RGBA | GLUT_DOUBLE );
    glutInitWindowSize( 640, 480 );
    glutCreateWindow( "GLUT" );
    glutDisplayFunc( display );
    init();
    glutMainLoop();
    return 0;
}

正如Nicol Bolas指出的那樣,您尚未發布任何代碼或未詳細說明要執行的操作,因此告訴您如何“完成此操作”幾乎是不可能的。 但是,我將檢查紋理坐標是否與您使用glTexCoord1i指定的類型匹配。 您也許改用浮點數?

如果您最終無法對直線進行紋理處理(互聯網上說這是不可能的,但是我找不到任何官方文件),則可以繪制一個非常細的矩形。 可以紋理。

暫無
暫無

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

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