openGL三维网格坐标,旋转,缩放,灯光设置,纹理读取,模型读取(MFC单文档)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
openGL三维网格坐标,旋转,缩放,灯光设置,纹理读取,模型读取(MFC
单文档)
在我的MFC单文档项目中enableview.h和enableview.cpp负责上面的窗口建立,myopenglview.h和myopenglView.cpp主要是功能的实现
1.三维网格建立:
void GLGrid(float pt1x, float pt1y, float pt1z, float pt2x, float pt2y, float pt2z, int num)
{
const float _xLen = (pt2x - pt1x) / num;
const float _yLen = (pt2y - pt1y) / num;
const float _zLen = (pt2z - pt1z) / num; glLineWidth(2.f);
glLineStipple(1, 0x0303);//线条样式
glBegin(GL_LINES);
glEnable(GL_LINE_SMOOTH);
int xi = 0;
int yi = 0;
int zi = 0;
//绘制平行于X的直线
for (zi = 0; zi <= num; zi++)
{
float z = _zLen * zi + pt1z;
for (yi = 0; yi <= num; yi++)
{
float y = _yLen * yi + pt1y;
glVertex3f(pt1x, y, z);
glVertex3f(pt2x, y, z);
}
}
//绘制平行于Y的直线
for (zi = 0; zi <= num; zi++)
{
float z = _zLen * zi + pt1z;
for (xi = 0; xi <= num; xi++)
{
float x = _xLen * xi + pt1x;
glVertex3f(x, pt1y, z);
glVertex3f(x, pt2y, z);
}
}
//绘制平行于Z的直线
for (yi = 0; yi <= num; yi++)
{
float y = _yLen * yi + pt1y;
for (xi = 0; xi <= num; xi++)
{
float x = _xLen * xi + pt1x;
glVertex3f(x, y, pt1z);
glVertex3f(x, y, pt2z);
}
}
glEnd();
}
void CmyopenglView::ordination() {
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glEnable(GL_POINT_SMOOTH); //设置反走样
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST); //设置反走样glEnable(GL_LINE_SMOOTH);
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
glEnable(GL_POL YGON_SMOOTH);
glHint(GL_POL YGON_SMOOTH_HINT, GL_NICEST);
glRotatef(-45, 0.0, 1.0, 0.0);
//网格
glPushMatrix();
glColor3f(0.9f, 0.9f, 0.9f);
glTranslatef(-4, -4, -4);
GLGrid(0,0,0,8,0,8,20);
glPopMatrix();
glPushMatrix();
glTranslated(-4,4, -4);
glRotatef(90, 1.0, 0.0, 0.0);
glColor3f(0.9f, 0.9f, 0.0f);
GLGrid(0, 0, 0, 8, 0, 8, 20);
glPopMatrix();
glPushMatrix();
glTranslatef(-4, -4, -4);
glRotatef(90, 0.0, 0.0, 1.0);
glColor3f(0.0f, 0.9f, 0.0f);
GLGrid(0, 0, 0, 8, 0, 8, 20);
glPopMatrix();
glDisable(GL_BLEND);
glDisable(GL_LINE_SMOOTH);
glDisable(GL_POINT_SMOOTH);
glDisable(GL_POL YGON_SMOOTH);
}
我们在ordination()函数中增加绘制x,y,z坐标的代码
void CmyopenglView::ordination() {
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glEnable(GL_POINT_SMOOTH); //设置反走样
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST); //设置反走样glEnable(GL_LINE_SMOOTH);
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
glEnable(GL_POL YGON_SMOOTH);
glHint(GL_POL YGON_SMOOTH_HINT, GL_NICEST);
glRotatef(-45, 0.0, 1.0, 0.0);
//网格
glPushMatrix();
glColor3f(0.9f, 0.9f, 0.9f);
glTranslatef(-4, -4, -4);
GLGrid(0,0,0,8,0,8,20);
glPopMatrix();
glPushMatrix();
glTranslated(-4,4, -4);
glRotatef(90, 1.0, 0.0, 0.0);
glColor3f(0.9f, 0.9f, 0.0f);
GLGrid(0, 0, 0, 8, 0, 8, 20);
glPopMatrix();
glPushMatrix();
glTranslatef(-4, -4, -4);
glRotatef(90, 0.0, 0.0, 1.0);
glColor3f(0.0f, 0.9f, 0.0f);
GLGrid(0, 0, 0, 8, 0, 8, 20);
glPopMatrix();
//x
//glTranslatef(-2, -2, -2);
glColor3f(1.0f, 0.0f, 0.0f);
glBegin(GL_LINES);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(3.5, 0.0f, 0.0f);