C++ 纹理不定心

C++ 纹理不定心,c++,opengl,C++,Opengl,所以,我想用OpenGL做一个非常基本的程序。一切都很好,有纹理问题,但现在都解决了 但是现在,我有一个小问题。纹理显示,但它不是“居中”。我试着改变顶点的位置,但是不行,不行 这是一张显示发生了什么的图片: 以下是一些可能有帮助的代码: 我的建议包括: #include"GL/glew.h" #include"GL/glut.h" #include"GLFW/glfw3.h" #ifdef _WIN32 #include <W

所以,我想用OpenGL做一个非常基本的程序。一切都很好,有纹理问题,但现在都解决了

但是现在,我有一个小问题。纹理显示,但它不是“居中”。我试着改变顶点的位置,但是不行,不行

这是一张显示发生了什么的图片:

以下是一些可能有帮助的代码:

我的建议包括:

#include"GL/glew.h"
#include"GL/glut.h"
#include"GLFW/glfw3.h"
#ifdef _WIN32
#include <Windows.h>
#else
#include <unistd.h>
#endif
#include <iostream>
#include <fstream>
#include <vector>
#include <string>

#include <stdio.h>
#include "SOIL/SOIL.h"
#包括“GL/glew.h”
#包括“GL/glut.h”
#包括“GLFW/glfw3.h”
#ifdef_WIN32
#包括
#否则
#包括
#恩迪夫
#包括
#包括
#包括
#包括
#包括
#包括“土壤/土壤.h”
主代码(我隐藏了一些代码行):

int图像宽度、图像高度;
unsigned char*image=SOIL\u load\u image(“face.png”)、&image\u width、&image\u height,NULL,
土壤荷载(RGBA);
胶合纹理0;
glBindTexture(GL_TEXTURE_2D,texture0);
glGenTextures(1和0);
玻璃纹理(GL_纹理0);
glTexParameteri(GL_纹理_2D、GL_纹理_包裹、GL_夹紧_至_边框);
glTexParameteri(GL_纹理_2D、GL_纹理_包裹、GL_夹紧至_边框);
glTexParameteri(GL_纹理2D、GL_纹理MAG_过滤器、GL_线性MIPMAP_线性);
glTexParameteri(GL_纹理2D、GL_纹理最小过滤器、GL_线性);
如果(图像)
{
GLTEXAGE2D(GL_纹理_2D,0,GL_RGBA,图像宽度,图像高度,0,GL_RGBA,
GL_无符号_字节,图像);
}
其他的
{

cout纹理坐标需要在[0.0,1.0]范围内:

glTexCoord2f(0.0f,1.0f);glVertex2f(-0.5,5);//A
glTexCoord2f(1.0f,1.0f);glVertex2f(.5.5);//B
glTexCoord2f(1.0f,0.0f);glVertex2f(.5,-.5);/C
glTexCoord2f(0.0f,0.0f);glVertex2f(-.5,-.5);/D

(0,0)是纹理的左下角坐标,(1,1)是纹理的右上角坐标。要将纹理的左下角映射到顶点坐标(-0.5,-0.5),将纹理的右上角映射到顶点坐标(0.5,0.5)。

纹理坐标需要在[0.0,1.0]范围内:

glTexCoord2f(0.0f,1.0f);glVertex2f(-0.5,5);//A
glTexCoord2f(1.0f,1.0f);glVertex2f(.5.5);//B
glTexCoord2f(1.0f,0.0f);glVertex2f(.5,-.5);/C
glTexCoord2f(0.0f,0.0f);glVertex2f(-.5,-.5);/D

(0,0)是纹理的左下角坐标,(1,1)是纹理的右上角坐标。要将纹理的左下角映射到顶点坐标(-0.5,-0.5),将纹理的右上角映射到顶点坐标(0.5,0.5).

谢谢!这很有效。我会在睡觉后尽可能将其标记为解决方案,因为有12分钟的延迟。谢谢!这很有效。我会在睡觉后尽可能将其标记为解决方案,因为有12分钟的延迟。
int image_width, image_height;
unsigned char* image = SOIL_load_image("face.png", &image_width, &image_height, NULL, 
SOIL_LOAD_RGBA);

GLuint texture0;

glBindTexture(GL_TEXTURE_2D, texture0);
glGenTextures(1, &texture0);
glActiveTexture(GL_TEXTURE0);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

if (image)
{
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image_width, image_height, 0, GL_RGBA, 
GL_UNSIGNED_BYTE, image);
}
else
{
cout << "ERROR::TEXTURE_LOADING_fAILED" << "\n";
}

//Draw first 2 vertices
glEnable(GL_TEXTURE_2D);

glBegin(GL_QUADS);
glColor3ub(255, 255, 255); //Start vert. color

glTexCoord2f(-.5f, .5f); glVertex2f(-.5, .5); //A
glTexCoord2f(.5f, .5f); glVertex2f(.5, .5); //B
glTexCoord2f(.5f, -.5f); glVertex2f(.5, -.5); //C
glTexCoord2f(-.5f, -.5f); glVertex2f(-.5, -.5); //D

glEnd();

SOIL_free_image_data(image);

glFlush();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//glutPostRedisplay();