标签: openframeworks

保存openGL FBO大于窗口的问题

我正在渲染到OpenGL屏幕外的帧缓冲对象,并喜欢将其保存为图像.请注意,FBO大于显示尺寸.我可以渲染到屏幕外缓冲区并将其用作纹理,这是有效的.我可以使用偏移量通过显示"滚动"这个更大的纹理,这让我充满信心,我渲染到比窗口更大的上下文.

如果我将屏幕外缓冲区保存到图像文件,它总是会被裁剪.保存的代码片段是:

void ofFBOTexture::saveImage(string fileName) { 
    glReadBuffer(GL_COLOR_ATTACHMENT0_EXT); 
    // get the raw buffer from ofImage
    unsigned char* pixels = imageSaver.getPixels();
    glReadPixels(0, 0, 1024, 1024, GL_RGB, GL_UNSIGNED_BYTE, pixels); 

    imageSaver.saveImage(fileName); 
} 
Run Code Online (Sandbox Code Playgroud)

请注意,图像内容被裁剪,可见部分被正确保存(这意味着像素格式没有错误,GL_RGB问题等),但剩余空间用一种颜色填充.

所以,我的问题是 - 我做错了什么?

opengl fbo openframeworks

10
推荐指数
1
解决办法
3544
查看次数

以通用方式重试方法调用

我的Java应用程序需要在远程调用失败时使用重试逻辑.这些远程呼叫是:

  • 散落在整个应用程序中
  • 属于不同的远程服务类.

而且,重试逻辑可以具有变化的重试间隔和变化的重试尝试.

我需要一个通用的retry()实现,它可以根据调用的位置进行适当的方法调用.下面是我正在寻找的简单代码示例.我知道我们可以尝试使用java反射来实现这一点,但是,是否有一个可以读取使用的框架或开源?

try {
 ClassA objA = remoteServiceA.call(paramA1, paramA2, ...);
} catch (Exception e){
 ClassA objA = (ClassA)retry(remoteService, listOfParams, ..); // generic method call
}
..

try {
 ClassB objB = remoteServiceB.call(paramB1, paramB2, ...);
} catch (Exception e){
 ClassA objB = (ClassB)retry(remoteService, listOfParams, ..); // generic method call
}
Run Code Online (Sandbox Code Playgroud)

java reflection frameworks openframeworks

8
推荐指数
2
解决办法
9371
查看次数

FFmpeg - 将一个视频叠加到另一个视频上?

我知道这是一个非常开放的问题.我已经对FFmpeg进行了一些初步阅读,但现在需要一些指导.

问题

  • 我有一个视频input.mov.
  • 我想覆盖另一个视频overlay.wov.
  • 结果应该是单个视频(output.mov).

笔记

谢谢 - C.

编辑

  1. 后端是Go/Ruby.打开使用新语言.
  2. 应保留第一个视频的音频.
  3. 设置叠加开始的间隔会很棒.

现行解决方案

ffmpeg -i input.mov -i overlay.mov -filter_complex "[0:0][1:0]overlay[out]" -shortest -map [out] -map 0:1 -pix_fmt yuv420p -c:a copy -c:v libx264 -crf 18  output.mov
Run Code Online (Sandbox Code Playgroud)

然而,这几乎可行:

  • 即使两个视频(input.mov&overlay.mov)长度相同,叠加也会缩短.
  • 除了之外,我无法以任何间隔启动叠加层0:00.

processing video ffmpeg video-processing openframeworks

8
推荐指数
1
解决办法
1万
查看次数

倾斜的平截头体/离轴投影用于OpenGL中的头部跟踪

我正在尝试在我的应用程序中进行离轴投影,并尝试根据用户的头部位置更改场景的视角.通常情况下,鉴于我必须在屏幕上画一个方框,我会在屏幕上画一个方框:

ofBox(350,250,0,50); //ofBox(x, y, z, size); where x, y and z used here are the screen coordinates
Run Code Online (Sandbox Code Playgroud)

要在这里进行离轴投影,我知道我必须更改透视投影,如下所示:

vertFov = 0.5; near = 0.5; aspRatio = 1.33;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(near * (-vertFov * aspRatio + headX),
          near * (vertFov * aspRatio + headX),
          near * (-vertFov + headY),
          near * (vertFov + headY),
          near, far); //frustum changes as per the position of headX and headY
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(headX * headZ, headY * headZ, 0, headX * headZ, headY * headZ, …
Run Code Online (Sandbox Code Playgroud)

c++ opengl 3d openframeworks

7
推荐指数
1
解决办法
4161
查看次数

C++ - 无法将默认参数添加到类模板成员的外联定义中

我有一个iOS应用程序,它使用MPL的一个名为'square.h'的C++类,每当我构建应用程序时Xcode都会抛出此错误 -

无法将默认参数添加到类模板成员的外联定义中

现在,我对C++语法的理解很少,那么这个错误意味着什么呢?

有问题的线在下面 -

template <class T> 
TSquare<T>::TSquare (T size_, T x_, T y_, T scale_=0)
{
    size = size_;
    x = x_;
    y = y_;
    scale = scale_;
}
Run Code Online (Sandbox Code Playgroud)

c++ openframeworks ios

7
推荐指数
2
解决办法
2637
查看次数

在windowResized()中调用SetWindowShape()冻结了Ubuntu上的应用程序

我试图使窗口得到调整大小按比例之间保持相同的比例widthheight窗口.

例如,如果您创建了一个具有400x300尺寸的窗口,并且如果您将宽度拉伸到800,则600即使您只是水平拉伸窗口,高度也会自动拉伸到.

无论如何,为了实现这个功能,我需要使用ofSetWindowShape()内部windowResized()监听器.

我可以在MacOS X上快速对其进行原型设计并且效果非常好.

这是代码:

ofApp.h

enum ScaleDir { //window scaling directions

    SCALE_DIR_HORIZONTAL,
    SCALE_DIR_VERTICAL,
};
ScaleDir scaleDir;

int windowWidth, windowHeight; //original window dimensions
float widthScaled, heightScaled; //scaled window dimensions
float windowScale; //scale amount (1.0 = original)
bool bScaleDirFixed; //is direction fixed?
Run Code Online (Sandbox Code Playgroud)

ofApp.cpp

//--------------------------------------------------------------
void ofApp::setup(){

    windowWidth = ofGetWidth();
    windowHeight = ofGetHeight();
    windowScale = 1.0f;
    widthScaled = windowWidth * windowScale;
    heightScaled = windowHeight * windowScale;
} …
Run Code Online (Sandbox Code Playgroud)

c++ openframeworks

7
推荐指数
1
解决办法
174
查看次数

按位运算符并将int转换为2个字节并再次返回

第一次用户,大家好!

所以希望有人可以提供帮助..我的背景是php所以输入低端的东西,如char,是字节,这是位...这是二进制值..等等需要一些时间才能得到好处;)

我试图在这里做的是从Ardunio板发送到openFrameWorks的一些值(都是c ++).

当被要求发送数据时,此脚本当前所做的事情(并且适用于我可能添加的一个传感器)是...

int value_01 = analogRead(0);  // which outputs between 0-1024

 unsigned char val1;
 unsigned char val2;

//some Complicated bitshift operation           
    val1 = value_01 &0xFF;
    val2 = (value_01 >> 8) &0xFF;  

    //send both bytes
    Serial.print(val1, BYTE);
    Serial.print(val2, BYTE);
Run Code Online (Sandbox Code Playgroud)

显然这是获取数据的最可靠方式..所以现在它是通过串口发送的,字节被添加到一个字符串中并由...转换回来.

int num = ( (unsigned char)bytesReadString[1] << 8 | (unsigned char)bytesReadString[0] );
Run Code Online (Sandbox Code Playgroud)

那么回顾一下,我试图获得4个传感器的数据(我假设这些序列中有8个?)并且在它的末尾有int num_01 - num_04 ....

我假设这个(和大多数事情一样)对于有这些概念经验的人来说可能很容易.

任何帮助将不胜感激.谢谢

c++ bit-manipulation arduino openframeworks

6
推荐指数
1
解决办法
1万
查看次数

Phong Shader中不需要的透明度 - GLSL

我正在尝试创建一个基本的Phong灯光着色器,以了解着色器中的灯光.另外,我正在使用openframeworks.我创造了3个立方体,它们围绕它们旋转.照明似乎正在起作用(sorta),但是立方体具有不必要的透明度,您可以在此处看到:

在此输入图像描述

这是我的代码,它基于本教程

testApp.h

#pragma once

#include "ofMain.h"

class testApp : public ofBaseApp{

public:

ofCamera camera;
ofLight pointLight;
float camAngle;
float camX;
float camY;
float camZ;

ofShader lightShader;

ofBoxPrimitive box1;
ofBoxPrimitive box2;
ofBoxPrimitive box3;

void setup();
void update();
void draw();
};
Run Code Online (Sandbox Code Playgroud)

testApp.cpp

#include "testApp.h"

//--------------------------------------------------------------
void testApp::setup()
{
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);

ofBackground(100, 100, 100);
ofSetFrameRate(30);

camera.setNearClip(0.1);
camera.setFarClip(1200);
camAngle = 0;
camX = 200;
camY = 150;
camZ = 200;

pointLight.setPointLight();

lightShader.load("shaders/lightShader");

//boxes setup here, not necessary to show

}

//--------------------------------------------------------------
void …
Run Code Online (Sandbox Code Playgroud)

c++ opengl shader glsl openframeworks

6
推荐指数
1
解决办法
698
查看次数

有我可以使用 opengl 3+ 的虚拟机吗?virtualbox 和 vmware 没有

我正在尝试在 VM 中编写一些 openFrameworks (C++) 代码。我的主机是 Windows 8,我已经尝试了 Arch Linux 和 Ubuntu 来宾。我的主机使用 NVidia Optimus 设置和 8GB 内存运行图形代码就好了。

我在 Visual Studio 中进行主要开发,但是我更喜欢从 Linux 创建 Android 和测试包。出于这个原因,我只想启动一个虚拟机并处理业务。问题是我的一些图形应用程序需要 OpenGL 3+

有没有其他人遇到过同样的问题并解决了它?

c++ vmware virtualbox virtual-machine openframeworks

6
推荐指数
2
解决办法
1万
查看次数

将双鱼眼视频转换为equirectangular

我使用开放框架将双鱼眼视频(从ricoh theta S相机接收)转换为equirectangular格式(适用于iOS应用程序).

双鱼眼图像样本: 在此输入图像描述

equirectangular图像样本: 在此输入图像描述

我使用下面的着色器:

equirectangular.frag

  // based on ThetaShaderPack_20150926 (http://stereoarts.jp/) written by Nora.
#ifdef GL_ES
// define default precision for float, vec, mat.
precision highp float;
#endif

#define PI 3.14159265358979
#define _THETA_S_Y_SCALE    (640.0 / 720.0)

uniform sampler2D mainTex;
uniform float radius;
uniform vec4 uvOffset;

varying vec2 texCoordVarying;

void main (void) {
    vec2 revUV = texCoordVarying.st;
    if (texCoordVarying.x <= 0.5) {
        revUV.x = revUV.x * 2.0;
    } else {
        revUV.x = (revUV.x - 0.5) * 2.0;
    }

    revUV *= …
Run Code Online (Sandbox Code Playgroud)

fisheye openframeworks ios theta360

6
推荐指数
1
解决办法
1796
查看次数