// OpenGLCubeDemoDlg.cpp: 实现文件
//
#include "pch.h"
#include "framework.h"
#include "OpenGLCubeDemo.h"
#include "OpenGLCubeDemoDlg.h"
#include "afxdialogex.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#define STBI_WINDOWS_UTF8
#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"
// COpenGLCubeDemoDlg 对话框
//#define IMAGE_PATH "Dragons.jpg"
#define IMAGE_PATH "dice.png"
COpenGLCubeDemoDlg::COpenGLCubeDemoDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_OPENGLCUBEDEMO_DIALOG, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void COpenGLCubeDemoDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(COpenGLCubeDemoDlg, CDialogEx)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_SIZE()
ON_WM_TIMER()
ON_WM_DESTROY()
END_MESSAGE_MAP()
// COpenGLCubeDemoDlg 消息处理程序
BOOL COpenGLCubeDemoDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
SetWindowText(_T("OpenGL Cube Demo - blog.csdn.net/blackwoodcliff"));
//ShowWindow(SW_MAXIMIZE);
// TODO: 在此添加额外的初始化代码
InitializeOpenGL(this->GetDC()->GetSafeHdc());
ShowWindow(SW_MAXIMIZE);
m_glTexture = LoadGLTexture();
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
void COpenGLCubeDemoDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
glClearColor(0.0f, 0.05f, 0.15f, 1.0f);
//glClearColor(0.06f, 0.06f, 0.06f, 1.0f);
//glClearColor(0.085f, 0.2f, 0.414f, 1.0f);
//glClearColor(0.1f, 0.1f, 0.1f, 1.0f);
//glClear(GL_COLOR_BUFFER_BIT);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity(); //复位
//DrawRect();
//DrawCube();
//DrawTextureCube();
DrawDice();
glFlush();
SwapBuffers(wglGetCurrentDC());
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR COpenGLCubeDemoDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
bool COpenGLCubeDemoDlg::InitializeOpenGL(HDC hDC)
{
//设置 DC 像素格式
if (false == SetDCPixelFormat(hDC))
{
return false;
}
//创建 RC
HGLRC hRC = wglCreateContext(hDC);
if (hRC == NULL)
{
return false;
}
//为当前线程设置 RC
if (wglMakeCurrent(hDC, hRC) == FALSE)
{
return false;
}
glClearDepth(1.0f);
glEnable(GL_TEXTURE_2D); // Enable Texture Mapping
glEnable(GL_DEPTH_TEST); // Enables Depth Testing
//glEnable(GL_MULTISAMPLE);
glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations
return true;
}
bool COpenGLCubeDemoDlg::SetDCPixelFormat(HDC hDC)
{
static PIXELFORMATDESCRIPTOR pfd =
{
sizeof(PIXELFORMATDESCRIPTOR), //pfd结构的大小
1, //版本号
PFD_DRAW_TO_WINDOW | //支持在窗口中绘图
PFD_SUPPORT_OPENGL | //支持OpenGL
PFD_DOUBLEBUFFER, //支持双缓冲
PFD_TYPE_RGBA, //RGBA颜色模式
32, //32位颜色深度
0, 0, 0, 0, 0, 0, //忽略颜色位
0, //没有非透明度缓存
0, //忽略移位位
0, //无累计缓存
0, 0, 0, 0, //忽略累计位
32, //32位深度缓存
0, //无模板缓存
0, //无辅助缓存
PFD_MAIN_PLANE, //主层
0, //保留
0, 0, 0 //忽略层,可见性和损毁掩模
};
//得到 DC 最匹配的像素格式
int pixelFormat = ChoosePixelFormat(hDC, &pfd);
if (0 == pixelFormat)
{
//如果没有找到,就调用 DescribePixelFormat 函数来选择索引值为 1 的像素格式
pixelFormat = 1;
if (DescribePixelFormat(hDC, pixelFormat, sizeof(PIXELFORMATDESCRIPTOR), &pfd) == 0)
{
MessageBox(_T("ChoosePixelFormat 失败"));
return false;
}
}
//设置 DC 像素格式
if (SetPixelFormat(hDC, pixelFormat, &pfd) == FALSE)
{
MessageBox(_T("SetPixelFormat 失败"));
return false;
}
return true;
}
void COpenGLCubeDemoDlg::DrawRect()
{
//glColor3ub(128, 0, 0);
glColor3ub(96, 0, 0);
glBegin(GL_QUADS);
glVertex2f(-0.5, 0.5); //左上角
glVertex2f(-0.5, -0.5); //左下角
glVertex2f(0.5, -0.5); //右下角
glVertex2f(0.5, 0.5); //右上角
glEnd();
}
void COpenGLCubeDemoDlg::DrawCube()
{
glTranslatef(0.0f, 0.0f, -2.5);
glRotatef(m_rotationX, 1.0f, 0.0f, 0.0f);
glRotatef(m_rotationY, 0.0f, 1.0f, 0.0f);
glBegin(GL_QUADS);
// Front Face
glColor3ub(128, 0, 0); //红
glVertex3f(-0.5f, -0.5f, 0.5f);
glVertex3f(0.5f, -0.5f, 0.5f);
glVertex3f(0.5f, 0.5f, 0.5f);
glVertex3f(-0.5f, 0.5f, 0.5f);
// Back Face
glColor3ub(128, 128, 0); //黄
glVertex3f(-0.5f, -0.5f, -0.5f);
glVertex3f(0.5f, -0.5f, -0.5f);
glVertex3f(0.5f, 0.5f, -0.5f);
glVertex3f(-0.5f, 0.5f, -0.5f);
// Top Face
glColor3ub(0, 0, 128); //蓝
glVertex3f(-0.5f, 0.5f, 0.5f);
glVertex3f(0.5f, 0.5f, 0.5f);
glVertex3f(0.5f, 0.5f, -0.5f);
glVertex3f(-0.5f, 0.5f, -0.5f);
// Bottom Face
glColor3ub(128, 0, 128); //紫
glVertex3f(-0.5f, -0.5f, 0.5f);
glVertex3f(0.5f, -0.5f, 0.5f);
glVertex3f(0.5f, -0.5f, -0.5f);
glVertex3f(-0.5f, -0.5f, -0.5f);
// Left Face
glColor3ub(0, 128, 0); //绿
glVertex3f(-0.5f, -0.5f, -0.5f);
glVertex3f(-0.5f, -0.5f, 0.5f);
glVertex3f(-0.5f, 0.5f, 0.5f);
glVertex3f(-0.5f, 0.5f, -0.5f);
// Right face
glColor3ub(0, 128, 128); //青
glVertex3f(0.5f, -0.5f, 0.5f);
glVertex3f(0.5f, -0.5f, -0.5f);
glVertex3f(0.5f, 0.5f, -0.5f);
glVertex3f(0.5f, 0.5f, 0.5f);
glEnd();
}
void COpenGLCubeDemoDlg::DrawTextureCube()
{
glTranslatef(0.0f, 0.0f, -2.5);
glRotatef(m_rotationX, 1.0f, 0.0f, 0.0f);
glRotatef(m_rotationY, 0.0f, 1.0f, 0.0f);
glBindTexture(GL_TEXTURE_2D, m_glTexture);
glBegin(GL_QUADS);
// Front Face
glNormal3i(0, 0, 1);
glTexCoord2i(0, 0);
glVertex3f(-0.5f, -0.5f, 0.5f);
glTexCoord2i(1, 0);
glVertex3f(0.5f, -0.5f, 0.5f);
glTexCoord2i(1, 1);
glVertex3f(0.5f, 0.5f, 0.5f);
glTexCoord2i(0, 1);
glVertex3f(-0.5f, 0.5f, 0.5f);
// Back Face
glNormal3i(0, 0, -1);
glTexCoord2i(1, 0);
glVertex3f(-0.5f, -0.5f, -0.5f);
glTexCoord2i(0, 0);
glVertex3f(0.5f, -0.5f, -0.5f);
glTexCoord2i(0, 1);
glVertex3f(0.5f, 0.5f, -0.5f);
glTexCoord2i(1, 1);
glVertex3f(-0.5f, 0.5f, -0.5f);
// Top Face
glNormal3i(0, 1, 0);
glTexCoord2i(0, 0);
glVertex3f(-0.5f, 0.5f, 0.5f);
glTexCoord2i(1, 0);
glVertex3f(0.5f, 0.5f, 0.5f);
glTexCoord2i(1, 1);
glVertex3f(0.5f, 0.5f, -0.5f);
glTexCoord2i(0, 1);
glVertex3f(-0.5f, 0.5f, -0.5f);
// Bottom Face
glNormal3i(0, -1, 0);
glTexCoord2i(0, 0);
glVertex3f(-0.5f, -0.5f, 0.5f);
glTexCoord2i(1, 0);
glVertex3f(0.5f, -0.5f, 0.5f);
glTexCoord2i(1, 1);
glVertex3f(0.5f, -0.5f, -0.5f);
glTexCoord2i(0, 1);
glVertex3f(-0.5f, -0.5f, -0.5f);
// Left Face
glNormal3i(-1, 0, 0);
glTexCoord2i(0, 0);
glVertex3f(-0.5f, -0.5f, -0.5f);
glTexCoord2i(1, 0);
glVertex3f(-0.5f, -0.5
blackwood-cliff
- 粉丝: 184
- 资源: 57
最新资源
- 基于模型预测控制的永磁同步电机并网发电控制系统 simulink仿真,效果非常好
- matlab 小波阈值降噪,经典信号分解及降噪程序,模态
- 基于comsol的储层降压开采过程中的渗流-应力耦合算例 提供基于comsol的储层降压开采过程中的渗流-应力耦合算例,可在此基础上熟悉降压开采过程中的渗流-应力耦合计算方法
- 固高运动控制卡GTS400系列用C#语言写的二轴取放料学习模板,扩展性强,轴参数,登录界面,轴点位数据都用INI配置文件保存读取,是学习用C#运动控制的好案例,代码有注释,便于理解吸收, 录制的,超级
- 深度神经网络(DNN)做多特征输入单输出的二分类及多分类模型 程序内注释详细,直接替数据就可以用 程序语言为matlab 程序可出分类效果图,迭代优化图,混淆矩阵图具体效果如下所示 PS:以
- 永磁同步电机PMSM的MTPA+弱磁控制 包含参考资料,搭建步骤
- 自动驾驶基于阿克曼模型的控制算法仿真测试 , 基于ROS扣取单独的阿克曼控制算法模块进行测试,能够帮助朋友们学习基于阿克曼模型的控制算法实现以及对该控制算法的理解 阿克曼实现部分带有代码注释,帮助您
- 汇川H5U系列PLC程序 汇川H5U PLC程序,搭配汇川伺服驱动器,运动控制总线轴运动 PLC程序+昆仑通态触摸屏程序 ,模板程序,高端大气上档次UI设计,工控模板 优秀的触摸屏模板
- MATLAB对矩阵数据输出二维图和三维图m文件源码资料包 便于目视判读
- SiC MOSFET碳化硅MOS管驱动电路设计与Pspice仿真(基于同步整流电路,具有防直通互锁、米勒钳位、短路电流保护、负压关断等功能) 原理图和pcb满足减少寄生电感等优化布局,还有buck、
- matlab simulink光伏储能并网交直流发电系统仿真模型,2018a版本,2021a版本 1)光伏采用扰动观察法最大功率跟踪 2)蓄电池为双向DC-DC变器,采用电压环和电流环控制的双闭环控制
- 遗传算法优化用于分类 回归 时序预测 遗传算法优化支持向量机SVM,最小二乘支持向量机LSSVM,随机森林RF,极限学习机ELM,核极限学习机KELM,深度极限学习机DELM,BP神经网络,长短时记忆
- MATLAB代码:基于主从博弈理论的共享储能与综合能源微网优化运行研究 关键词:主从博弈 共享储能 综合能源微网 优化调度 参考文档:《基于主从博弈理论的共享储能与综合能源微网优化运行研究》完全复现
- ZZU物联网工程专业数据结构相关整合
- MATLAB代码:基于遗传算法的电动汽车有序充放电优化 关键词:遗传算法 电动汽车 有序充电 优化调度 参考文档:《精英自适应混合遗传算法及其实现-江建》算法部分;电动汽车建模部分相关文档太多,自
- MATLAB代码:基于储能电站服务的冷热电多微网系统双层优化配置 关键词:储能电站 共享储能电站 冷热电多微网 双层优化配置 参考文档:《基于储能电站服务的冷热电多微网系统双层优化配置》完全复
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈