gpt4 book ai didi

c++ - 着色器未按预期工作

转载 作者:太空宇宙 更新时间:2023-11-04 13:21:45 25 4
gpt4 key购买 nike

在 OpenFrameworks v0.8.3 中使用 OpenGL 3.2/GLSL 150

我正在尝试在我的程序中实现着色器。我的程序成功加载了正确的 frag 和 vert 文件,但我得到了这个故障视觉和错误:

enter image description here

[ error ] ofShader: setupShaderFromSource(): GL_FRAGMENT_SHADER shader failed to compile
[ error ] ofShader: GL_FRAGMENT_SHADER shader reports:
ERROR: 0:39: Use of undeclared identifier 'gl_FragColor'

我读了这个SO answer解释 GLSL 300 不支持 gl_FragColor,但我(很确定我)没有使用该版本。无论如何,当我用 outputColor 变量更改 gl_FragColor 时,我的屏幕只是显示为黑色,没有任何错误。

为什么我的着色器没有按预期出现?我有一种感觉,这要么是我的 .vert 文件/对如何从着色器中绘制形状的根本误解,要么是版本控制问题。

我的简化程序:

.h

#pragma once

#include "ofMain.h" //includes all openGL libs/reqs
#include "GL/glew.h"
#include "ofxGLSLSandbox.h" //addon lib for runtime shader editing capability

class ofApp : public ofBaseApp{

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

ofxGLSLSandbox *glslSandbox; //an object from the addon lib
};

.cpp

#include "ofApp.h"
//--------------------------------------------------------------
void ofApp::setup(){
// create new ofxGLSLSandbox instance
glslSandbox = new ofxGLSLSandbox();

// setup shader width and height
glslSandbox->setResolution(800, 480);

// load fragment shader file
glslSandbox->loadFile("shader"); //shorthand for loading both .frag and .vert as they are both named "shader.frag" and "shader.vert" and placed in the correct dir
}
//--------------------------------------------------------------
void ofApp::draw(){
glslSandbox->draw();
}

.vert(只是意味着传递...如果有意义的话)

#version 150

uniform mat4 modelViewProjectionMatrix;
in vec4 position;

void main(){
gl_Position = modelViewProjectionMatrix * position;
}

.frag(请参阅第三个交互式代码块 this page 以获得预期结果)

#version 150

#ifdef GL_ES
precision mediump float;
#endif

out vec4 outputColor;

uniform vec2 u_resolution;
uniform vec2 u_mouse;
uniform float u_time;

float circle(in vec2 _st, in float _radius){
vec2 dist = _st-vec2(0.5);
return 1.-smoothstep(_radius-(_radius*0.01),
_radius+(_radius*0.01),
dot(dist,dist)*4.0);
}

void main(){
vec2 st = gl_FragCoord.xy/u_resolution.xy;
vec3 color = vec3(circle(st,0.9));
outputColor = vec4( color, 1.0 );
}

最佳答案

我没有看到在任何地方设置统一变量,这意味着它们采用默认值。这意味着您的矩阵全为零。

关于c++ - 着色器未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35024163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com