openGL三维网格坐标,旋转,缩放,灯光设置,纹理读取,模型读取(MFC单文档)

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

相关文档
最新文档