ofShader shader;
ofImage noiseImage;
float t = 0;
//--------------------------------------------------------------
void ofApp::setup(){
//shader.setupShaderFromFile(GL_FRAGMENT_SHADER, "Ocean.frag"); // No Ball
shader.setupShaderFromFile(GL_FRAGMENT_SHADER, "OceanWithBall.frag"); // With Float Ball
shader.linkProgram();
ofDisableArbTex();
noiseImage.loadImage("noise.png");
noiseImage.getTextureReference().setTextureWrap(GL_REPEAT, GL_REPEAT);
}
//--------------------------------------------------------------
void ofApp::update(){
t += ofGetLastFrameTime();
ofSetWindowTitle(ofToString(ofGetFrameRate()));
}
//--------------------------------------------------------------
void ofApp::draw(){
shader.begin();
shader.setUniform2f("iResolution", (float)ofGetWidth(), (float)ofGetHeight());
shader.setUniform1f("iGlobalTime", t);
shader.setUniformTexture("iChannel0", noiseImage, 0);
shader.setUniform2f("iMouse", (float)ofGetMouseX(), (float)ofGetMouseY());
ofRect(0, 0, ofGetWidth(), ofGetHeight());
shader.end();
}
偶然发现一个很有意思的Shader,代码就上面这些,可以看出只有一个fragment shader,没有任何的geometry输入。
其他所有的处理都是在 Fragment Shader 里面完成的,包括:
波浪的生成,折射/反射,Fresnel,泡沫,甚至球的绘制也是(当初看到还是吓了一跳,完完全全的只有一个Fragment)。
其他所有的处理都是在 Fragment Shader 里面完成的,包括:
波浪的生成,折射/反射,Fresnel,泡沫,甚至球的绘制也是(当初看到还是吓了一跳,完完全全的只有一个Fragment)。