我真的很喜欢处理 ( http://processing.org )所做的工作,但我更多地接触 .Net 世界并希望留在那里。.Net 中是否有一个库或子语言非常注重艺术家的易用性?
Processing 和 OpenFrameworks 之所以出色,是因为从代码创建动画和其他视觉艺术非常容易,而无需担心其他部分。
我已经开始使用XCode了,它似乎很有用,其中大部分都是如此.
令人讨厌的是它每次都编译所有源文件,甚至那些没有改变的源文件.
我正在接触openframeworks并且每次都浪费时间编译openframeworks源文件,尽管它们没有改变.
这是我的IDE和机器详细信息:
XCode版本3.1.2组件版本Xcode IDE:1149.0 Xcode核心:1148.0 ToolSupport:1102.0
Mac OS X版本10.5.6
有没有人遇到过同样的问题?任何解决方法?
我一直在尝试使用Visual Studio编译oF示例,但我要么缺少一个链接或什么东西..是否有关于如何使用Visual Studio 2010(或2008 - 或任何版本)设置oF的教程?如果没有,有人可以提供有关使用Visual Studio设置oF的分步说明吗?
(不幸的是,oF网站没有提供有关使用VS设置oF的任何信息.他们的VS链接只是告诉你如何下载VS oO http://www.openframeworks.cc/setup/vs-2008)
我需要在openFrameworks应用程序中实现色度键控(删除纯色背景).
我将同时播放许多(10个或更多)视频(在同一帧中),并将它们与替代背景一起绘制到屏幕上.我可以通过迭代每个帧的像素并根据绿色阈值为每个像素设置alpha值来实现类似色度键的效果,但是同时有如此多的视频,这种像素敲击变得令人望而却步.
是否有一个简单的OpenGL混合模式或屏蔽操作,可以避免绘制某个颜色值的所有像素?或者是否有另一个openFrameworks或openFrameworks兼容的C++库可以有效地执行此操作?
或者,是否有一种良好(节省空间)的方式在快速兼容的视频文件中存储alpha通道?我们将存储数TB的视频(连续录制数周),因此我们使用节省空间的格式非常重要.
一个注意事项:源文件中的色度键颜色将是"完美的" - 它是以数字方式添加的.因此,如果有某种阈值处理或按位逻辑技巧可以做到这一点,那也可以.
编辑:这是有效的,遵循VJo的像素着色器的建议.我们使用glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)了以下像素着色器(洋红色作为替换颜色):
"数据/着色器/ chromakey.frag":
#extension GL_ARB_texture_rectangle : enable
uniform sampler2DRect src_tex_unit0;
vec4 color;
void main( void )
{
vec2 st = gl_TexCoord[0].st;
vec4 sample = texture2DRect(src_tex_unit0, st );
gl_FragColor = sample;
if((sample.r > 0.5) && (sample.g < 0.5) && (sample.b > 0.5)) {
gl_FragColor.a = 0.0;
}
}
Run Code Online (Sandbox Code Playgroud)
"数据/着色器/ chromakey.vert":
void main()
{
gl_Position = ftransform();
gl_TexCoord[0] = gl_MultiTexCoord[0];
}
Run Code Online (Sandbox Code Playgroud)
着色器的C++代理类 - shaderChromakey.h:
#include "ofMain.h"
#include "ofxShader.h"
#include "ofxFBOTexture.h"
class …Run Code Online (Sandbox Code Playgroud) 我来自Xcode,尝试在Visual Studio 2010中编译项目,我收到以下错误:
2>ofxCLeye.obj : error LNK2019: unresolved external symbol "struct _GUID __cdecl CLEyeGetCameraUUID(int)" (?CLEyeGetCameraUUID@@YA?AU_GUID@@H@Z) referenced in function "public: static int __cdecl ofxCLeye::listDevices(void)" (?listDevices@ofxCLeye@@SAHXZ)
2>ofxCLeye.obj : error LNK2019: unresolved external symbol "int __cdecl CLEyeGetCameraCount(void)" (?CLEyeGetCameraCount@@YAHXZ) referenced in function "public: static int __cdecl ofxCLeye::listDevices(void)" (?listDevices@ofxCLeye@@SAHXZ)
2>ofxCLeye.obj : error LNK2019: unresolved external symbol "bool __cdecl CLEyeCameraGetFrameDimensions(void *,int &,int &)" (?CLEyeCameraGetFrameDimensions@@YA_NPAXAAH1@Z) referenced in function "public: void __thiscall ofxCLeye::grabFrame(void)" (?grabFrame@ofxCLeye@@QAEXXZ)
2>ofxCLeye.obj : error LNK2019: unresolved external symbol "bool __cdecl CLEyeCameraGetFrame(void *,unsigned char *,int)" (?CLEyeCameraGetFrame@@YA_NPAXPAEH@Z) …Run Code Online (Sandbox Code Playgroud) 我一直试图让这个工作过去几天,我真的开始变得绝望了.我真的很感激你的建议.
我一直在努力做的事情:
问题:
如果我启用片段着色器(水平模糊),我会得到一个模糊的图像渲染到我的四边形第一帧左右,之后它全部变黑.
我怀疑我将纹理传递给着色器的方式有问题:
horizontalBlurVertex.enable();
horizontalBlurFragment.enable();
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, fboTexture);
glUniform1i(glGetUniformLocation(horizontalBlurFragment.program, "RTScene"), 0);
Run Code Online (Sandbox Code Playgroud)
编辑: 另外一条信息:如果我删除glUniform1i(glGetUniformLocation(horizontalBlurFragment.program,"RTScene"),0); 我得到完全相同的结果.我猜这表明我的着色器从未获得任何纹理数据.
来源:
顶点着色器:
varying vec2 vTexCoord;
void main(void)
{
gl_FrontColor = gl_Color;
gl_Position = ftransform();
vec2 Pos;
Pos = sign(gl_Vertex.xy);
gl_Position = vec4(Pos, 0.0, 1.0);
vTexCoord = Pos * 0.5 + 0.5;
}
Run Code Online (Sandbox Code Playgroud)
片段着色器:
uniform sampler2D RTScene;
varying vec2 vTexCoord;
const float blurSize = 1.0/800.0;
const float weightSum = 70.0 + 2.0 * (1.0 + 8.0 + 28.0 + 56.0);
void main(void) …Run Code Online (Sandbox Code Playgroud) 我正在考虑学习Objective-C和Cocoa,主要是为了使用Apple的工具和GUI.
但是,我也想做一些图形编程; OpenFrameworks和Cinder是两个引起我注意的库,但后来我们在C++领域.
我来自Java/Swing/Processing背景......对C系列不太了解.如何有效地从本机Cocoa调用Cinder和C++等C和C++库?
并且,奖励积分:这样的解决方案可以在iPhone或iPad上运行吗?
我想为我的box2d应用程序实现某种子弹时间,谷歌搜索我发现他们建议改变时间步长(如从1/30到1/60),但它很快被标记为不良做法,我需要的所有帖子是一个基本的开/关触发慢动作,任何想法?
我正在尝试使用OpenGL对场景进行离轴投影,并且我将文档读取到了Robert Kooima的离轴投影,现在对于实际需要做的事情有了更好的想法,但仍然有一些部分我觉得这里很棘手.我知道OpenGL的离轴投影代码有点如下:
代码1:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(fNear*(-fFov * ratio + headX),
fNear*(fFov * ratio + headX),
fNear*(-fFov + headY),
fNear*(fFov + headY),
fNear, fFar);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(headX*headZ, headY*headZ, 0, headX*headZ, headY*headZ, -1, 0, 1, 0);
glTranslatef(0.0,0.0,headZ);
Run Code Online (Sandbox Code Playgroud)
如果这是用户位于屏幕中心的正常透视投影,那么我理解的内容相当容易理解.
Screen
|
| h = H/2
|
x----- n -----------
|
| h = H/2
|
Run Code Online (Sandbox Code Playgroud)
当用户在x处并且距离屏幕的距离为n时,glFrustum的顶部,底部坐标将被计算为:(假设theta是视野(fov),我认为假设为30度)
h = n * tan (theta/2);
tanValue = DEG_TO_RAD * theta/2;
[EDIT Line additon here>>]: fFov = tan(tanValue);
h …Run Code Online (Sandbox Code Playgroud) 我在OpenFrameworks图片中遇到此错误.但似乎是一个简单的C++问题.
ofVec2f does not refer to a value
Run Code Online (Sandbox Code Playgroud)
当然我有指针问题,但我不明白为什么.我试图改变& - >*
canvas4.cpp
void Canvas4::createStuff() {
ballCollection.clear();
for (int i=0; i<num; i++) {
ofVec2f org;
org.set(ofRandom(edge, ofGetWidth()-edge), ofRandom(edge, ofGetHeight()-edge));
float radius = ofRandom(50, 150);
ofVec2f loc;
loc.set(org.x+radius, org.y);
float offSet = ofRandom(TWO_PI);
int dir = 1;
float r = ofRandom(1);
if (r>.5) dir =-1;
myBall = new Ball(org, loc, radius, dir, offSet);
ballCollection.push_back(* myBall);
}
//
Run Code Online (Sandbox Code Playgroud)
这是Ball类的构造函数;
Ball::Ball(ofVec2f &_org, ofVec2f &_loc, float _radius, int _dir, float _offSet) {
// **** error …Run Code Online (Sandbox Code Playgroud) openframeworks ×10
c++ ×7
opengl ×3
.net ×1
3d ×1
algorithm ×1
box2d ×1
chromakey ×1
cinder ×1
cocoa ×1
installation ×1
macos ×1
objective-c ×1
pointers ×1
processing ×1
xcode ×1