mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-03-30 11:06:43 +00:00
Cleaned up nifogre tests
This commit is contained in:
parent
aeec73806d
commit
04d1fae5d4
9 changed files with 198 additions and 235 deletions
|
@ -74,11 +74,10 @@ struct Node : Named
|
||||||
// Bone weight info, from NiSkinData
|
// Bone weight info, from NiSkinData
|
||||||
const NiSkinData::BoneInfo *boneInfo;
|
const NiSkinData::BoneInfo *boneInfo;
|
||||||
|
|
||||||
// Bone index. If -1, this node is either not a bone, or the root
|
// Bone index. If -1, this node is either not a bone, or if
|
||||||
// bone in the skeleton.
|
// boneTrafo is set it is the root bone in the skeleton.
|
||||||
short boneIndex;
|
short boneIndex;
|
||||||
|
|
||||||
// Make this the root animation bone
|
|
||||||
void makeRootBone(const NiSkinData::BoneTrafo *tr)
|
void makeRootBone(const NiSkinData::BoneTrafo *tr)
|
||||||
{
|
{
|
||||||
boneTrafo = tr;
|
boneTrafo = tr;
|
||||||
|
|
|
@ -41,8 +41,6 @@ using namespace Ogre;
|
||||||
using namespace Nif;
|
using namespace Nif;
|
||||||
using namespace Mangle::VFS;
|
using namespace Mangle::VFS;
|
||||||
|
|
||||||
#define TRANSLATE 1
|
|
||||||
|
|
||||||
// This is the interface to the Ogre resource system. It allows us to
|
// This is the interface to the Ogre resource system. It allows us to
|
||||||
// load NIFs from BSAs, in the file system and in any other place we
|
// load NIFs from BSAs, in the file system and in any other place we
|
||||||
// tell Ogre to look (eg. in zip or rar files.) It's also used to
|
// tell Ogre to look (eg. in zip or rar files.) It's also used to
|
||||||
|
@ -395,7 +393,6 @@ static void handleNiTriShape(Mesh *mesh, NiTriShape *shape, int flags)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(TRANSLATE) // TODO FIXME TEMP
|
|
||||||
{
|
{
|
||||||
/* Do in-place transformation of all the vertices and normals. This
|
/* Do in-place transformation of all the vertices and normals. This
|
||||||
is pretty messy stuff, but we need it to make the sub-meshes
|
is pretty messy stuff, but we need it to make the sub-meshes
|
||||||
|
@ -467,7 +464,6 @@ static void handleNode(Mesh* mesh, Nif::Node *node, int flags, const Transformat
|
||||||
|
|
||||||
// Apply the parent transformation to this node. We overwrite the
|
// Apply the parent transformation to this node. We overwrite the
|
||||||
// existing data with the final transformation.
|
// existing data with the final transformation.
|
||||||
if(TRANSLATE) // TODO FIXME TEMP
|
|
||||||
if(trafo)
|
if(trafo)
|
||||||
{
|
{
|
||||||
// Get a non-const reference to the node's data, since we're
|
// Get a non-const reference to the node's data, since we're
|
||||||
|
|
|
@ -38,7 +38,9 @@
|
||||||
NIFLoader::load("somemesh.nif");
|
NIFLoader::load("somemesh.nif");
|
||||||
|
|
||||||
Afterwards, you can use the mesh name "somemesh.nif" normally to
|
Afterwards, you can use the mesh name "somemesh.nif" normally to
|
||||||
create entities etc.
|
create entities and so on. The mesh isn't loaded from disk until
|
||||||
|
OGRE needs it for rendering. Thus the above load() command is not
|
||||||
|
very resource intensive.
|
||||||
*/
|
*/
|
||||||
struct NIFLoader : Ogre::ManualResourceLoader
|
struct NIFLoader : Ogre::ManualResourceLoader
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
GCC=g++
|
GCC=g++
|
||||||
|
|
||||||
all: ogre_manualresource_test ogre_nif_test
|
all: ogre_manualresource_test ogre_nif_test ogre_skeleton_test
|
||||||
|
|
||||||
I_OGRE=$(shell pkg-config --cflags OGRE)
|
I_OGRE=$(shell pkg-config --cflags OGRE)
|
||||||
L_OGRE=$(shell pkg-config --libs OGRE)
|
L_OGRE=$(shell pkg-config --libs OGRE)
|
||||||
|
@ -8,6 +8,9 @@ L_OGRE=$(shell pkg-config --libs OGRE)
|
||||||
ogre_manualresource_test: ogre_manualresource_test.cpp
|
ogre_manualresource_test: ogre_manualresource_test.cpp
|
||||||
$(GCC) $^ -o $@ $(I_OGRE) $(L_OGRE)
|
$(GCC) $^ -o $@ $(I_OGRE) $(L_OGRE)
|
||||||
|
|
||||||
|
ogre_skeleton_test: ogre_skeleton_test.cpp
|
||||||
|
$(GCC) $^ -o $@ $(I_OGRE) $(L_OGRE)
|
||||||
|
|
||||||
ogre_nif_test: ogre_nif_test.cpp ../../nif/nif_file.cpp ../../bsa/bsa_file.cpp ../../bsa/bsa_archive.cpp ../../tools/stringops.cpp ../../mangle/vfs/servers/ogre_vfs.cpp ../ogre_nif_loader.cpp
|
ogre_nif_test: ogre_nif_test.cpp ../../nif/nif_file.cpp ../../bsa/bsa_file.cpp ../../bsa/bsa_archive.cpp ../../tools/stringops.cpp ../../mangle/vfs/servers/ogre_vfs.cpp ../ogre_nif_loader.cpp
|
||||||
$(GCC) $^ -o $@ $(I_OGRE) $(L_OGRE)
|
$(GCC) $^ -o $@ $(I_OGRE) $(L_OGRE)
|
||||||
|
|
||||||
|
|
98
nifogre/tests/ogre_common.cpp
Normal file
98
nifogre/tests/ogre_common.cpp
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
#include <Ogre.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
using namespace Ogre;
|
||||||
|
|
||||||
|
Root *root;
|
||||||
|
RenderWindow *window;
|
||||||
|
SceneManager *mgr;
|
||||||
|
|
||||||
|
int shot = 0;
|
||||||
|
|
||||||
|
// Lets you quit by closing the window
|
||||||
|
struct QuitListener : FrameListener
|
||||||
|
{
|
||||||
|
bool frameStarted(const FrameEvent& evt)
|
||||||
|
{
|
||||||
|
#ifdef SCREENSHOT
|
||||||
|
if(shot == 1) window->writeContentsToFile("nif.png");
|
||||||
|
if(shot < 2) shot++;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if(window->isClosed())
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} qlistener;
|
||||||
|
|
||||||
|
// This has to be packaged in a struct because C++ sucks
|
||||||
|
struct C
|
||||||
|
{
|
||||||
|
static void doTest();
|
||||||
|
};
|
||||||
|
|
||||||
|
int main(int argc, char**args)
|
||||||
|
{
|
||||||
|
// Disable Ogre logging
|
||||||
|
new LogManager;
|
||||||
|
Log *log = LogManager::getSingleton().createLog("");
|
||||||
|
log->setDebugOutputEnabled(false);
|
||||||
|
|
||||||
|
// Set up Root.
|
||||||
|
root = new Root("plugins.cfg","ogre.cfg","");
|
||||||
|
|
||||||
|
if(!root->restoreConfig())
|
||||||
|
{
|
||||||
|
cout << "WARNING: we do NOT recommend fullscreen mode!\n";
|
||||||
|
if(!root->showConfigDialog())
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
mgr = root->createSceneManager(ST_GENERIC);
|
||||||
|
|
||||||
|
// Only render if there are arguments on the command line (we don't
|
||||||
|
// care what they are.)
|
||||||
|
bool render = (argc>=2);
|
||||||
|
|
||||||
|
// Create a window
|
||||||
|
window = root->initialise(true, "Test");
|
||||||
|
if(render)
|
||||||
|
{
|
||||||
|
// More initialization
|
||||||
|
Camera *cam = mgr->createCamera("cam");
|
||||||
|
Viewport *vp = window->addViewport(cam);
|
||||||
|
cam->setAspectRatio(Real(vp->getActualWidth()) / Real(vp->getActualHeight()));
|
||||||
|
cam->setFOVy(Degree(55));
|
||||||
|
cam->setPosition(0,0,0);
|
||||||
|
cam->lookAt(0,0,10);
|
||||||
|
cam->setNearClipDistance(1);
|
||||||
|
|
||||||
|
root->addFrameListener(&qlistener);
|
||||||
|
|
||||||
|
// Background color
|
||||||
|
vp->setBackgroundColour(ColourValue(0.5,0.5,0.5));
|
||||||
|
|
||||||
|
mgr->setAmbientLight(ColourValue(1,1,1));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run the actual test
|
||||||
|
C::doTest();
|
||||||
|
|
||||||
|
// Render loop
|
||||||
|
if(render)
|
||||||
|
{
|
||||||
|
cout << "Rendering. Close the window to exit.\n";
|
||||||
|
root->startRendering();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cleanup
|
||||||
|
delete root;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void doTest()
|
||||||
|
{
|
||||||
|
cout << "hello\n";
|
||||||
|
}
|
|
@ -1,7 +1,3 @@
|
||||||
#include <Ogre.h>
|
|
||||||
#include <iostream>
|
|
||||||
#include <assert.h>
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This is a test of the manual resource loader interface to Ogre,
|
This is a test of the manual resource loader interface to Ogre,
|
||||||
applied to manually created meshes. It defines a simple mesh
|
applied to manually created meshes. It defines a simple mesh
|
||||||
|
@ -12,139 +8,14 @@
|
||||||
loader.
|
loader.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using namespace std;
|
#include "ogre_mesh_common.cpp"
|
||||||
using namespace Ogre;
|
|
||||||
|
|
||||||
struct MyMeshLoader : ManualResourceLoader
|
void C::doTest()
|
||||||
{
|
{
|
||||||
void loadResource(Resource *resource)
|
|
||||||
{
|
|
||||||
Mesh *mesh = dynamic_cast<Mesh*>(resource);
|
|
||||||
assert(mesh);
|
|
||||||
|
|
||||||
const String& name = mesh->getName();
|
|
||||||
cout << "Manually loading mesh " << name << endl;
|
|
||||||
|
|
||||||
// Create the mesh here
|
|
||||||
int numVerts = 4;
|
|
||||||
int numFaces = 2*3;
|
|
||||||
const float vertices[] =
|
|
||||||
{ -1,-1,0, 1,-1,0,
|
|
||||||
1,1,0, -1,1,0 };
|
|
||||||
|
|
||||||
const short faces[] =
|
|
||||||
{ 0,2,1, 0,3,2 };
|
|
||||||
|
|
||||||
mesh->sharedVertexData = new VertexData();
|
|
||||||
mesh->sharedVertexData->vertexCount = numVerts;
|
|
||||||
|
|
||||||
VertexDeclaration* decl = mesh->sharedVertexData->vertexDeclaration;
|
|
||||||
|
|
||||||
decl->addElement(0, 0, VET_FLOAT3, VES_POSITION);
|
|
||||||
|
|
||||||
HardwareVertexBufferSharedPtr vbuf =
|
|
||||||
HardwareBufferManager::getSingleton().createVertexBuffer(
|
|
||||||
VertexElement::getTypeSize(VET_FLOAT3),
|
|
||||||
numVerts, HardwareBuffer::HBU_STATIC_WRITE_ONLY);
|
|
||||||
|
|
||||||
// Upload the vertex data to the card
|
|
||||||
vbuf->writeData(0, vbuf->getSizeInBytes(), vertices, true);
|
|
||||||
|
|
||||||
// Set vertex buffer binding so buffer 0 is bound to our vertex buffer
|
|
||||||
VertexBufferBinding* bind = mesh->sharedVertexData->vertexBufferBinding;
|
|
||||||
bind->setBinding(0, vbuf);
|
|
||||||
|
|
||||||
/// Allocate index buffer of the requested number of faces
|
|
||||||
HardwareIndexBufferSharedPtr ibuf = HardwareBufferManager::getSingleton().
|
|
||||||
createIndexBuffer(HardwareIndexBuffer::IT_16BIT,
|
|
||||||
numFaces,
|
|
||||||
HardwareBuffer::HBU_STATIC_WRITE_ONLY);
|
|
||||||
|
|
||||||
/// Upload the index data to the card
|
|
||||||
ibuf->writeData(0, ibuf->getSizeInBytes(), faces, true);
|
|
||||||
|
|
||||||
SubMesh* sub = mesh->createSubMesh(name+"tris");
|
|
||||||
sub->useSharedVertices = true;
|
|
||||||
|
|
||||||
/// Set parameters of the submesh
|
|
||||||
sub->indexData->indexBuffer = ibuf;
|
|
||||||
sub->indexData->indexCount = numFaces;
|
|
||||||
sub->indexData->indexStart = 0;
|
|
||||||
|
|
||||||
mesh->_setBounds(AxisAlignedBox(-1.1,-1.1,-1.1,1.1,1.1,1.1));
|
|
||||||
mesh->_setBoundingSphereRadius(2);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
MyMeshLoader mml;
|
|
||||||
|
|
||||||
RenderWindow *window;
|
|
||||||
|
|
||||||
// Lets you quit by closing the window
|
|
||||||
struct QuitListener : FrameListener
|
|
||||||
{
|
|
||||||
bool frameStarted(const FrameEvent& evt)
|
|
||||||
{
|
|
||||||
if(window->isClosed())
|
|
||||||
return false;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
} qlistener;
|
|
||||||
|
|
||||||
int main(int argc, char**args)
|
|
||||||
{
|
|
||||||
// When the test is done, consider disabling the rendering part
|
|
||||||
// unless a command line parameter is given (and write a note about
|
|
||||||
// this to console.) This allows you to run the test from scripts
|
|
||||||
// and still do some meaningful testing, even if you can't inpsect
|
|
||||||
// the result visually.
|
|
||||||
|
|
||||||
// Disable Ogre logging
|
|
||||||
new LogManager;
|
|
||||||
Log *log = LogManager::getSingleton().createLog("");
|
|
||||||
log->setDebugOutputEnabled(false);
|
|
||||||
|
|
||||||
// Set up Root.
|
|
||||||
Root *root = new Root("plugins.cfg","ogre.cfg","");
|
|
||||||
|
|
||||||
if(!root->restoreConfig())
|
|
||||||
{
|
|
||||||
cout << "WARNING: we do NOT recommend fullscreen mode!\n";
|
|
||||||
if(!root->showConfigDialog())
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
SceneManager *mgr = root->createSceneManager(ST_GENERIC);
|
|
||||||
|
|
||||||
// Only render if there are arguments on the command line (we don't
|
|
||||||
// care what they are.)
|
|
||||||
bool render = (argc>=2);
|
|
||||||
|
|
||||||
// Create a window
|
|
||||||
window = root->initialise(true, "Test");
|
|
||||||
if(render)
|
|
||||||
{
|
|
||||||
// More initialization
|
|
||||||
Camera *cam = mgr->createCamera("cam");
|
|
||||||
Viewport *vp = window->addViewport(cam);
|
|
||||||
cam->setAspectRatio(Real(vp->getActualWidth()) / Real(vp->getActualHeight()));
|
|
||||||
cam->setFOVy(Degree(55));
|
|
||||||
cam->setPosition(0,0,0);
|
|
||||||
cam->lookAt(0,0,10);
|
|
||||||
cam->setNearClipDistance(1);
|
|
||||||
|
|
||||||
root->addFrameListener(&qlistener);
|
|
||||||
|
|
||||||
// Background color
|
|
||||||
vp->setBackgroundColour(ColourValue(0.5,0.5,0.5));
|
|
||||||
|
|
||||||
mgr->setAmbientLight(ColourValue(1,1,1));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create a couple of manual meshes
|
// Create a couple of manual meshes
|
||||||
MeshManager::getSingleton().createManual("mesh1.mm", "General", &mml);
|
makeMesh("mesh1.mm");
|
||||||
MeshManager::getSingleton().createManual("mesh2.mm", "General", &mml);
|
makeMesh("mesh2.mm");
|
||||||
MeshManager::getSingleton().createManual("mesh3.mm", "General", &mml);
|
makeMesh("mesh3.mm");
|
||||||
|
|
||||||
// Display the meshes
|
// Display the meshes
|
||||||
{
|
{
|
||||||
|
@ -166,15 +37,4 @@ int main(int argc, char**args)
|
||||||
node->attachObject(ent);
|
node->attachObject(ent);
|
||||||
node->setPosition(0,-2,8);
|
node->setPosition(0,-2,8);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Render loop
|
|
||||||
if(render)
|
|
||||||
{
|
|
||||||
cout << "Rendering. Close the window to exit.\n";
|
|
||||||
root->startRendering();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cleanup
|
|
||||||
delete root;
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
69
nifogre/tests/ogre_mesh_common.cpp
Normal file
69
nifogre/tests/ogre_mesh_common.cpp
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
#include "ogre_common.cpp"
|
||||||
|
|
||||||
|
struct MyMeshLoader : ManualResourceLoader
|
||||||
|
{
|
||||||
|
void loadResource(Resource *resource)
|
||||||
|
{
|
||||||
|
Mesh *mesh = dynamic_cast<Mesh*>(resource);
|
||||||
|
assert(mesh);
|
||||||
|
|
||||||
|
const String& name = mesh->getName();
|
||||||
|
cout << "Manually loading mesh " << name << endl;
|
||||||
|
|
||||||
|
// Create the mesh here
|
||||||
|
int numVerts = 4;
|
||||||
|
int numFaces = 2*3;
|
||||||
|
const float vertices[] =
|
||||||
|
{ -1,-1,0, 1,-1,0,
|
||||||
|
1,1,0, -1,1,0 };
|
||||||
|
|
||||||
|
const short faces[] =
|
||||||
|
{ 0,2,1, 0,3,2 };
|
||||||
|
|
||||||
|
mesh->sharedVertexData = new VertexData();
|
||||||
|
mesh->sharedVertexData->vertexCount = numVerts;
|
||||||
|
|
||||||
|
VertexDeclaration* decl = mesh->sharedVertexData->vertexDeclaration;
|
||||||
|
|
||||||
|
decl->addElement(0, 0, VET_FLOAT3, VES_POSITION);
|
||||||
|
|
||||||
|
HardwareVertexBufferSharedPtr vbuf =
|
||||||
|
HardwareBufferManager::getSingleton().createVertexBuffer(
|
||||||
|
VertexElement::getTypeSize(VET_FLOAT3),
|
||||||
|
numVerts, HardwareBuffer::HBU_STATIC_WRITE_ONLY);
|
||||||
|
|
||||||
|
// Upload the vertex data to the card
|
||||||
|
vbuf->writeData(0, vbuf->getSizeInBytes(), vertices, true);
|
||||||
|
|
||||||
|
// Set vertex buffer binding so buffer 0 is bound to our vertex buffer
|
||||||
|
VertexBufferBinding* bind = mesh->sharedVertexData->vertexBufferBinding;
|
||||||
|
bind->setBinding(0, vbuf);
|
||||||
|
|
||||||
|
/// Allocate index buffer of the requested number of faces
|
||||||
|
HardwareIndexBufferSharedPtr ibuf = HardwareBufferManager::getSingleton().
|
||||||
|
createIndexBuffer(HardwareIndexBuffer::IT_16BIT,
|
||||||
|
numFaces,
|
||||||
|
HardwareBuffer::HBU_STATIC_WRITE_ONLY);
|
||||||
|
|
||||||
|
/// Upload the index data to the card
|
||||||
|
ibuf->writeData(0, ibuf->getSizeInBytes(), faces, true);
|
||||||
|
|
||||||
|
SubMesh* sub = mesh->createSubMesh(name+"tris");
|
||||||
|
sub->useSharedVertices = true;
|
||||||
|
|
||||||
|
/// Set parameters of the submesh
|
||||||
|
sub->indexData->indexBuffer = ibuf;
|
||||||
|
sub->indexData->indexCount = numFaces;
|
||||||
|
sub->indexData->indexStart = 0;
|
||||||
|
|
||||||
|
mesh->_setBounds(AxisAlignedBox(-1.1,-1.1,-1.1,1.1,1.1,1.1));
|
||||||
|
mesh->_setBoundingSphereRadius(2);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
MyMeshLoader mml;
|
||||||
|
|
||||||
|
MeshPtr makeMesh(const string &name)
|
||||||
|
{
|
||||||
|
return MeshManager::getSingleton().createManual(name, "General", &mml);
|
||||||
|
}
|
|
@ -1,84 +1,17 @@
|
||||||
#include <Ogre.h>
|
|
||||||
|
|
||||||
#include "../ogre_nif_loader.h"
|
#include "../ogre_nif_loader.h"
|
||||||
#include "../../bsa/bsa_archive.h"
|
#include "../../bsa/bsa_archive.h"
|
||||||
|
|
||||||
using namespace std;
|
//#define SCREENSHOT
|
||||||
using namespace Ogre;
|
|
||||||
|
|
||||||
RenderWindow *window;
|
#include "ogre_common.cpp"
|
||||||
|
|
||||||
//const char* mesh = "meshes\\a\\towershield_steel.nif";
|
//const char* mesh = "meshes\\a\\towershield_steel.nif";
|
||||||
//const char* mesh = "meshes\\r\\bonelord.nif";
|
//const char* mesh = "meshes\\r\\bonelord.nif";
|
||||||
//const char* mesh = "meshes\\m\\text_scroll_open_01.nif";
|
//const char* mesh = "meshes\\m\\text_scroll_open_01.nif";
|
||||||
const char* mesh = "meshes\\f\\ex_ashl_a_banner_r.nif";
|
const char* mesh = "meshes\\f\\ex_ashl_a_banner_r.nif";
|
||||||
|
|
||||||
int shot = 0;
|
void C::doTest()
|
||||||
|
|
||||||
// Lets you quit by closing the window
|
|
||||||
struct QuitListener : FrameListener
|
|
||||||
{
|
{
|
||||||
bool frameStarted(const FrameEvent& evt)
|
|
||||||
{
|
|
||||||
if(shot == 1) window->writeContentsToFile("nif.png");
|
|
||||||
if(shot < 2) shot++;
|
|
||||||
|
|
||||||
if(window->isClosed())
|
|
||||||
return false;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
} qlistener;
|
|
||||||
|
|
||||||
int main(int argc, char**args)
|
|
||||||
{
|
|
||||||
// When the test is done, consider disabling the rendering part
|
|
||||||
// unless a command line parameter is given (and write a note about
|
|
||||||
// this to console.) This allows you to run the test from scripts
|
|
||||||
// and still do some meaningful testing, even if you can't inpsect
|
|
||||||
// the result visually.
|
|
||||||
|
|
||||||
// Disable Ogre logging
|
|
||||||
new LogManager;
|
|
||||||
Log *log = LogManager::getSingleton().createLog("");
|
|
||||||
log->setDebugOutputEnabled(false);
|
|
||||||
|
|
||||||
// Set up Root.
|
|
||||||
Root *root = new Root("plugins.cfg","ogre.cfg","");
|
|
||||||
|
|
||||||
if(!root->restoreConfig())
|
|
||||||
{
|
|
||||||
cout << "WARNING: we do NOT recommend fullscreen mode!\n";
|
|
||||||
if(!root->showConfigDialog())
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
SceneManager *mgr = root->createSceneManager(ST_GENERIC);
|
|
||||||
|
|
||||||
// Only render if there are arguments on the command line (we don't
|
|
||||||
// care what they are.)
|
|
||||||
bool render = (argc>=2);
|
|
||||||
|
|
||||||
// Create a window
|
|
||||||
window = root->initialise(true, "Test");
|
|
||||||
if(render)
|
|
||||||
{
|
|
||||||
// More initialization
|
|
||||||
Camera *cam = mgr->createCamera("cam");
|
|
||||||
Viewport *vp = window->addViewport(cam);
|
|
||||||
cam->setAspectRatio(Real(vp->getActualWidth()) / Real(vp->getActualHeight()));
|
|
||||||
cam->setFOVy(Degree(55));
|
|
||||||
cam->setPosition(0,0,0);
|
|
||||||
cam->lookAt(0,0,10);
|
|
||||||
cam->setNearClipDistance(1);
|
|
||||||
|
|
||||||
root->addFrameListener(&qlistener);
|
|
||||||
|
|
||||||
// Background color
|
|
||||||
vp->setBackgroundColour(ColourValue(0.5,0.5,0.5));
|
|
||||||
|
|
||||||
mgr->setAmbientLight(ColourValue(1,1,1));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add Morrowind.bsa resource location
|
// Add Morrowind.bsa resource location
|
||||||
addBSA("../../data/Morrowind.bsa");
|
addBSA("../../data/Morrowind.bsa");
|
||||||
|
|
||||||
|
@ -114,15 +47,4 @@ int main(int argc, char**args)
|
||||||
node->setPosition(-2*sep,0,0);
|
node->setPosition(-2*sep,0,0);
|
||||||
node->yaw(Degree(180));
|
node->yaw(Degree(180));
|
||||||
//*/
|
//*/
|
||||||
|
|
||||||
// Render loop
|
|
||||||
if(render)
|
|
||||||
{
|
|
||||||
cout << "Rendering. Close the window to exit.\n";
|
|
||||||
root->startRendering();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cleanup
|
|
||||||
delete root;
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
14
nifogre/tests/ogre_skeleton_test.cpp
Normal file
14
nifogre/tests/ogre_skeleton_test.cpp
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#include "ogre_mesh_common.cpp"
|
||||||
|
|
||||||
|
void C::doTest()
|
||||||
|
{
|
||||||
|
MeshPtr msh = makeMesh("mesh1");
|
||||||
|
|
||||||
|
// Display the mesh
|
||||||
|
{
|
||||||
|
SceneNode *node = mgr->getRootSceneNode()->createChildSceneNode("node");
|
||||||
|
Entity *ent = mgr->createEntity("Mesh1", "mesh1");
|
||||||
|
node->attachObject(ent);
|
||||||
|
node->setPosition(0,0,4);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue