当前位置: 首页 > 知识库问答 >
问题:

OpenGL纹理不加载SOIL

钱青青
2023-03-14

嘿,我不能让我的纹理出现,我不知道怎么了。辅导没有帮助。这是我的代码:

Player p();


//The glutDisplayFunc();
void display() {

glPushMatrix();

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_TEXTURE_2D);
glEnable(GL_DEPTH_TEST);

//Load png with SOIL
playerTex = loadTex("Data/Sprites/player.png");
p.draw();

glFlush();
glPopMatrix(); }


//Load texture
GLuint loadTex(const char* c) {
GLuint temp = SOIL_load_OGL_texture(
    c,
    SOIL_LOAD_AUTO,
    SOIL_CREATE_NEW_ID,
    SOIL_FLAG_MIPMAPS | SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT
    );

if (0 == temp)
{
    printf("SOIL loading error: '%s'\n", SOIL_last_result());
    //return 0;
}

glBindTexture(GL_TEXTURE_2D, temp);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

return temp; }


//Player object's draw function
void player::draw() {

glEnable(GL_TEXTURE_2D);
glBegin(GL_TRIANGLES);
glColor3f(0, 0, 0);
    glTexCoord2f(0.0, 0.0);
    glVertex2f(x, y);
    glTexCoord2f(0.0, 1.0);
    glVertex2f(x + spriteW, y);
    glTexCoord2f(1.0, 1.0);
    glVertex2f(x + spriteW, y + spriteL);
glEnd();}

spriteX=0,spriteY=0,spriteW=400,spriteL=400,x=0,y=0

这是我得到的输出:输出窗口

正如你所见,黑色三角形显示得很好,但没有纹理

共有1个答案

弓明亮
2023-03-14

纹理坐标应在0范围内。。1.它们不是texel坐标。除以纹理宽度和高度,从纹理坐标转换为纹理坐标。

您还可以使用以下行将颜色设置为黑色:

glColor3f(0, 0, 0);

不要这样做。使用白色(或更改TEXTURE_ENV_MODE,但这似乎没有必要)。

glColor3f(1, 1, 1);

颜色乘以纹理颜色。您不妨将其移出glBegin()glEnd()块:

glColor(1, 1, 1);
glBegin(...);
    ...
glEnd();
 类似资料:
  • 我一直试图让纹理在opengl 3.1下工作,在ubuntu 13.04上运行的intelHD图形2000/3000显卡上。我遇到的问题是纹理要么不加载,我试图纹理的基本三角形变成黑色,要么纹理中的一些颜色会加载,但不会加载整个图像。我使用原始图像文件作为源或使用libjpeg加载jpeg得到相同的结果。 我的着色器如下所示: 创建纹理glGenTexture(1, 还有渲染功能 几何和纹理坐标

  • 在理想情况下,如果屏幕分辨率为1024x768,那么在给定时刻只需要786432 texel,2兆字节的内存就足够了。但在现实世界中,有管理成本,所以纹理需要更多的内存。 纹理流可以降低纹理的内存成本,也就是说,在给定时刻并不需要所有纹理的mipmap。纹理需要0级mipmap,因为它靠近相机,如果它离当前相机很远,5到11级mipmap可能就足够了。相机在场景中移动一段时间,一些mipmap可以

  • 我有一个从路径创建纹理的类,但当我尝试加载具有3个通道(rgb)的纹理时,它会在运行这一行时出现读取访问冲突异常 我试图改变stbi加载函数中的参数,但是没有用。 当我加载图像时,它设置了正确的宽度、高度和通道数据,所以我不知道我做错了什么 指向数据的指针也不是nullptr

  • 我正在尝试渲染一个简单的3D场景。它基本上是一个包裹在纹理中的表面。我在4台设备上测试了它,只有一台(Galaxy Note 4)正确渲染了纹理。其他三款手机(HTC Evo 3D、LG G2、索尼Xperia Z1)用一种颜色渲染所有纹理,这似乎是纹理的平均颜色。例如:原始图像和渲染纹理。 我的第一个猜测是我的碎片着色器有问题。但它非常基本,是从《Android版OpenGL ES 2》一书中复

  • 我正在对对象进行两次模糊处理。为了确保在中,整个场景都被我试图模糊的图像所覆盖。这是过程。 > < li >我设置了一个< code>FBO,其中包含我需要模糊的图像尺寸。 < li> 我正在使用以下函数设置< code >正交投影(称为< code >设置正交(FBO尺寸)): glViewport(0,0,w,h)glMatrixMode(GL _ PROJECTION)glload iden

  • 我试图用opengl在Qt中显示纹理,但当我运行时它就是不显示纹理。 我做了一些研究,发现我需要将纹理的高度和宽度设为2的幂。我的纹理现在是(1024x1024)。 我还添加了很多glTexParameterf,可以解决我的问题,但仍然没有运气。 EDIT1:是不是我的质地太大了? EDIT2:glBindTexture(GL_TEXTURE_2D,m_textureID);放置在glBindTe