1

第一次在 iOS 上潜入 OF ......令人兴奋!作为第一次运行,我试图将我之前制作的应用程序移植到 iOS 应用程序中。它对来自摄像机的视频产生了一种非常简单的类似 rutt etra 的效果。我将它作为 Mac 应用程序运行,但我似乎无法让它在我的 iPhone 上正确显示。网格正在绘制,但我认为我没有将像素值从相机获取到 vidPixels 以更改网格的颜色。我基于 OF iOS 0072 中的 videoGrabberExample。我在运行 Xcode 4.5.2 的 MacBook Pro 10.7.5 上。

任何人都可以看看这个,让我知道我是否做错了什么?:) 提前非常感谢。

代码:

测试应用程序.mm

#include "testApp.h"
#include "ofGLUtils.h"
#include "ofGLRenderer.h"

//--------------------------------------------------------------
void testApp::setup(){  
ofxiPhoneSetOrientation(OFXIPHONE_ORIENTATION_LANDSCAPE_RIGHT);

ofSetFrameRate(30);

grabber.initGrabber(480, 360);

yStep = 5;
xStep = 5;

  //  drawRuttEtra = false;

ofBackground(0, 0, 0);

}

//--------------------------------------------------------------
void testApp::update(){
//ofBackground(255,255,255);

grabber.update();

if(grabber.isFrameNew()){
vidPixels = grabber.getPixelsRef();
}

}

//--------------------------------------------------------------
void testApp::draw(){   

glEnable(GL_DEPTH_TEST);

    ofMesh mesh;

    int rowCount = 0;
    for (int y = 0; y<grabber.height; y+=yStep){
        ofNoFill();
        mesh.setMode(OF_PRIMITIVE_LINE_STRIP);

        if (rowCount % 2 == 0) {
            for (int x = 0; x < grabber.width; x += xStep){
                ofColor curColor = vidPixels.getColor(x, y);
                mesh.addColor(ofColor(curColor));
                mesh.addVertex(ofVec3f(x,y, curColor.getBrightness() * 0.3));
            }
        } else {
            for (int x = grabber.width-1; x >= 0; x -= xStep){
                ofColor curColor = vidPixels.getColor(x, y);
                mesh.addColor(ofColor(curColor));
                mesh.addVertex(ofVec3f(x,y, curColor.getBrightness() * 0.3));                    }
        }
        rowCount++;
    }
    mesh.draw();
   // grabber.draw(0,0);
}

测试应用程序.h

#pragma once

#include "ofMain.h"
#include "ofxiPhone.h"
#include "ofxiPhoneExtras.h"

class testApp : public ofxiPhoneApp{

public:
    void setup();
    void update();
    void draw();
    void exit();

    void touchDown(ofTouchEventArgs & touch);
    void touchMoved(ofTouchEventArgs & touch);
    void touchUp(ofTouchEventArgs & touch);
    void touchDoubleTap(ofTouchEventArgs & touch);
    void touchCancelled(ofTouchEventArgs & touch);

    void lostFocus();
    void gotFocus();
    void gotMemoryWarning();
    void deviceOrientationChanged(int newOrientation);

    ofVideoGrabber grabber;
    ofTexture tex;
    unsigned char * pix;

    //rutt etra effect

    int yStep;
    int xStep;
    bool drawRuttEtra;

    ofPixels vidPixels;

};

主要.mm

#include "ofMain.h"
#include "testApp.h"

int main(){
ofSetupOpenGL(1024,768, OF_FULLSCREEN);         // <-------- setup the GL context
ofRunApp(new testApp);
}

我尝试进行一些调试以查看可能发生的情况。

我想确保 ifFrameNew() 有效。试:

if(grabber.isFrameNew()){  
   cout<< "i'm grabbing new pixels!" << endl;  
vidPixels = grabber.getPixelsRef();  
} 

打印“我正在抓取新像素!”,这样如果块正在工作。

在我的双 for 循环中,如果我计算 vidPixels.getColor(x,y) 的值

cout<<vidPixels.getColor(x,y) << endl;

我得到了所有 255 ......这让我觉得 grabber.getPixelsRef() 没有按我认为的那样工作。

有任何想法吗?

4

0 回答 0