Решил отцепить рейтрейсер от двига ну чтобы там например можно было написать для макса експортёр
.
Собсна на си это дело вглядит так на данный момент:
#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");
}