OpenGL - 'glTexSubImage3D':找不到标识符 [英] OpenGL - 'glTexSubImage3D': identifier not found

查看:1345
本文介绍了OpenGL - 'glTexSubImage3D':找不到标识符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问题:我一直在试图找出这个错误在OpenGL,我不断得到 glTexSubImage3D 。 VS2010引发错误: glTexSubImage3D:未找到标识符

Problem: I've been trying to figure out this error in OpenGL that I keep getting with glTexSubImage3D. VS2010 throws the error: glTexSubImage3D: identifier not found

以创建具有沿着z维度放置的十个切片(图像)的3D纹理。它类似于此帖中的问题: C ++ - 将多个图像放在一个数组指针

但是,我一直在试图使用glTexSubImage3D,以避免这些访问冲突错误。

However, I have been trying to use glTexSubImage3D in order to avoid these access violation errors.

我在我的项目中加入了 glext.h ,因为 glTexImage3D 不是OpenGL库的一部分,我已经使用函数指针 PFNGLTEXIMAGE3DPROC glTexImage3D ,这里使用: http://content.gpwiki.org/index.php/OpenGL:Tutorials:3D_Textures

I have included glext.h in my project and since, glTexImage3D is not part of OpenGL libraries yet, I have used the function pointer PFNGLTEXIMAGE3DPROC glTexImage3D as provided for use here: http://content.gpwiki.org/index.php/OpenGL:Tutorials:3D_Textures

代码:

我一直在关注NeHe的Texture Mapping教程和卷渲染教程: http://www.codeproject.com/Articles/352270/ Volume-Rendering?msg = 4729498

I have been following NeHe's Texture Mapping tutorial and volume rendering tutorial present here: http://www.codeproject.com/Articles/352270/Getting-started-with-Volume-Rendering?msg=4729498

GLuint m_nTexId;            
unsigned char *tex;

int h = 1024;               
int w = 256;
int slices = 10;

PFNGLTEXIMAGE3DPROC glTexImage3D = (PFNGLTEXIMAGE3DPROC) wglGetProcAddress("glTexImage3D");

int LoadGLTextures()                                    
{
    glGenTextures(1,(GLuint*)&m_nTexId );

    if(m_nTexId == 0)
    return false;

    glBindTexture( GL_TEXTURE_3D, m_nTexId );
    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
    glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
    glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
    glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_BORDER);
    glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);


    glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, w, h , slices, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL );

    tex = (unsigned char *)SOIL_load_image("Data/PA_170090.png", &w, &h, NULL, 0);
    glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, h, w, 1, GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*) tex);

    tex = (unsigned char*) SOIL_load_image("Data/PA_170091.png", &w, &h, NULL, 0);
    glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 1, h, w, 1, GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*) tex);

    tex = (unsigned char *)SOIL_load_image("Data/PA_170092.png", &w, &h, NULL, 0);
    glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 2, h, w, 1, GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*) tex);

    tex = (unsigned char *)SOIL_load_image("Data/PA_170093.png", &w, &h, NULL, 0);
    glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 3, h, w, 1, GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*) tex);

    tex = (unsigned char *)SOIL_load_image("Data/PA_170094.png", &w, &h, NULL, 0);
    glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 4, h, w, 1, GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*) tex);

    tex = (unsigned char *)SOIL_load_image("Data/PA_170095.png", &w, &h, NULL, 0);
    glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 5, h, w, 1, GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*) tex);

    tex = (unsigned char*) SOIL_load_image("Data/PA_170096.png", &w, &h, NULL, 0);
    glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 6, h, w, 1, GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*) tex);

    tex = (unsigned char*) SOIL_load_image("Data/PA_170097.png", &w, &h, NULL, 0);
    glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 7, h, w, 1, GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*) tex);

    tex = (unsigned char*) SOIL_load_image("Data/PA_170098.png", &w, &h, NULL, 0);
    glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 8, h, w, 1, GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*) tex);

    tex = (unsigned char*) SOIL_load_image("Data/PA_170099.png", &w, &h, NULL, 0);
    glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 9, h, w, 1, GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*) tex);
//glBindTexture( GL_TEXTURE_3D, 0 );

    return true;

}

推荐答案

问题与你最初尝试使用 glTexImage3D(...)时的问题相同。也就是说,3D纹理是OpenGL 1.2的一个特性,而Windows只提供OpenGL 1.1而没有运行时扩展。

The problem is the same as you had when you originally tried to use glTexImage3D (...). Namely, 3D textures are a feature of OpenGL 1.2 and Windows only gives you OpenGL 1.1 without run-time extension.

您需要加载 glTexSubImage3D (...)函数与 glTexImage3D(...)相同。

You need to load the glTexSubImage3D (...) function the same as you did glTexImage3D (...).

PFNGLTEXSUBIMAGE3DPROC glTexSubImage3D =
 (PFNGLTEXSUBIMAGE3DPROC) wglGetProcAddress("glTexSubImage3D");

这篇关于OpenGL - 'glTexSubImage3D':找不到标识符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆