PNG到Opengl的使用问题
PNG to Opengl usage issues
我正在尝试将几个本机PNG图像整理成Opengl &我遇到了一些障碍。我已经在使用Cximage库,所以如果我能帮助它,我宁愿坚持这个。
3相关问题;
- png显示为黑色&白色在OpenGL。图像不是其他图像类型工作的问题,但我宁愿不转换,除非它很容易&
- PNG具有黑色背景,应该是透明的
- OpenGL视图/方向问题。图像在OpenGL中倾斜,即没有正确定向。png包含等距视图,我正在尝试显示。
我当前使用的代码示例;
*是的,我意识到我正在使用贬值的Opengl。由于我正在使用的遗留代码,我需要。
int MyScene::LoadTexture
{
m_pImgCol = new CxImage((BYTE *)pdatabuffer, (DWORD)filesize, CXIMAGE_FORMAT_PNG);
DWORD iDest(0), iSrc(0);
DWORD dwSize = m_pImgCol->GetWidth()*m_pImgCol->GetHeight();
BYTE *pSrc = m_pImgCol->GetBits();
BYTE *pDest = new BYTE[dwSize * 4];
BYTE *pSrcA = m_pImgAlpha ? m_pImgAlpha->GetBits() : NULL;
BYTE alpha;
for (DWORD iX = 0; iX<dwSize; iX++)
{
alpha = 255;
if (pSrcA)
alpha = pSrcA[iX];
else
{
if (pSrc[iSrc] == 0 && pSrc[iSrc + 1] == 0 && pSrc[iSrc + 2] == 0)
alpha = 0;
}
pDest[iDest++] = pSrc[iSrc++];
pDest[iDest++] = pSrc[iSrc++];
pDest[iDest++] = pSrc[iSrc++];
pDest[iDest++] = alpha;
}
GLuint iTexture=0;
glGenTextures(1, &iTexture);
glBindTexture(GL_TEXTURE_2D, 0);
glTexImage2D(GL_TEXTURE_2D, 0, 4, m_pImgCol->GetWidth(), m_pImgCol->GetHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, pDest);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glEnable(GL_TEXTURE_2D);
}
int MyScene::DrawGLScene()
{
CRect rWnd;
GetClientRect(&rWnd);
glViewport(0,0,rWnd.Width(),rWnd.Height());
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-20 * m_Zoom, 20 * m_Zoom, -15 * m_Zoom, 25 * m_Zoom, 20000, -20000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glEnable(GL_TEXTURE_2D);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glTranslatef(0, -0.5f, 0.0f);
glRotatef(m_rx, 1.0f, 0.0f, 0.0f);
glRotatef(m_rz, 0.0f, 0.0f, 1.0f);
glRotatef(m_ry, 0.0f, 1.0f, 0.0f);
DrawScene();
SwapBuffers(m_pView->m_hDC);
return TRUE;
}
int MyScene::DrawScene
{
float dL = -8;
float dR = 8;
float dT = -8;
float dB = 8;
glBindTexture(GL_TEXTURE_2D, 0);
glColor3f(1.0f, 1.0f, 1.0f);
glBegin(GL_QUADS);
glVertex3f(dL, dT, 0);
glTexCoord2f(0, 0);
glVertex3f(dL, dB, 0);
glTexCoord2f(0, 1);
glVertex3f(dR, dB, 0);
glTexCoord2f(1, 1);
glVertex3f(dR, dT, 0);
glTexCoord2f(1, 0);
glEnd();
}
如果有必要,我可以提供更多的代码,但这是最基本的,我可以把它分解为。
-
发现http://ysflight.in.coocan.jp/programming/pngdecoder/pngdecodere.html &修改它以读取现有缓冲区。
-
通过添加;
glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-
成像撕裂;看来我的顺序不对;
glTexCoord2f(0, 0); glVertex3f(dL, dT, 0);
相关文章:
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- 将旧管道转换为现代 openGL 时出现问题
- Qt OpenGL 渲染到纹理性能问题
- 我在 OpenGL 中显示图像时遇到问题
- OpenGL 相机移动程序顶点着色器问题
- Opengl问题:很可能是简单的纹理问题
- 从文件问题加载纹理 Android NDK 和 OpenGL
- 在OpenGL(GLM/C++)中使用四元数旋转时出现问题
- OpenGL中使用Freetype进行字体渲染的问题不起作用
- 如何在 Opengl 中使用多个纹理解决此问题
- 在 opengl 中翻译相机时遇到问题
- 使用 OpenGL .obj 法线时出现问题
- 圆形与方形碰撞检测以及需要响应C++ |OpenGL。我的问题就是这个"I need to keep the circle outside the square"
- opengl 飞行模拟器应用程序中的文本呈现问题
- OpenGL在Ortho和特点问题之间切换
- 绘制的 OpenGL 点消失,绘制调用和交换缓冲区问题
- 初始化多个纹理 OpenGL、SDL C++ 时出现问题
- 两个不同的对象 OpenGL.VAO VBO IBO 网格失真问题
- 显示素材问题(opengl)
- 聚光灯问题OpenGL