4. introducing POD

本文详细介绍了3D场景的加载与渲染过程,包括初始化应用程序、视图、纹理、着色器及顶点缓冲对象等内容。此外还解析了POD文件格式,描述了节点、网格节点与网格之间的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

InitApplication:
PVRTModelPod mScene.ReadFromFile()

InitView:
LoadVbos()
LoadTextures()
LoadShaders()
Print3D.SetTextures(0,PVRShellGet(prefWidth),PVRShellGet(prefHeight), bRotate)

RenderScene:
get light direction;
get camera info;
for each mesh node:
{
    calc the MVPMatrix;
    calc the light dir;
    bind texture;
    DrawMesh()
    {
        bindbuffer
        enableVertexAttrib Vertex/normal/texcoord
        drawArray/drawElement
    }   
}

loadTexture:
for each material
{
    PVRTTextureLoadFromPVR(textureName, textureID);
}

load shader:
{
    PVRTShaderLoadFromFile( c_szVertShaderBinFile, c_szVertShaderSrcFile )
    PVRTShaderLoadFromFile( c_szFragShaderBinFile, c_szFragShaderSrcFile )
    PVRTCreateProgram
}

loadVbos
{
    for num mesh
    {
        unsigned int uiSize = Mesh.nNumVertex * Mesh.sVertex.nStride;
        glBindBuffer(GL_ARRAY_BUFFER, m_puiVbo[i]);
        glBufferData(GL_ARRAY_BUFFER, uiSize, Mesh.pInterleaved, GL_STATIC_DRAW);
    }
}


POD::ReadFromFile()

POD文件格式:
File version, len
version string (11 bytes)
file exp opt, len (0x409 bytes useless)
file scene
{
    bgcolournum
    colour
    unknown
    ambientnum
    ambient
    unknown
    numcamera
    cameranum
    unknown
    numlight
    lightnum
    unknown
    nummesh
    meshnum
    unknown
    numnode
    nodenum
    unknown
    nummeshnode
    meshnodenum
    unknown
    numtexture
    texturenum
    unknown
    nummaterial
    materialnum
    unknown
    numframe
    framenum
    un
    fileflag
    flagnum
    un
    filecamera
    camera
    un
    filelight
    light
    un
    filematerial
    material
    un
    filemesh
    ...
    node
    ...
    texture
    ...
}


node、meshnode、mesh之间的关系:
mesh是一些顶点的集合
meshnode引用一个mesh,不同meshnode可以引用同一个mesh,只是attribute不同
node可以是Camera, light,或者meshnode

在创建Vbos buffer的时候,按mesh的数量来
在绘制的时候,按照meshnode的数量来,meshnode可以用同一个mesh(指明它的meshindex),只是pos/dir等attributes不同
meshnode还有material的说明

关于camera,里面有pos, lookat, fov, 还能在动画帧中设置动态的fov
关于light,有pos, dir,type, colour,pos和dir是根据node的matrix得出来的(light是一个node)
关于material,它里面可以有最多一个texture,绘制的时候,meshnode(是一个node)根据它的material得出texture id.它可以包含diffuse/specular/bumpmap/reflection/refraction等多达10个texture,不过不知道可不可用。另外就是常规的ambient/diffuse/specular属性了。
关于mesh,里面有基本的vertex, normal, uv, Vtxcolour, 还有bone(以后再说)
关于node,里面有动画信息,包含了pos/rot/scale, 分别占用3/4/7个float,如果不用scale数据的话,可以省大约一半的内存.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值