gpt4 book ai didi

c++ - 煤渣和 C++ : Mirror Texture and Efficient Drawing Questions

转载 作者:行者123 更新时间:2023-11-28 06:45:26 25 4
gpt4 key购买 nike

  1. 假设我有一个面朝右边的角色,我需要镜像图像,使他现在面朝左边。我该怎么做呢?我在 gl::Texture 中找到了翻转方法,但它是垂直翻转的,而不是水平翻转的。

  2. 我注意到,如果我在 draw() 方法期间没有清除整个窗口,那么我最后一帧绘制的内容仍然存在。这很好,因为我只想更新更改的内容,但如何从当前帧中删除特定的 gl::Texture

最佳答案

1:绘制一个在X轴上翻转的纹理

有很多方法可以实现这种效果。哪一种最适合您取决于您​​绘制纹理的方式。由于您是从 Cinder 开始的,我猜您正在使用 ci::gl::draw 函数并向其传递一个 TextureRef 对象。在这种情况下,绘制翻转纹理的简单方法是(您可以将其放在绘制纹理的任何位置):

// This is to get a "fresh" coordinate system for drawing and to make sure
// you can clean up after you're done
ci::gl::pushMatrices();

// Move the coordinate system to where you want to draw the texture
ci::gl::translate(ci::Vec2f(100, 100));

// Scaling the coordinate system by -1 effectively flips that axis
// (e.g. whatever was going to be drawn at x: 10 will now be drawn at x: -10)
ci::gl::scale(ci::Vec3f(-1, 1, 1));

// Draw your texture
ci::gl::draw(texture);

// Clean up after yourself so any drawing calls after this don't use your modified
// coordinates
ci::gl::popMatrices();

2:从帧中删除纹理

没有真正简单的方法来完成您所描述的事情(即绘制到帧缓冲区,然后删除与特定纹理关联的所有像素)。但是,根据您要达到的效果,可能有一些方法可以实现您想要的效果,但它们都比较先进。例如,您可以将要删除的纹理绘制到“纹理”缓冲区上,而将其他所有内容绘制到“背景”缓冲区上。每一帧你都会绘制背景缓冲区,然后在它上面绘制纹理缓冲区。当您想要“移除”纹理缓冲区时,您只需停止绘制它即可。

附言- 我很乐意详细介绍如何绘制多个缓冲区(实际上 Cinder 使它相对容易),但前提是这是一个你认为你想深入了解的兔子洞;)

关于c++ - 煤渣和 C++ : Mirror Texture and Efficient Drawing Questions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25098347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com