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数据的话,可以省大约一半的内存.
4. introducing POD
最新推荐文章于 2022-02-11 12:27:22 发布