ofSetColor 在绘制到 ofFbo 时不会改变颜色(使用 openFrameworks)
ofSetColor does not change color when drawing to an ofFbo (using openFrameworks)
首先,我将给出一个代码示例,该代码可以执行我希望它执行的操作。然后我会给出第二个导致问题的小改动的例子。
工作示例
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);
}
我希望得到一个蓝色方块(直接绘制到 window)和一个红色方块(绘制到 FBO)。但是红色方块变黑了:
似乎在绘制到 FBO 之前调用 ofSetColor
会导致绘制到 FBO 的所有内容都是黑色的。这是怎么回事?
我认为这可能是一个错误。
也许你可以 post 在 https://github.com/openframeworks/openFrameworks/issues
但是,在 fbo.draw(0, 0);
之前调用 ofSetColor(255, 255, 255, 255);
似乎可以解决问题。
我认为调用 ofSetColor 会以一种奇怪的方式影响 FBO 的颜色。
例如,如果您在 fbo.draw(0, 0);
之前调用 ofSetColor(150, 0, 0, 255);
,则 FBO 会绘制一个较深的红色方块。
颜色的r值越小,颜色越深。这就是为什么调用 ofSetColor(0, 255, 0, 255);
使正方形完全变黑的原因。
也许有人可以更好地解释为什么会这样。但是在 fbo.draw(0, 0);
之前调用 ofSetColor(255, 255, 255, 255);
似乎无论如何都能解决问题。
在绘制 fbo 之前,您必须调用 ofSetColor(255, 255, 255, 255);
或 ofSetColor(255);
或 ofSetColor(ofColor::white);
(都一样)。
目前正在与上一个ofSetColor(...);
画图。
在 openFrameworks 中绘制任何纹理也是如此。例如,如果您调用
ofSetColor(255, 255, 0);
myTexture.draw(0, 0);
您的纹理将以黄色调绘制。
首先,我将给出一个代码示例,该代码可以执行我希望它执行的操作。然后我会给出第二个导致问题的小改动的例子。
工作示例
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);
}
我希望得到一个蓝色方块(直接绘制到 window)和一个红色方块(绘制到 FBO)。但是红色方块变黑了:
似乎在绘制到 FBO 之前调用 ofSetColor
会导致绘制到 FBO 的所有内容都是黑色的。这是怎么回事?
我认为这可能是一个错误。
也许你可以 post 在 https://github.com/openframeworks/openFrameworks/issues
但是,在 fbo.draw(0, 0);
之前调用 ofSetColor(255, 255, 255, 255);
似乎可以解决问题。
我认为调用 ofSetColor 会以一种奇怪的方式影响 FBO 的颜色。
例如,如果您在 fbo.draw(0, 0);
之前调用 ofSetColor(150, 0, 0, 255);
,则 FBO 会绘制一个较深的红色方块。
颜色的r值越小,颜色越深。这就是为什么调用 ofSetColor(0, 255, 0, 255);
使正方形完全变黑的原因。
也许有人可以更好地解释为什么会这样。但是在 fbo.draw(0, 0);
之前调用 ofSetColor(255, 255, 255, 255);
似乎无论如何都能解决问题。
在绘制 fbo 之前,您必须调用 ofSetColor(255, 255, 255, 255);
或 ofSetColor(255);
或 ofSetColor(ofColor::white);
(都一样)。
目前正在与上一个ofSetColor(...);
画图。
在 openFrameworks 中绘制任何纹理也是如此。例如,如果您调用
ofSetColor(255, 255, 0);
myTexture.draw(0, 0);
您的纹理将以黄色调绘制。