OpenGL一个室内三维渲染OBJ文件导入和贴图


视角可移动,旋转的房间简单三维场景,有灯光,有阴影,导入OBJ文件,有纹理贴图,对于初学者还是比较好的,简单易懂
资源截图
代码片段和文件信息

#include “stdafx.h“
#include
#include
#include 

#include
#include
#include

#include
#include 
// Include GLM
#include 
#include 
#include

using namespace std;

static double seex=0.0;
static double seey=-20.0;
static double seez=50.0;

static double atx=0.0;
static double aty=-20.0;
static double atz=40.0;
static double angle1=0.0;
static double angle2=0.0;
static double dzx=0.0;
static double dzy=0.0;

const double Pi=3.141592653589793;
static double d=10;

GLuint texture[6];  //为纹理分配空间



vector vertices;  
vector uvs;  
vector normals;  
int nodesSize;
bool loadOBJ(
        const char * path
        std::vector & out_vertices
        std::vector & out_uvs
        std::vector & out_normals
){
        printf(“Loading OBJ file %s...
“ path);

        std::vector vertexIndices uvIndices normalIndices;
        std::vector temp_vertices;
        std::vector temp_uvs;
        std::vector temp_normals;


        FILE * file ;
errno_t err;
err= fopen_s(&filepath “r“);
        if( file == NULL ){
                printf(“Impossible to open the file ! Are you in the right path ? See Tutorial 1 for details
“);
                return false;
        }
 printf(“Loading OBJ file %s...
“ path);
        while( 1 ){

                char lineHeader[128];

                // read the first word of the line
                int res = fscanf_s(file “%s“ lineHeadersizeof(128));

                if (res == EOF)

                        break; // EOF = End Of File. Quit the loop.

                // else : parse lineHeader
 
                if ( strcmp( lineHeader “v“ ) == 0 ){
                    //cout<<“Get v“<                        glm::vec3 vertex;
                        fscanf_s(file “%f %f %f
“ &vertex.x &vertex.y &vertex.z );
                        temp_vertices.push_back(vertex);
                }else if ( strcmp( lineHeader “vt“ ) == 0 ){
                    //cout<<“Get vt“<                        glm::vec2 uv;
                        fscanf_s(file “%f %f
“ &uv.x &uv.y );
                        uv.y = -uv.y; // Invert V coordinate since we will only use DDS texture which are inverted. Remove if you want to use TGA or BMP loaders.
                        temp_uvs.push_back(uv);
                }else if ( strcmp( lineHeader “vn“ ) == 0 ){
                    //cout<<“Get vn“<                        glm::vec3 normal;
                        fscanf_s(file “%f %f %f
“ &normal.x &normal.y &normal.z );
                        temp_normals.push_back(normal);
                }else if ( strcmp( lineHeader “f“ ) == 0 ){
                    //cout<<“Get 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2015-02-12 10:11  Sence1
     目录           0  2015-02-12 10:06  Sence1Debug
     文件      184320  2015-02-12 10:07  Sence1DebugSence1.exe
     文件     1004612  2015-02-12 10:07  Sence1DebugSence1.ilk
     文件     3697664  2015-02-12 10:07  Sence1DebugSence1.pdb
     目录           0  2015-02-11 14:50  Sence1Sence1
     目录           0  2015-02-12 10:07  Sence1Sence1Debug
     文件       38060  2015-02-12 10:07  Sence1Sence1DebugCL.read.1.tlog
     文件        1154  2015-02-12 10:07  Sence1Sence1DebugCL.write.1.tlog
     文件          92  2015-02-12 10:07  Sence1Sence1DebugSence1.lastbuildstate
     文件        1443  2015-02-12 10:07  Sence1Sence1DebugSence1.log
     文件      623564  2015-02-12 10:07  Sence1Sence1DebugSence1.obj
     文件     1179648  2015-02-11 23:51  Sence1Sence1DebugSence1.pch
     文件        3010  2015-02-12 10:07  Sence1Sence1Debugcl.command.1.tlog
     文件           2  2015-02-12 10:07  Sence1Sence1Debuglink-cvtres.read.1.tlog
     文件           2  2015-02-12 10:07  Sence1Sence1Debuglink-cvtres.write.1.tlog
     文件           2  2015-02-12 10:07  Sence1Sence1Debuglink-rc.read.1.tlog
     文件           2  2015-02-12 10:07  Sence1Sence1Debuglink-rc.write.1.tlog
     文件           2  2015-02-12 10:07  Sence1Sence1Debuglink.10060-cvtres.read.1.tlog
     文件           2  2015-02-12 10:07  Sence1Sence1Debuglink.10060-cvtres.write.1.tlog
     文件           2  2015-02-12 10:07  Sence1Sence1Debuglink.10060-rc.read.1.tlog
     文件           2  2015-02-12 10:07  Sence1Sence1Debuglink.10060-rc.write.1.tlog
     文件           2  2015-02-12 10:07  Sence1Sence1Debuglink.10060.read.1.tlog
     文件           2  2015-02-12 10:07  Sence1Sence1Debuglink.10060.write.1.tlog
     文件           2  2015-02-12 10:07  Sence1Sence1Debuglink.10584-cvtres.read.1.tlog
     文件           2  2015-02-12 10:07  Sence1Sence1Debuglink.10584-cvtres.write.1.tlog
     文件           2  2015-02-12 10:07  Sence1Sence1Debuglink.10584-rc.read.1.tlog
     文件           2  2015-02-12 10:07  Sence1Sence1Debuglink.10584-rc.write.1.tlog
     文件           2  2015-02-12 10:07  Sence1Sence1Debuglink.10584.read.1.tlog
     文件           2  2015-02-12 10:07  Sence1Sence1Debuglink.10584.write.1.tlog
     文件           2  2015-02-12 10:07  Sence1Sence1Debuglink.11120-cvtres.read.1.tlog
............此处省略93个文件信息

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

发表评论

评论列表(条)