VC+opengl 帮忙看看这段贴纹理的代码为什么就是显示不出来

richiexieqing richiexieqing 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
最近刚刚开始接触opengl,想自绘一套3d效果的控件。现在遇到一个问题就是-控件背景透明。试了一转最后还是觉得把背景抠出来当做纹理贴上去比较可行。图现在是抠出来了,可是就是贴不上啊。
相关代码如下:

void CGLEdit::DrawEdit()
{
glColor3f(0, 0, 0);
static BITMAP bmp = GetBmp(L"B.bmp");
static GLuint texid;

glGenTextures(1, &texid);
glBindTexture(GL_TEXTURE_2D, texid);
glTexImage2D(GL_TEXTURE_2D, 0, 3, bmp.bmWidth, bmp.bmHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, bmp.bmBits);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);//这个注释了或者改成GL_REPLACE也没用

glEnable(GL_TEXTURE_2D);
glDisable(GL_DEPTH_TEST);
glDisable(GL_LIGHT0);
glEnable(GL_COLOR_MATERIAL);
glBindTexture(GL_TEXTURE_2D, texid);
glColor4f(1, 1, 1, 1);
glBegin(GL_QUADS);
glNormal3d(0.0,0.0,1.0);
glTexCoord2d(0.0, 0.0); glVertex3d(-HalfPanelWidth,-HalfPanelWidth, 0.0);
glTexCoord2d(1.0, 0.0); glVertex3d( HalfPanelWidth,-HalfPanelWidth, 0.0);
glTexCoord2d(1.0, 1.0); glVertex3d( HalfPanelWidth, HalfPanelWidth, 0.0);
glTexCoord2d(0.0, 1.0); glVertex3d(-HalfPanelWidth, HalfPanelWidth, 0.0);
glEnd();

glDisable(GL_TEXTURE_2D);


glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHT0);
glColor4f(0, 0, 1, 1);

glBegin(GL_QUADS);//为了测试环境,画了一个蓝色的方块
glNormal3d(0.0,0.0,1.0);
glVertex3d(-HalfPanelWidth/2.0,-HalfPanelWidth/2.0, 0.1); //HalfPanelWidth和HalfPanelWidth是绘图区的半长和半宽
glVertex3d( HalfPanelWidth/2.0,-HalfPanelWidth/2.0, 0.1);
glVertex3d( HalfPanelWidth/2.0, HalfPanelWidth/2.0, 0.1);
glVertex3d(-HalfPanelWidth/2.0, HalfPanelWidth/2.0, 0.1);
glEnd();
}
BITMAP CGLEdit::GetBmp(LPCTSTR title)
{
static HBITMAP hbmp = 0;
hbmp = (HBITMAP)::LoadImage(GetModuleHandle(0), title, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE);
static BITMAP bmp = { 0 };
GetObject(hbmp, sizeof(BITMAP), &bmp);
return bmp;
}


这段代码是照搬 http://bbs.csdn.net/topics/390870410改了一下尺寸,HalfPanelWidth和HalfPanelWidth控件的半长和半宽
运行结果却如下:

我想达到的效果是背景上的红线应该是要在蓝色方块哪儿才被遮住。
现在看opengl环境肯定没问题,蓝色块儿也显示出来了,可纹理没有。
麻烦大家教教我,这段怎么改。抠出来的图肯定是没问题的,保存在B.bmp中
...全文

相关推荐

OpenGL纹理映射核心课:从旋转立方体示例到固定管线迁移

纹理映射是三维图形渲染中连接二维图像与三维表面的核心技术,通过为每个顶点指定纹理坐标,将位图采样到模型表面,极大提升视觉真实感。其核心原理涉及纹理对象管理、像素对齐、过滤与环绕参数设置,理解这些对掌握OpenGL固定管线乃至现代渲染管线都至关重要。该技术广泛应用于游戏开发、科学可视化和CAD领域,是GPU高效处理图像数据的基础能力。本文从一个VC6.0时代的MFC工程出发,拆解一个旋转纹理立方体的完整实现,涵盖glGenTextures、glTexImage2D、纹理坐标布局以及固定管线下的动画驱动方式,并

鄂奎阿

基于VC+OpenGL的飞行模拟器仪表控件开发实践

图形渲染是构建工业仿真界面的核心技术,其中OpenGL凭借跨平台与硬件加速特性,成为实现高帧率仪表显示的主流方案。在航空仿真领域,飞行模拟器对仪表的实时性与精度要求严苛,传统GDI难以兼顾旋转平滑与抗锯齿,而OpenGL通过双缓冲、纹理字体及3D变换可有效解决。本文以VC++与MFC环境为背景,探讨飞机仪表控件从架构设计到渲染优化的完整路径,涵盖空速表、姿态仪的实现细节与性能调优,并分享像素格式设置、多窗口共享资源等工程踩坑经验,为航空电子显示、车载HMI等场景提供参考。

weixin_34259232

OpenGL与GDI混合编程:Visual C++图形绘制实战解析

在Windows图形编程中,GDI与OpenGL分别代表了CPU软绘制与GPU硬件加速两条技术路径。GDI擅长线条、文字等基础2D绘制,而OpenGL通过渲染管线和着色器实现复杂3D场景与高效图形输出。理解二者在像素格式、渲染上下文、双缓冲交换等底层机制上的差异,是构建混合渲染架构的关键。实际桌面应用中,常以GDI实现HUD、坐标轴等覆盖层,用OpenGL承载主场景渲染,兼顾开发效率与性能表现。本文以“OpenGL-Drawing.rar”示例工程为切入点,从工程配置、固定管线代码拆解到glUniformM

weixin_34356555

OpenGL 3D教室场景漫游实战:从环境配置到第一人称相机控制

从计算机图形学基础概念出发,介绍如何利用OpenGL和GLFW构建一个可交互的3D教室场景。先阐明OpenGL渲染管线与顶点缓冲的工作原理,再讲解如何通过几何体建模、光照材质实现逼真的教室环境,最后聚焦第一人称相机控制、碰撞边界与深度测试等工程实践。这类项目能帮助开发者巩固矩阵变换、着色器编程和帧率控制等技术,广泛应用于课程设计、虚拟仿真和交互展示场景。以教室漫游为例,完整演示从空窗口到可自由行走场景的实现过程。

propsX

OpenGL行走地图开发实战:现代管线第一人称相机与地形渲染

实时三维图形程序设计中,场景漫游与地图渲染是两类基础且高频的需求。其实现核心依赖视图矩阵实现相机坐标变换,借助顶点缓冲与着色器完成网格绘制与像素着色。理解从固定管线到现代核心模式的演进,能有效规避平台兼容问题,并让开发者掌握可扩展的渲染流程。在工程实践中,GLFW窗口管理、GLAD函数加载、VAO/VBO数据组织、纹理映射以及第一人称输入响应,构成一套完整可复现的地形漫游闭环。无论是游戏原型、虚拟展厅还是教学示例,掌握“OpenGL行走”和“OpenGL地图”的开发范式都能显著降低上手成本。围绕这两个具体需

鄂奎阿
评论 7
收藏 已收藏
分享
返回顶部
richiexieqing
图形处理/算法 19,463 成员 50,678 内容