首先,我将举例说明我希望它做的事情。然后我将给出一个导致问题的小改动的第二个例子。
ofApp.h
:
#pragma once
#include "ofMain.h"
class ofApp : public ofBaseApp {
public:
void setup();
void draw();
ofFbo fbo;
};
ofApp.cc
:
#include "ofApp.h"
void ofApp::setup() {
fbo.allocate(200, 100, GL_RGBA);
}
void ofApp::draw() {
// Draw a red square to the FBO
fbo.begin();
ofClear(255,255,255, 0);
ofSetColor(255, 0, 0, 255);
ofDrawRectangle(100, 0, 100, 100);
fbo.end();
fbo.draw(0, 0);
}
这会导致以下红色方块被绘制到屏幕上:
现在我在draw
方法的顶部添加两行,但我没有得到我期望的结果。以下是ofApp.cc
的完整代码:
#include "ofApp.h"
void ofApp::setup() {
fbo.allocate(200, 100, GL_RGBA);
}
void ofApp::draw() {
// Draw a blue square directly to screen
ofSetColor(0, 0, 255, 255);
ofDrawRectangle(0, 0, 100, 100);
// Draw a red square to the FBO
fbo.begin();
ofClear(255,255,255, 0);
ofSetColor(255, 0, 0, 255);
ofDrawRectangle(100, 0, 100, 100);
fbo.end();
fbo.draw(0, 0);
}
我希望得到一个蓝色方块(直接绘制到窗口)和一个红色方块(绘制到FBO)。但红色方块变黑了:
似乎在绘制到FBO之前调用ofSetColor
会导致绘制到FBO的所有内容都变黑。这是怎么回事?
答案 0 :(得分:1)
我认为这可能是一个错误。
也许您可以在https://github.com/openframeworks/openFrameworks/issues
上发布此内容但是,在ofSetColor(255, 255, 255, 255);
之前调用fbo.draw(0, 0);
似乎可以解决问题。
我认为调用ofSetColor会以一种奇怪的方式影响FBO的颜色。
例如,如果您在ofSetColor(150, 0, 0, 255);
之前拨打fbo.draw(0, 0);
,则FBO会绘制一个较暗的红色方块。
减少颜色的r值越多,它就越暗。这就是为什么调用ofSetColor(0, 255, 0, 255);
使方块完全变黑。
也许有人可以更好地解释为什么会这样。但是,ofSetColor(255, 255, 255, 255);
之前调用fbo.draw(0, 0);
似乎无法解决问题。
答案 1 :(得分:1)
在绘制fbo之前,您必须先致电ofSetColor(255, 255, 255, 255);
或ofSetColor(255);
或ofSetColor(ofColor::white);
(所有相同)。
目前正在使用之前的ofSetColor(...);
进行绘制。
在openFrameworks中绘制任何纹理都是一样的。例如,如果你打电话
ofSetColor(255, 255, 0);
myTexture.draw(0, 0);
您的纹理将以黄色调绘制。