unigine ffp 渲染图片

该博客围绕信息技术展开,提到使用Unigine 2.7.2版本,因项目需求,将FFP通过设置uv的方式用于图片的畸变矫正。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 使用unigine版本 2.7.2
项目需求,将ffp通过设置uv用于对图片的畸变矫正。

int render() override
{
	render(Game::get()->getTime());
	return 1;
}

	
TextureRenderPtr texturerender;
TexturePtr tempT;
TexturePtr tempT1;
void render(float time)
{
	App *app = App::get();
	Ffp *ffp = Ffp::get();
	int width = app->getWidth();
	int height = app->getHeight();
	RenderState *render_state = RenderState::get();
		
	// screen size
		
	float radius = height / 2.0f;

	if (!texturerender.get()) {
		texturerender = TextureRender::create();
		texturerender->create2D(512,512, TextureRender::TEXTURE_COLOR);
		tempT = Texture::create();
		tempT->create2D(512, 512, Texture::FORMAT_RGBA8, Texture::USAGE_RENDER);
			
		tempT1 = Texture::create();
		ImagePtr img = Image::create();
		img->load("E:/temp1/0.png");
		//img->resize(512, 512);
		tempT1->setImage(img);
	}
	render_state->saveState();
	render_state->clearStates();
	texturerender->setColorTexture(0, tempT);
	texturerender->enable();
    render_state->clearBuffer(RenderState::BUFFER_COLOR, vec4(0.0f));//清空当前输出的render中的colorbuffer的内容
	tempT1->bindFragment(0);//因为在shader中,输入的纹理都是通过纹理坐标[0,1]来访问的,输入的大小与输出的大小可以不用有任何关联
	ffp->enable();//Ffp::MODE_SOLID
	ffp->setOrtho(width, height);//宽和高的设定,也就是下面的vertex的范围。默认是范围是[0,1]
		

	// begin triangles
	ffp->beginTriangles();

	// vertex colors
	const unsigned int colors[] = { 0xffff0000, 0xff00ff00, 0xff0000ff };

	// create vertices
	int num_vertex = 16;
	for (int i = 0; i < num_vertex; i++)//vertexs
	{
		float angle = UNIGINE_PI2 * i / (num_vertex - 1) - time;
		float x = width / 2 + sinf(angle) * radius;
		float y = height / 2 + cosf(angle) * radius;
		ffp->addVertex(x, y);//x [0,width] y[0,height]
		ffp->setTexCoord(x / width, y / height);
		//ffp->setColor(colors[i % 3]);
	}

	// create indices
	for (int i = 1; i < num_vertex; i++)//triangles
	{
		ffp->addIndex(0);
		ffp->addIndex(i);
		ffp->addIndex(i - 1);
	}

	// end triangles
	ffp->endTriangles();
	//ffp->renderScreen();
	ffp->disable();
	tempT1->unbindFragment(0);
	texturerender->disable();
	ImagePtr img = Image::create();
	tempT->getImage(img);
	img->save("E:/temp1/10.png");
	render_state->clearStates();
	render_state->restoreState();
	//src->getImage(img);
	//img->save("E:/temp1/10.png");
		
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值