OpenGL选择和拾取3D模型


使用OpenGL实现拾取和选择obj模型,开发环境为qt5.2.0,但是核心代码部分都有注释,可以移植到MFC等。另外,下载完成后请先阅读readme.txt,希望大家批评指正。因为是自己花时间完成的,所以需要一点辛苦费,希望大家谅解~
资源截图
代码片段和文件信息
/*
 *   Coder:Liew Dennis
 *   Northwest A&F University 的普通985院校的本科生
 *   完成时间: 2016/12/13
 *
 *   希望批评指正。
 *            : (CSDN博客:Mahabharata_)
 *
 *
*/

// 使用说明: 涉及到路径问题,请自行修改“17-31行“的“路径“字符串。

#include “glwidget.h“

// 资源文件路径: obj/mtl/png
char terrainFile[100] = “C:/Qt/Qt5.2.0/Tools/QtCreator/bin/GameTest/DATA/land.jpg“;
char texturePath[3][100]={
    “C:/Qt/Qt5.2.0/Tools/QtCreator/bin/GameTest/DATA/ali/ali_skin.png“
    “C:/Qt/Qt5.2.0/Tools/QtCreator/bin/GameTest/DATA/zinderla/Zdl.png“
    “C:/Qt/Qt5.2.0/Tools/QtCreator/bin/GameTest/DATA/Krista/Krsta.png“};

char mtlPath[3][100]={
    “C:/Qt/Qt5.2.0/Tools/QtCreator/bin/GameTest/DATA/ali/ali.mtl“
    “C:/Qt/Qt5.2.0/Tools/QtCreator/bin/GameTest/DATA/zinderla/Zdl.mtl“
    “C:/Qt/Qt5.2.0/Tools/QtCreator/bin/GameTest/DATA/Krista/Krsta.mtl“};

char objPath[3][100]={
    “C:/Qt/Qt5.2.0/Tools/QtCreator/bin/GameTest/DATA/ali/ali.obj“
    “C:/Qt/Qt5.2.0/Tools/QtCreator/bin/GameTest/DATA/zinderla/Zdl.obj“
    “C:/Qt/Qt5.2.0/Tools/QtCreator/bin/GameTest/DATA/Krista/Krsta.obj“};

double NPCposition[3][3] = {5054020054250-10054-350};

GLWidget::GLWidget(QWidget* parent):QGLWidget(parent)
{
    _verticalAngle = 0.0f;
    _horizonAngle = 0.0f;
    _scale = 1.0f;
    _state = GLWidget::HANG;

    _centerPos[0] = _centerPos[1] = _centerPos[2] =0.0f;
}

void GLWidget::loadTexture(QString filepath GLuint *texture)
{
    QImage tex buf;

    if(!buf.load(filepath))
    {
        printf(“error: failed to load image!“);
        exit(1);
    }

    tex = convertToGLFormat(buf);
    glGenTextures(1 texture);

    glBindTexture(GL_TEXTURE_2D *texture);
    gluBuild2DMipmaps(GL_TEXTURE_2D GL_RGBA tex.width() tex.height() GL_RGBA GL_UNSIGNED_BYTE tex.bits());
    glTexParameteri(GL_TEXTURE_2D GL_TEXTURE_MIN_FILTER GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D GL_TEXTURE_MAG_FILTER GL_NEAREST);
}

void GLWidget::initializeGL()
{
    glClearColor(0.50.50.50.0);
    glShadeModel(GL_SMOOTH);

    //create light
    GLfloat light_ambient [4] = {0.50.50.51.0};
    GLfloat light_diffuse [4] = {1.01.01.01.0};
    GLfloat light_specular[4] = {0.00.00.01.0};
    GLfloat light_position[4] = {1.01.01.00.0};

    glLightfv(GL_LIGHT0 GL_AMBIENT light_ambient);
    glLightfv(GL_LIGHT0 GL_DIFFUSE light_diffuse);
    glLightfv(GL_LIGHT0 GL_SPECULARlight_specular);
    glLightfv(GL_LIGHT0 GL_POSITIONlight_position);

    GLfloat mat_ambient[] = { 0.192250 0.192250 0.192250 1.000000};
    GLfloat mat_diffuse[] = { 0.507540 0.507540 0.507540 1.000000};
    GLfloat mat_specular[] = { 0.508273 0.508273 0.508273 1.000000 };
    GLfloat mat_shininess[] = { 51.200001};


    glMaterialfv(GL_FRONT GL_AMBIENT mat_ambient);
    glMaterialfv(GL_FRONT GL_DIFFUSE mat_diffuse);
    glMaterialfv(GL_FRONT GL_SPECULAR mat_specular);
    glMaterialfv(GL_FRONT GL_SHININESS mat_shininess);

    glEnab

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-12-13 12:24  拾取与选择
     文件         472  2016-12-13 12:23  拾取与选择
eadme.txt
     目录           0  2016-12-13 12:19  拾取与选择代码
     目录           0  2016-12-13 12:19  拾取与选择代码GameTest
     目录           0  2016-12-13 12:19  拾取与选择代码GameTestDATA
     目录           0  2016-12-13 12:19  拾取与选择代码GameTestDATAKrista
     文件         116  2016-11-30 21:28  拾取与选择代码GameTestDATAKristaKrsta.mtl
     文件      327381  2016-11-30 21:12  拾取与选择代码GameTestDATAKristaKrsta.obj
     文件      273496  2016-11-30 21:27  拾取与选择代码GameTestDATAKristaKrsta.png
     目录           0  2016-12-13 12:19  拾取与选择代码GameTestDATAali
     文件         114  2016-11-29 20:16  拾取与选择代码GameTestDATAaliali.mtl
     文件      922752  2016-11-29 20:13  拾取与选择代码GameTestDATAaliali.obj
     文件      202683  2016-11-29 20:13  拾取与选择代码GameTestDATAaliali_skin.png
     文件        8295  2016-11-29 21:07  拾取与选择代码GameTestDATAland.jpg
     文件      309628  2016-11-29 21:00  拾取与选择代码GameTestDATAland1.jpg
     目录           0  2016-12-13 12:19  拾取与选择代码GameTestDATAzinderla
     文件         112  2016-11-30 21:28  拾取与选择代码GameTestDATAzinderladl.mtl
     文件     1107158  2016-11-30 21:12  拾取与选择代码GameTestDATAzinderladl.obj
     文件      169547  2016-11-30 21:20  拾取与选择代码GameTestDATAzinderladl.png
     文件         539  2016-11-30 20:16  拾取与选择代码GameTestGameTest.pro
     文件       18069  2016-12-13 12:19  拾取与选择代码GameTestGameTest.pro.user
     文件        7992  2016-12-13 12:18  拾取与选择代码GameTestglwidget.cpp
     文件        1241  2016-11-30 21:41  拾取与选择代码GameTestglwidget.h
     文件         183  2016-11-29 12:49  拾取与选择代码GameTestmain.cpp
     文件         455  2016-12-13 12:09  拾取与选择代码GameTestmainwindow.cpp
     文件         447  2016-11-29 13:05  拾取与选择代码GameTestmainwindow.h
     文件         654  2016-11-29 12:49  拾取与选择代码GameTestmainwindow.ui
     文件         117  2016-11-30 17:41  拾取与选择代码GameTestmatrix.cpp
     文件         262  2016-11-30 17:40  拾取与选择代码GameTestmatrix.h
     文件         898  2016-11-30 21:10  拾取与选择代码GameTest
pc.cpp
     文件         321  2016-11-30 20:56  拾取与选择代码GameTest
pc.h
............此处省略66个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)