gpt4 book ai didi

c++ - OpenGL - 纹理未显示在整个定义区域

转载 作者:行者123 更新时间:2023-11-28 05:27:33 25 4
gpt4 key购买 nike

我正在尝试 OpenGL 的纹理映射功能,纹理显示在屏幕上,但没有显示在我设置的区域上。该区域是一个长度为 100.0 的四边形,纹理仅显示在底部。
在 glTexImage2D 中使用 GL_RGB 时,四边形只有三分之一被填充,当我将其更改为 GL_RGBA 时,它变成四边形的四分之一。

主要参数声明:

BYTE* m_pBMPBuffer;
int m_iWidth;
int m_iHeight;
GLuint m_uiTexture;

设置纹理映射的代码:

void CTextureMappingView::InitializeTexture()
{
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glGenTextures(1, &m_uiTexture);
glBindTexture(GL_TEXTURE_2D, m_uiTexture);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, m_iWidth, m_iHeight, 0, GL_BGR, GL_UNSIGNED_BYTE, m_pBMPBuffer);
}

缓冲区初始化:

m_iWidth = 64;
m_iHeight = 64;
m_pBMPBuffer = new BYTE[m_iWidth * m_iHeight * 3];

for (int i = 0 ; i < m_iWidth * m_iHeight ; i += 3)
{
m_pBMPBuffer[i] = 255;
m_pBMPBuffer[i + 1] = 0;
m_pBMPBuffer[i + 2] = 0;
}

渲染:

void CTextureMappingView::RenderScene()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(XAngle, 1.0f, 0.0f, 0.0f);
glRotatef(YAngle, 0.0f, 1.0f, 0.0f);

glPushMatrix();
glEnable(GL_TEXTURE_2D);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glBindTexture(GL_TEXTURE_2D, m_uiTexture);

glBegin(GL_POLYGON);
glTexCoord2d(0.0, 0.0);
glVertex3d(0.0, 0.0, 0.0);

glTexCoord2d(0.0, 1.0);
glVertex3d(0.0, 100.0, 0.0);

glTexCoord2d(1.0, 1.0);
glVertex3d(100.0, 100.0, 0.0);

glTexCoord2d(1.0, 0.0);
glVertex3d(100.0, 0.0, 0.0);
glEnd();

glDisable(GL_TEXTURE_2D);
glPopMatrix();
}

当前结果:

OpenGL - Simple Texture Mapping Result / Only one third of area filled

最佳答案

你只初始化了三分之一的纹理:

for (int i = 0 ; i < m_iWidth * m_iHeight ; i += 3)

您应该达到 m_iWidth * m_iHeight * 3,因为那是您分配的。

关于c++ - OpenGL - 纹理未显示在整个定义区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40231383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com