我正试图从学校设置我的作业,但唯一的指导是针对Windows。我们正在使用Qt进行着色器,我正在使用visual studio代码并使用终端进行编译。问题似乎是我尝试的任何版本的openGL都会遇到同样的错误:
*QOpenGLShader::compile(Vertex): ERROR: 0:1: '' : version '150' is not supported*
我正在使用12月中旬的macbook,因为看起来我正在使用openGL的4.1版本,我尝试了多个版本,如3.3,2.1 4.1等等。似乎没有什么可以做到的。我也试图覆盖版本,但这不起作用。我是以错误的方式看待问题吗?
#version 150 core <----
// input from application
uniform vec3 vecLight;
uniform sampler2D samTexture;
// input from geometry shader
smooth in vec3 normal;
smooth in vec3 vertex;
smooth in vec3 cartescoord;
// material constants
float ka = 0.1;
float kd = 0.6;
float ks = 0.3;
float spec_exp = 50.0;
// useful constants
float PI = 3.14159265;
// output color
out vec4 outFragColor;
vec2 cartesian2normspherical(vec3 cart)
{
float fPhi = 0.0;
float fTheta = 0.0;
float fRadius = length(cart);
fTheta = acos (cart.z / fRadius) / (PI);
fPhi = atan(cart.y, cart.x)/ (PI);
//transform phi from [-1,1] to [0,1]
fPhi = (fPhi+1.0)/2.0;
return vec2(fPhi, fTheta);
}
float calcPhongBlinn(vec3 vecV, vec3 vecN, vec3 vecL)
{
float fLightingIntesity = 1.0;
float fDiffuseIntensity = clamp(dot(normal, vecLight), 0, 1);
vec3 vecHalfway = normalize(vecL + vecV);
float fSpecularIntensity = pow(clamp(dot(vecHalfway, vecN), 0, 1), spec_exp);
fLightingIntesity = ka + kd*fDiffuseIntensity + ks*fSpecularIntensity;
return fLightingIntesity;
}
void main(void)
{
vec2 sphCoord = cartesian2normspherical(cartescoord);
vec2 texcoord = sphCoord.xy;
// this vector is constant since we assume that we look orthogonally at the computer screen
vec3 vecView = vec3(0.0, 0.0, 1.0);
float fI = calcPhongBlinn(vecView, normal, vecLight);
vec4 vecColor = texture2D(samTexture, texcoord.xy);
outFragColor = vec4(vecColor.rgb*fI, 1.0);
}
QOpenGLShader::compile(Vertex): ERROR: 0:1: '' : version '150' is not supported
*** Problematic Vertex shader source code ***
QOpenGLShader: could not create shader
QOpenGLShader::link: ERROR: One or more attached shaders not successfully compiled
运行我的脚本文件:make && ./myMain.app/Contents/MacOS/myMain
Window::Window()
{
QGridLayout *mainLayout = new QGridLayout;
QGLFormat glFormat;
glFormat.setVersion(3, 3);
glFormat.setProfile(QGLFormat::CoreProfile);
glFormat.setSampleBuffers(true);
GLWidget *glWidget = new GLWidget(/*glFormat,0*/);
mainLayout->addWidget(glWidget, 0, 0);
setLayout(mainLayout);
setWindowTitle(tr("Rendering with OpenGL"));
}
经过大量的研究,我得出结论,首先我必须使用openGL v:3.3才能使着色器工作。哪个我的“OpenGl扩展查看器”说我的mac不支持,我仍然想知道是否有漏洞我可以利用。因此,任何有关如何或是否可以做的信息都会有所帮助。
我找到了解决方案,你必须将QGLFormat作为构造函数参数传递给QGLWidget。在这里找到了一些解决方案:
谢谢你的帮助!
复制上面的问题:
经过大量的研究,我得出结论,首先我必须使用openGL v:3.3才能使着色器工作。哪个我的“OpenGl扩展查看器”说我的mac不支持,我仍然想知道是否有漏洞我可以利用。因此,任何有关如何或是否可以做的信息都会有所帮助。
所以最初的问题得到了回答,关于“漏洞”的第二部分应该作为一个单独的问题(与这个问题有关)提出。
更新:
最后编辑:
我找到了解决方案,你必须将QGLFormat作为构造函数参数传递给QGLWidget。在这里找到了一些解决方案:
Qt5 OpenGL GLSL版本错误
谢谢你的帮助!