未在OpenGL中显示纹理
我用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
#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,就像对
的最后一个参数所做的那样,这是非常不寻常的。现在并没有什么害处,因为您只使用RGB帧缓冲区,而不与目标alpha混合glClearColor()
之前的glFlush()
是多余的,只会影响性能glutSwapBuffers()
- 幸运的是,您没有启用混合,因为您的
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -10.0f);