Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未在OpenGL中显示纹理_Opengl - Fatal编程技术网

未在OpenGL中显示纹理

未在OpenGL中显示纹理,opengl,Opengl,我用OpenGL绘制的三角形无法显示。当我调试代码时,只有白色背景出现。有人能帮我吗 #pragma warning(disable:4996) #include <Windows.h> #include <stdlib.h> #include <stdio.h> #include <math.h> #include <glut.h> #include <SOIL.h> const float piOver180 = 0

我用OpenGL绘制的三角形无法显示。当我调试代码时,只有白色背景出现。有人能帮我吗

#pragma warning(disable:4996)

#include <Windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <glut.h>
#include <SOIL.h>

const float piOver180 = 0.0174532925f;
float heading;
float xPos;
float zPos;

//declarations
GLuint filter;
GLuint texture[3];

int width = 720;
int height = 540;

void init();
void display();
void drawTriangle();
void reshape(int width, int height);
我的显示功能

void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    glBlendFunc(GL_SRC_ALPHA, GL_ONE);
    glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
    glClearDepth(1.0);
    glEnable(GL_DEPTH_TEST);

    GLfloat xTrans = -xPos;
    GLfloat yTrans = -walk - 0.25f;
    GLfloat zTrans = -zPos;
    GLfloat sceneRotY = 360.0f - yRot;

    glTranslatef(xTrans, yTrans, zTrans);

    drawTriangle();
glFlush();
    glutSwapBuffers();
}
我画三角形的地方

void drawTriangle()
{
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, texture[0]);
    glBegin(GL_TRIANGLES);

        glNormal3f(0.0f, 0.0f, 1.0f);

        glTexCoord2f(-3.0f, 0.0f);  glVertex3f(-3.0f, 0.0f, 6.0f);
        glTexCoord2f(-3.0f, 0.0f);  glVertex3f(-3.0f, 0.0f, 0.0f);
        glTexCoord2f(3.0f, 0.0f);   glVertex3f(3.0f, 6.0f, 0.0f);

        glTexCoord2f(-3.0f, 0.0f);  glVertex3f(-3.0f, 0.0f, 6.0f);
        glTexCoord2f(3.0f, 0.0f);   glVertex3f(-3.0f, 6.0f, 6.0f);
        glTexCoord2f(3.0f, 0.0f);   glVertex3f(3.0f, 6.0f, 0.0f);

    glEnd();
    glDisable(GL_TEXTURE_2D);
}

void reshape(int width, int height)
{
    glViewport(0, 0, (GLsizei)width, (GLsizei)height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    gluPerspective(40.0f, (GLdouble)width / (GLdouble)height, 0.5f, 20.0f);

    glMatrixMode(GL_MODELVIEW);
}

我想做的是一个纹理贴图的房间,现在这只是我的地板部分。

主要问题是几何体不在视野内。调用
gluPerspective()
设置投影变换,相机放置在原点上,并指向负z方向。使用近平面和远平面的值,它将显示-0.5到-20.0范围内的z值。几何体的所有z值都在0.0到6.0的范围内,因此所有几何体都位于摄影机后面

我尝试了您的大部分代码,通过向modelview转换中添加翻译,我得到了一些结果。例如,在
display()
函数的前两行之后添加一行:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -10.0f);
还有一些事情可能会妨碍您:

  • 不调用
    glutInit()
    。我想你在原始代码中有这个
  • GL\u-LINEAR\u-MIPMAP\u-LINEAR
    不是
    GL\u-TEXTURE\u-MAG\u过滤器的合法值。这必须是
    GL\u线性
    GL\u最近的
    glGetError()
    是你的朋友
  • 幸运的是,您没有启用混合,因为您的
    glBlendFunc()
    调用与白色透明相结合,将阻止绘制任何内容。你可以加上白色,而这种比白色更白的东西只在洗涤剂广告中起作用
  • 将alpha清除为1.0,就像对
    glClearColor()
    的最后一个参数所做的那样,这是非常不寻常的。现在并没有什么害处,因为您只使用RGB帧缓冲区,而不与目标alpha混合
  • glFlush()
    之前的
    glutSwapBuffers()
    是多余的,只会影响性能
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -10.0f);