C++ opengl帧缓冲区屏幕外到纹理、颜色错误
我正在尝试使用帧缓冲区进行屏幕外渲染立方体。然后我尝试使用它的纹理将其转换为纹理。我遇到的问题是,当我尝试将纹理放置在平面上时。纹理颜色完全基于一种原色:芦苇、绿色或蓝色。我不知道问题出在哪里,可能是从浮动到双精度的铸造问题?我真的不知道该怎么想,也不知道该去哪里探索 这是我得到的gif。在此gif中,您可以看到正常的立方体,而无需屏幕外渲染。第二个绿色立方体是打印在平面上的帧缓冲区纹理:C++ opengl帧缓冲区屏幕外到纹理、颜色错误,c++,qt,opengl,framebuffer,C++,Qt,Opengl,Framebuffer,我正在尝试使用帧缓冲区进行屏幕外渲染立方体。然后我尝试使用它的纹理将其转换为纹理。我遇到的问题是,当我尝试将纹理放置在平面上时。纹理颜色完全基于一种原色:芦苇、绿色或蓝色。我不知道问题出在哪里,可能是从浮动到双精度的铸造问题?我真的不知道该怎么想,也不知道该去哪里探索 这是我得到的gif。在此gif中,您可以看到正常的立方体,而无需屏幕外渲染。第二个绿色立方体是打印在平面上的帧缓冲区纹理: 这是我使用的代码。它基于Qt,但与glut没有区别。我解释它是为了更容易理解: initializeG
这是我使用的代码。它基于Qt,但与glut没有区别。我解释它是为了更容易理解:
如果需要,这里是头文件:
#ifndef WIDGETOPENGL_H
#define WIDGETOPENGL_H
#include <QtWidgets/QMainWindow>
#include <QtWidgets/qopenglwidget.h>
#include <QtOpenGL>
#include <GL/GLU.h>
class WidgetOpenGL : public QOpenGLWidget, protected QOpenGLFunctions
{
Q_OBJECT
public:
WidgetOpenGL(QWidget *parent);
signals:
void screenClicked();
protected:
void initializeGL();
void paintGL();
void resizeGL(int w, int h);
void setViewport();
void setProyection();
void setModelView();
private:
int initX;
int initY;
QOpenGLFramebufferObject *frameBuffer;
GLuint buffer;
GLuint renderedTexture;
GLuint renderedDepth;
bool buttonpressed;
QImage image;
GLdouble desplazamientoX;
GLdouble desplazamientoY;
void setRotation();
void mouseMoveEvent(QMouseEvent *event);
void mousePressEvent(QMouseEvent *event);
};
#endif
\ifndef WIDGETOPENGL\u H
#定义WIDGETOPENGL_H
#包括
#包括
#包括
#包括
WidgetOpenGL类:公共QOpenGLWidget,受保护的QOpenGLFunctions
{
Q_对象
公众:
WidgetOpenGL(QWidget*父项);
信号:
void screensclicked();
受保护的:
void initializeGL();
void paintGL();
无效尺寸(整数w,整数h);
void setViewport();
void setProyection();
void setModelView();
私人:
int initX;
完整性;
QOpenGLFramebufferObject*帧缓冲区;
胶合缓冲液;
胶合渲染纹理;
GLuint Renderdepth;
按下按钮;
图像;
gl-双黑色素瘤;
GLD双desplazamientoY;
void setRotation();
作废mouseMoveEvent(QMouseEvent*事件);
作废鼠标压力事件(QMouseEvent*事件);
};
#恩迪夫
已解决!问题是我在绿色平面上绘制纹理。这是因为最后一个glcolor3f是绿色的(当我绘制真实立方体的后平面时使用)
在绘制平面之前,我只需添加glColor3f(1.0,1.0,1.0),即可生成白色平面。已解决!问题是我在绿色平面上绘制纹理。这是因为最后一个glcolor3f是绿色的(当我绘制真实立方体的后平面时使用)
在绘制平面之前,我只需添加glColor3f(1.0,1.0,1.0)即可生成白色平面。您好,欢迎来到StackOverflow。我确实觉得这对于新手来说是一个非常高质量的问题,但是请花一些时间阅读帮助页面,特别是命名为和的部分。更重要的是,请阅读。您可能还想了解。如果您有更多的问题要问,您可能希望在后面的问题中理解这些。i需要大写,否则您的问题将无法验证。您好,欢迎来到StackOverflow。我确实觉得这对于新手来说是一个非常高质量的问题,但是请花一些时间阅读帮助页面,特别是命名为和的部分。更重要的是,请阅读。您可能还想了解。如果您有更多问题要问,您可能希望在后面的问题中理解这些内容。i需要大写,否则您的问题将无法验证。
#ifndef WIDGETOPENGL_H
#define WIDGETOPENGL_H
#include <QtWidgets/QMainWindow>
#include <QtWidgets/qopenglwidget.h>
#include <QtOpenGL>
#include <GL/GLU.h>
class WidgetOpenGL : public QOpenGLWidget, protected QOpenGLFunctions
{
Q_OBJECT
public:
WidgetOpenGL(QWidget *parent);
signals:
void screenClicked();
protected:
void initializeGL();
void paintGL();
void resizeGL(int w, int h);
void setViewport();
void setProyection();
void setModelView();
private:
int initX;
int initY;
QOpenGLFramebufferObject *frameBuffer;
GLuint buffer;
GLuint renderedTexture;
GLuint renderedDepth;
bool buttonpressed;
QImage image;
GLdouble desplazamientoX;
GLdouble desplazamientoY;
void setRotation();
void mouseMoveEvent(QMouseEvent *event);
void mousePressEvent(QMouseEvent *event);
};
#endif