我想在 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;
}
我是一名优秀的程序员,十分优秀!