c++ - 具有固定功能管道的一维纹理查找表

标签 c++ opengl texture-mapping lookup-tables texture1d

我想用 OpenGL 的(旧的)固定函数管线创建一维纹理,它通过三种颜色进行插值。

网上查了下:glTexImage1D是常用的。我找不到任何好的简单示例代码,而且我不知道如何从中返回 (RGB) 值。

OpenGL(固定函数)是否有创建一维纹理并从中返回 RGB 值的方法?

最佳答案

是的,glTexImage1D() + GL_TEXTURE_1D:

screenshot of a 3-colored triangle

#include <GL/glew.h>
#include <GL/glut.h>

GLuint tex = 0;
void display()
{
    glClear( GL_COLOR_BUFFER_BIT );

    glEnable( GL_TEXTURE_1D );
    glBindTexture( GL_TEXTURE_1D, tex );
    glBegin(GL_TRIANGLES);
    glTexCoord1f( 0.0f );
    glVertex2f( -0.5f, -0.5f );
    glTexCoord1f( 0.5f );
    glVertex2f( 0.5f, -0.5f );
    glTexCoord1f( 1.0f );
    glVertex2f( 0.0f, 0.5f );
    glEnd();

    glutSwapBuffers();
}

int main( int argc, char** argv )
{
    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_RGBA | GLUT_DOUBLE );
    glutInitWindowSize( 400, 400 );
    glutCreateWindow( "GLUT" );
    glewInit();

    glGenTextures( 1, &tex );
    glBindTexture( GL_TEXTURE_1D, tex );
    unsigned char pixels[] =
    {
        255, 0, 0, 255,
        0, 255, 0, 255,
        0, 0, 255, 255,
    };
    glTexImage1D( GL_TEXTURE_1D, 0, GL_RGBA, 3, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels );
    glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL );
    glTexParameteri( GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
    glTexParameteri( GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
    glTexParameteri( GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );

    glutDisplayFunc( display );
    glutMainLoop();
    return 0;
}

关于c++ - 具有固定功能管道的一维纹理查找表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49262526/

相关文章:

ruby - Gem 在 Mac OSX Lion 上安装 ruby​​-opengl

c++ - 如何使用 FREEGLUT 获得多显示器的所有支持分辨率?

swift - SceneKit:导出 UVSet 或将 UV 从一个对象复制到另一个对象

C++模板问题

c++ - 更改 .exe 文件版本(来自 C++ 项目)

opengl - 是否值得在代码中缓存 glsl 统一位置?

python - 将图像映射到球体上并绘制3D轨迹

colors - MeshBasicMaterial 颜色色调纹理贴图 Three.js

c++ - 检查 std::any 变量是否包含 std::string 时出现问题

c++ - 加载 View Controller 时播放声音