标签: texture-mapping

openGL纹理只显示纹理的红色成分

我试图将图像纹理映射到单个多边形.我的图像正在被正确读取,但只有图像的红色平面被纹理化.

我在QGLWidget中这样做

我在读完后检查了图像,并且正在正确读取组件 - 即,我得到绿色和蓝色平面的有效值.

这是代码

QImageReader    *theReader = new QImageReader();

theReader->setFileName(imageFileName);
QImage  theImageRead = theReader->read();
if(theImageRead.isNull())
    {
        validTile = NOT_VALID_IMAGE_FILE;
        return;
    }
else
    {
        int newW = 1;
        int newH = 1;
        while(newW < theImageRead.width())
            {
                newW *= 2;
            }
        while(newH < theImageRead.height())
            {
                newH *= 2;
            }
        theImageRead = theImageRead.scaled(newW, newH, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
// values checked in theImageRead are OK here
        glGenTextures(1,&textureObject);
        theTextureImage = QGLWidget::convertToGLFormat(theImageRead);
// values checked in theTextureImage are OK here
        glBindTexture(GL_TEXTURE_2D, textureObject);
        glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,newW, newH, 0, …
Run Code Online (Sandbox Code Playgroud)

opengl qt texture-mapping

0
推荐指数
1
解决办法
3526
查看次数

我的opengl纹理底部有奇怪的细线或点

我制作了一个类似于这个的应用程序:http://www.youtube.com/watch?v = U2uH-jrsSxs(声音有点大而且糟糕).问题是在每个纹理的底部都有一条非常细的线/点/出现的东西.这几乎是不明显的,但它在那里,我不知道为什么.我的纹理大小是256x256.我测试了纹理尺寸为128x128的earliear我觉得那里什么都没有,但不确定.这不是什么大问题,因为它很薄但我觉得很烦人.这是一个截图.我选择RED那些线.我是OpenGL(ES)的菜鸟,所以我可能做错了.任何帮助表示赞赏.

textures opengl-es objective-c texture-mapping

0
推荐指数
1
解决办法
714
查看次数

OpenGL纹理:为什么订单很重要?

我试图设置一个简单的函数,这将使我更容易在OpenGL中纹理地图几何,但出于某种原因,当我试图制作一个天空盒时,我得到一个白色的盒子而不是纹理映射的几何.我认为有问题的代码包含在以下内容中:

void MapTexture (char *File, int TextNum) {
    if (!TextureImage[TextNum]){
        TextureImage[TextNum]=auxDIBImageLoad(File);
        glGenTextures(1, &texture[TextNum]);
        glBindTexture(GL_TEXTURE_2D, texture[TextNum]);
        glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[TextNum]->sizeX, TextureImage[TextNum]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[TextNum]->data);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    }
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture[TextNum]);
//glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[TextNum]->sizeX, TextureImage[TextNum]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[TextNum]->data);
//glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);

}
Run Code Online (Sandbox Code Playgroud)

最重要的事情,我不明白的是由于某种原因,glBindTexture()一定要来之间glGenTextures()glTexImage2D.如果我把它放在其他任何地方,它会搞砸一切.什么可能导致这个问题?对不起,如果它很简单,我对openGL来说是全新的.

下面是我正在谈论的白盒的截图: 在此输入图像描述

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++

在更多地使用代码后,我意识到如果我添加glTexImage2D()glTexParameteri()在最后一次glBindTexture()之后所有纹理加载.为什么没有这两行会加载大多数纹理,但是有一些不会加载,为什么我必须为每一帧调用glTexImage(),但仅限于几个纹理?

c++ opengl texture-mapping

0
推荐指数
2
解决办法
739
查看次数

地形纹理

有没有办法以渐变的方式混合2个纹理?恩.第一个纹理从顶部开始,然后到达底部,第二个纹理从底部开始并向上移动.我想让它们像渐变中那样松散不透明,以创建平滑的连接.可能吗?

也许有其他方法来创建这样的纹理?问题是我的地形高度差异看起来不太好 - 在一个方形区域,一个三角形的纹理与另一个三角形不同.

opengl textures texturing texture-mapping

0
推荐指数
1
解决办法
677
查看次数

OpenGL:UV 值未在片段着色器中进行插值

我一直在尝试将一些旧的 OpenGL 代码转换为使用着色器,但在让片段着色器在立方体上绘制纹理时遇到了问题。然而,我看到的只是一个灰色的立方体。我已经调试了我的 .obj 加载器代码,并且我知道 UV 正在正确加载,并且我知道纹理正在从磁盘加载并正确放置在 GPU 上。经过大量测试后,我发现我的 UV 值没有在每个三角形的面上进行插值。也就是说,看起来每个片段的 uv 值都为 0.0,0.0(这是我缓冲区中的第一个 uv 值)知道为什么吗?

这是我的片段着色器:

#version 430 core

in vec3 color;
in vec2 uv;
uniform sampler2D tex;
out vec3 frag_color;

void main()
{
    //frag_color = color;
    frag_color = texture(tex,uv).rgb;
}
Run Code Online (Sandbox Code Playgroud)

还有我的顶点着色器:

#version 430 core

layout(location = 0) in vec3 pos;
layout(location = 1) in vec3 normal;
layout(location = 2) in vec2 uv;
uniform mat4 mvMatrix;
uniform mat4 mvpMatrix;
attribute vec3 lightPos;
out vec3 color;
out vec2 uv_out;

void …
Run Code Online (Sandbox Code Playgroud)

opengl glsl texture-mapping texture2d

0
推荐指数
1
解决办法
4275
查看次数

为什么我的OpenGL纹理透明?

我在OpenGL中有一个地形,我使用GLSL mix()函数组合了两个纹理.这是我正在使用的纹理. 在此输入图像描述

现在我能够组合和混合这两个纹理,但出于某种原因,当我在地形上渲染纹理时,地形变得透明.我先渲染LHS纹理,然后用alpha通道渲染RHS纹理,我不明白为什么它是透明的.

在此输入图像描述 这是一个有趣的事实,在截图中,你可以看到在Nvidia GPU上渲染时的地形结果,当我在interl HD 3k上渲染相同的东西时,我得到了不同的结果.这个结果是它应该如何,在下面的截图中没有任何透明.

在此输入图像描述

这是我的片段着色器代码..

void main() 
{
vec4 dryTex   = texture( u_dryTex, vs_texCoord *1 );
vec4 grassTex = texture( u_grassTex, vs_texCoord *1 );
vec4 texColor1= mix(dryTex, grassTex , grassTex.a);   
out_fragColor = texColor1;
}
Run Code Online (Sandbox Code Playgroud)

c++ opengl textures glsl texture-mapping

0
推荐指数
1
解决办法
124
查看次数

毛皮质地在兔子上显得粗糙

我编写了这段代码,将纹理应用于以ply格式提供的bunny模型.兔子用纹理绘制,但不像看起来像毛皮,纹理看起来像粗点.

void GLRenderer::paintGL()
{
    // Set light
    GLfloat light_position[] = { lightPositionX, lightPositionY, lightPositionZ, 0.0 };
    glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    // Enabling texture
    glEnable(GL_TEXTURE_2D);
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

    bindTexture(QImage("fur4.bmp"));

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

    glEnable(GL_NORMALIZE);
    glLoadIdentity();

    glBegin(GL_TRIANGLES);

        for( int i = 0 ; i < objPLYParser.g_vpX.size() ; i+=3 )
        {
                float vector1[3], vector2[3], vCross[3], normalizationValue;
                vector1[0] = objPLYParser.g_vpX[i] - objPLYParser.g_vpX[i+1];
                vector1[1] = objPLYParser.g_vpY[i] - objPLYParser.g_vpY[i+1];
                vector1[2] = objPLYParser.g_vpZ[i] - objPLYParser.g_vpZ[i+1];

                vector2[0] = objPLYParser.g_vpX[i] …
Run Code Online (Sandbox Code Playgroud)

opengl 3d graphics qt texture-mapping

0
推荐指数
1
解决办法
357
查看次数

GL_QUADS状态不支持多个glBindTexture?

简而言之,为什么我不能将两个glBindTexture放入一个glBegin(GL_QUADS)... glEnd()?

我正在关注OpenGL红皮书第9章,http://www.glprogramming.com/red/chapter09.html

在例9-5中,程序texbind.c生成两个具有不同纹理的四边形,如下所示: 在此输入图像描述

左边的四边形有一个白色的棋盘格纹,而右边的四边形有一个红色的棋盘格.

这是将纹理映射到两个四边形的代码:

void display(void)
{
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glBindTexture(GL_TEXTURE_2D, texName[0]);
  glBegin(GL_QUADS);
  glTexCoord2f(0.0, 0.0); glVertex3f(-2.0, -1.0, 0.0);
  glTexCoord2f(0.0, 1.0); glVertex3f(-2.0, 1.0, 0.0);
  glTexCoord2f(1.0, 1.0); glVertex3f(0.0, 1.0, 0.0);
  glTexCoord2f(1.0, 0.0); glVertex3f(0.0, -1.0, 0.0);
  glEnd();
  glBindTexture(GL_TEXTURE_2D, texName[1]);
  glBegin(GL_QUADS);
  glTexCoord2f(0.0, 0.0); glVertex3f(1.0, -1.0, 0.0);
  glTexCoord2f(0.0, 1.0); glVertex3f(1.0, 1.0, 0.0);
  glTexCoord2f(1.0, 1.0); glVertex3f(2.41421, 1.0, -1.41421);
  glTexCoord2f(1.0, 0.0); glVertex3f(2.41421, -1.0, -1.41421);
  glEnd();
  glFlush();
}
Run Code Online (Sandbox Code Playgroud)

我们可以看到,即使代码使用GL_QUADS,它也会在每个GL_QUADS状态中绘制一个四元组.但是,如果我在这段代码的中间注释掉glEnd()和glBegin(GL_QUADS),就像这样:

void display(void)
{
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glBindTexture(GL_TEXTURE_2D, texName[0]);
  glBegin(GL_QUADS);
  glTexCoord2f(0.0, 0.0); glVertex3f(-2.0, -1.0, 0.0);
  glTexCoord2f(0.0, 1.0); …
Run Code Online (Sandbox Code Playgroud)

opengl texture-mapping

0
推荐指数
1
解决办法
510
查看次数