Тема: Sigel
Показать сообщение отдельно
Старый 07.11.2007, 01:44   #1
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Sigel

Всем привет.
Просьба протестить то, что в архиве (ето пример маво движка).
и вот етот код: (его надо засунуть в туже папку и отключить Debugger, чтобы было по чесному)
Graphics3D 1024,768,32,1

cam=CreateCamera()
TurnEntity cam,0,180,0
cnt=10000

cube=CreateCube()
tex=LoadTexture("texture.bmp")

EntityTexture cube,tex

last_tick=MilliSecs()

Type cub
	Field dx#,dy#,dz#,x#,y#,z#,ax#,ay#,az#,r#
	Field ent
End Type

For i=1 To cnt
	c.cub=New cub
	c\ax=Rnd(-2,2)
	c\ay=Rnd(-2,2)
	c\az=Rnd(-2,2)
	c\dx=Rnd(-0.005,0.005)*57
	c\dy=Rnd(-0.005,0.005)*57
	c\dz=Rnd(-0.005,0.005)*57
	c\r=Rnd(20,50)
	c\x=Rnd(-1.57,1.57)*57
	c\y=Rnd(-1.57,1.57)*57
	c\z=Rnd(-1.57,1.57)*57
	c\ent=CopyEntity(cube)	
Next
x#=0
y#=0
z#=0
While Not KeyDown(1)

For c.cub=Each cub
	x=Sin(c\x)*c\r
	y=Cos(c\y)*c\r
	z=-50+Sin(c\z)*c\r
	c\x=c\x+c\dx
	c\y=c\y+c\dy
	c\z=c\z+c\dz
	PositionEntity(c\ent,x,y,z)
	TurnEntity(c\ent,c\ax,c\ay,c\az)	
Next

	frames=frames+1
	If(last_tick<MilliSecs()-1000)
		last_tick=MilliSecs()
		fps=frames
		frames=0
	EndIf
	
	RenderWorld
	Text 10,10,fps
	Flip
Wend
пожалуйста, заметьте фпс и напишите его в етот тред (для обоих случаев)


кстати, вот код из примера
#include "stdafx.h"

#include "..\..\sigel\sigel.cpp" //подрубаем двиг

class Cubes
{
public:
	float dx,dy,dz,x,y,z,ax,ay,az,r;
	Entity* ent;
};

typedef std::list<Cubes*> culist;
culist cl;

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
 	// TODO: Place code here.
	AppTitle("Sigle. Texturing"); //нахвание приложения
	Init(1024,768,32,1); //инит графического режима

	Surface SurfCube; //создание "меша"
	SurfCube.MakeCube(1); //что именно создаем (половина размера куба)

	Texture CubeTex("texture.bmp");//грузим тексу

	const cnt=10000;

	for(int i=0;i<cnt;i++)
	{
	Cubes* cub=new Cubes;

	cub->ax=rnd(-2,2);
	cub->ay=rnd(-2,2);
	cub->az=rnd(-2,2);
	cub->dx=rnd(-0.005,0.005);
	cub->dy=rnd(-0.005,0.005);
	cub->dz=rnd(-0.005,0.005);
	cub->r=rnd(20,50);
	cub->x=rnd(-1.57,1.57);
	cub->y=rnd(-1.57,1.57);
	cub->z=rnd(-1.57,1.57);
	cub->ent=new Entity(&SurfCube);
	cub->ent->BindTex(&CubeTex);
//	cub->ent->Hide();

	cl.push_back(cub);
	}

	Font fnt;
	fnt.Bind;

	float dx=0,dy=0;
	char* a=new char[100];
	long last_tick=GetTickCount(),fps=0,frames=0;
	while(!KeyDown(VK_ESCAPE))//пока не нажали на еск
	{
		for(culist::const_iterator ci=cl.begin();ci!=cl.end();ci++)
		{
			float x,y,z;
			x=sin((*ci)->x)*(*ci)->r;
			y=cos((*ci)->y)*(*ci)->r;
			z=-50+sin((*ci)->z)*(*ci)->r;
			(*ci)->x+=(*ci)->dx;
			(*ci)->y+=(*ci)->dy;
			(*ci)->z+=(*ci)->dz;
			(*ci)->ent->Position(x,y,z);
			(*ci)->ent->Turn((*ci)->ax,(*ci)->ay,(*ci)->az);			
		}
		Render();//рендерим
		frames++;
		if(last_tick<GetTickCount()-1000)
		{
			fps=frames;
			frames=0;
			last_tick=GetTickCount();
		}
		itoa(fps,a,10);
		fnt.DrawText(a,-0.5,0.3);

		itoa(Entts::GetInsCount(),a,10);
		fnt.DrawText(a,-0.5,0.25);

		itoa(Entts::GetOutCount(),a,10);
		fnt.DrawText(a,-0.5,0.2);

		Flip();//отображаем
	}

	DeInit();//деинициализация, освобождаем память
	return 0;
}
можете заметить, что блицевский синтаксис я не копирую. и не собираюсь.

сам двиг пока ничего не умеет, кроме как выводить объект и текстурить его (ну еще выводить текст). Вывод сделан крайне неоптимально (уже второй день бьюсь над VBO, но пока никак не "побежу", да и от glRotate glTranslate тоже надо избавляться. Однако даже на крайне неоптимальном выводе, мой двиг выводит затекстуренные кубы быстрее чем старичок блиц3д.
сама демка рисует 10000 кубов (и в том и в том случае), затекстуренных тексой 512 на 512.
на моем компе:
sigel - 23-30 фпс
blitz3d - 12-19фпс

к сожалению создать полностью идентичную демку мне не удалось, так что о разумности сравнения не особо заикаюсь, но то, что вывод по крайней мере "не медленнее" - ето имхо факт
(Offline)
 
Ответить с цитированием