我正在设计自己的增强现实应用程序.我已经检测到我正在使用的模式的4个角.在以正确的顺序检测到4个角后,我将它们传递给cvFindExtrinsicCameraParams2.对于相机框架的旋转和平移,我得到了很好的结果.现在我必须把这些信息(旋转矢量和翻译矢量)放到OpenGL中来绘制一些东西.当然,我正在使用cvRodrigues2从旋转矢量中获取旋转矩阵.除此之外,我用这种方式用QGlWidget观看相机:
GLWidget.h
#ifndef _GLWIDGET_H
#define _GLWIDGET_H
#include <QtOpenGL/QGLWidget>
#include <cv.h>
#include <cxcore.h>
class GLWidget : public QGLWidget {
Q_OBJECT // must include this if you use Qt signals/slots
public:
GLWidget(QWidget *parent = NULL);
IplImage *img;
void setImage(IplImage *imagen);
protected:
void initializeGL();
void resizeGL(int w, int h);
void paintGL();
};
#endif /* _GLWIDGET_H */
Run Code Online (Sandbox Code Playgroud)
GLWidget.cpp
#include <QtGui/QMouseEvent>
#include "GLWidget.h"
GLWidget::GLWidget(QWidget *parent) : QGLWidget(parent) {
this->img = 0;
}
void GLWidget::initializeGL() {
glDisable(GL_TEXTURE_2D);
glDisable(GL_DEPTH_TEST);
glDisable(GL_COLOR_MATERIAL);
glEnable(GL_BLEND);
glEnable(GL_POLYGON_SMOOTH);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glClearColor(0, 0, 0, …Run Code Online (Sandbox Code Playgroud) 我有一个简单程序的问题.我这样打开一个QFileDialog:
QFileDialog fileDialog(this);
fileDialog.setAcceptMode(QFileDialog::AcceptOpen);
if (!fileDialog.exec())
return;
Run Code Online (Sandbox Code Playgroud)
但它显示的是Qt对话框,而不是本机Windows对话框.我使用的是Windows 7 x64,我确实更喜欢原生对话而不是Qt对话,因为它更加花哨.但是我读过,我发现可以通过以下方式更改:
fileDialog.setOption(QFileDialog::DontUseNativeDialog, false);
Run Code Online (Sandbox Code Playgroud)
事实是,我没有获得本机Windows对话框,而是Qt,因此该选项无效......任何人都知道如何在不使用静态成员的情况下解决此问题?
我真的不想使用静态成员,因为它们有一种内存泄漏问题或者某些东西,因为如果你用静态成员重复打开新对话框,程序使用的内存会增加和增加,但是,使用之前存储的对话框用指针没有这个问题.
所以,如果有人对这两件事都有答案(原生对话和内存泄漏问题),请告诉我.
谢谢.
我对 openGL 中的 alpha 混合有疑问...
我已经尝试了一些绘制透明对象的东西......通过在绘制透明面之前禁用 GL_DEPTH_TEST 并在绘制透明面后再次重新启用 GL_DEPTH_TEST ,我看到了一个不错的(理想的)结果......
显然我已经注意到,根据我绘制不同面孔的顺序,我得到了一个结果或另一个......
但是我决定首先在启用 GL_DEPTH_TEST 的情况下绘制实体面,然后在禁用 GL_DEPTH_TEST 的透明面之后...
所以,很明显,如果我在禁用 GL_DEPTH_TEST 的情况下绘制透明面,我会看到内部的透明面(例如立方体),然后
所以,我的问题是......这是正确的吗?OpenGL 是否有一种“神奇”的方式来自动排序不透明和透明的面?