【问题标题】:texture a line in openGL在openGL中纹理一条线
【发布时间】:2013-07-25 18:46:26
【问题描述】:

我想在 OpenGL 中画一条有多种颜色的线。我生成了一个GL_TEXTURE_1D 对象,并使用glTexCoord1i 将坐标分配给我线中的不同顶点(使用GL_LINE_STRIP 绘制),但我的线是白色的。这是错误的方法吗?有没有更好的方法来做到这一点?

编辑:我的问题不是“我做错了什么”或“我该怎么做”,而是“这是一个合理的做法,还是我应该尝试使用其他机制来完成这个?”

抱歉,不清楚。

【问题讨论】:

  • 您是否启用了纹理(通过glEnable)?另外,为什么这被否决了?
  • 我确实启用了纹理。不知道为什么它被否决了。
  • 也许提供一些代码?
  • @DrewMcGowen:我猜它被否决了,因为它由于缺乏关键信息而完全无法回答,因此表明提出问题的人缺乏努力。
  • 话虽如此,这个问题似乎完全可以挽救。

标签: c opengl


【解决方案1】:

线条纹理至少适用于一个系统:

#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;
}

【讨论】:

    【解决方案2】:

    您尚未发布任何代码或详细说明您想要做什么,因此正如 Nicol Bolas 指出的那样,告诉您如何“完成此任务”几乎是不可能的。但是,我会检查您的纹理坐标是否与您使用glTexCoord1i 指定的类型相匹配。您是否正在使用浮点数?

    如果您最终无法对线条进行纹理处理(互联网上说这是不可能的,但我找不到任何官方信息),您可以画一个非常细的矩形。这是你可以的纹理。

    【讨论】:

    • 这就是我最终要做的,画一个细长的矩形。谢谢你的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 2014-09-21
    • 2011-05-19
    • 1970-01-01
    相关资源
    最近更新 更多