Показать сообщение отдельно
Старый 22.10.2009, 01:55   #20
Igor'
ПроЭктировщик
 
Аватар для Igor'
 
Регистрация: 15.10.2009
Сообщений: 190
Написано 47 полезных сообщений
(для 142 пользователей)
Ответ: BurnFX RayTracer - W.I.P

Решил отцепить рейтрейсер от двига ну чтобы там например можно было написать для макса експортёр .

Собсна на си это дело вглядит так на данный момент:

#include "..\BurnRay\sdk.h"

using namespace BurnRay;


class TestShader : public Shader
{
public:

	TestShader(){
	}

	float3 main( const RayHit& hit )
	{
		return hit.material->getColor();
	}
};


void main()
{

	FrameBuffer* framebuffer = new FrameBuffer(256,256);
    Renderer* renderer = new Renderer();
	renderer->setFrameBuffer(framebuffer);

	Material* material = new Material();
	material->setShader(new TestShader());
	material->setColor(float3(1,0,0));

	ObjectSphere* sphere = new ObjectSphere();
	sphere->setMaterial(material,0);
	sphere->setPosition(vec3(0,0,25));
	sphere->setRadius(10.4f);

	ObjectSphere* sphere2 = new ObjectSphere();
	sphere2->setMaterial(material,0);
	sphere2->setPosition(vec3(15,0,25));
	sphere2->setRadius(10.4f);

    ObjectSphere* sphere3 = new ObjectSphere();
	sphere3->setMaterial(material,0);
	sphere3->setPosition(vec3(-15,0,25));
	sphere3->setRadius(10.4f);

	ObjectSphere* sphere4 = new ObjectSphere();
	sphere4->setMaterial(material,0);
	sphere4->setPosition(vec3(0,0,45));
	sphere4->setRadius(10.4f);


	ObjectCamera* camera = new ObjectCamera();
	camera->setAspect(256.0f / 256.0f);
	camera->setPosition(vec3(0,0,0));
	camera->setFar(1024.0f);
	camera->setNear(1.0f);
	camera->setFov(89.0f);


	renderer->addObject(sphere);
	renderer->addObject(sphere2);
	renderer->addObject(sphere3);
	renderer->addObject(sphere4);

	renderer->renderFrame(camera,1);

	//float3* frame = framebuffer->getPixels();

	Image* img = new Image(framebuffer->getWidth(),framebuffer->getHeight());
	for(int y=0;y<framebuffer->getHeight();y++){
		for(int x=0;x<framebuffer->getWidth();x++){

			Image::Pixel p;
			p.r = framebuffer->getPixel(x,y).x * 255.0f;
			p.g = framebuffer->getPixel(x,y).y * 255.0f;
			p.b = framebuffer->getPixel(x,y).z * 255.0f;
            p.a = 255.0f;

			img->put(x,y,p);
		}
	}
	img->save("out.tga");
}
(Offline)
 
Ответить с цитированием