Hallo,
ich bin gerade dabei, mich in Irrlicht einzuarbeiten, da es jetzt auch auf der PSP läuft. Ich will ein einfaches Title-basiertes Level basteln. Nun habe ich folgende Probleme:
1. Ich kann keine erkennbare Textur auf die einzelnen Felder legen.
Habe schon versucht, die Textur zu skalieren aber das half nichts. (Edit: Gelöst, bin ja auch doof, habe vergessen die tu und tv Werte zu ändern)
2. Wenn ich DX9 oder 8 verwende werden ganz andere Koordinaten für die Polygone verwendet. Sie liegen quer über die ganze Fläche. Bei OpenGL und Software liegen sie richtig.
Evntl. gehe ich ja ganz falsch an die Sache ran.
Code:
class CSampleSceneNode : public scene::ISceneNode
{
core::aabbox3d<f32> Box;
video::S3DVertex Vertices[MAP_WIDTH*MAP_HEIGHT];
video::SMaterial Material;
public:
CSampleSceneNode(scene::ISceneNode* parent, scene::ISceneManager* mgr, s32 id)
: scene::ISceneNode(parent, mgr, id)
{
int x,y,r;
video::IVideoDriver* driver = SceneManager->getVideoDriver();
Material.Wireframe = false;
Material.Lighting = false;
Material.GouraudShading=false;
Material.Texture1=driver->getTexture("../../media/boden.bmp");
Material.FogEnable=false;
video::SColor cubeColour(0,128,128,128);
video::SColor cubeColour2(255,255,255,255);
for(y=0;y<MAP_HEIGHT;y++){
for(x=0;x<MAP_WIDTH;x++){
r=rand()*4/RAND_MAX;
if(x>6 && x<9 && y>6 && y<9){
Vertices[x+y*MAP_WIDTH]=video::S3DVertex(x*10,10,y*10, 1,1,0, cubeColour2, 0, 1);
}else{
Vertices[x+y*MAP_WIDTH]=video::S3DVertex(x*10,0,y*10, 0,0,0, video::SColor(128,128,128,128), 0, 1);
}
}
}
Box.reset(Vertices[0].Pos);
for (s32 i=1; i<MAP_HEIGHT*MAP_WIDTH; ++i)
Box.addInternalPoint(Vertices[i].Pos);
}
virtual void OnPreRender()
{
if (IsVisible)
SceneManager->registerNodeForRendering(this);
ISceneNode::OnPreRender();
}
virtual void render()
{
int s,nx,ny;
core::vector3df pos;
u16 indices[6];
video::IVideoDriver* driver = SceneManager->getVideoDriver();
video::S3DVertex *tmp=&Vertices[0];
driver->setTransform(video::ETS_WORLD, AbsoluteTransformation);
driver->setMaterial(Material);
indices[2]=0;
indices[1]=1;
indices[0]=MAP_WIDTH;
indices[5]=1;
indices[4]=MAP_WIDTH+1;
indices[3]=MAP_WIDTH;
pos=camera->getPosition();
nx=pos.X/10;
ny=pos.Z/10;
for(int y=0;y<MAP_HEIGHT-1;y++){
for(int x=0;x<MAP_WIDTH-1;x++){
if(x>nx-4 && x<nx+7 && y>ny-10 && y<ny+10){
driver->drawIndexedTriangleList(tmp, 2, &indices[0], 2);
}
tmp++;
}
tmp++;
}
}
virtual const core::aabbox3d<f32>& getBoundingBox() const
{
return Box;
}
virtual s32 getMaterialCount()
{
return 1;
}
virtual video::SMaterial& getMaterial(s32 i)
{
return Material;
}
};