1

OpenGL Superbible 第 5 版最近发布,它记录了 OpenGL 3.3。不幸的是,OS X 只支持 OpenGL 2.1 和 GLSL 1.20 版。他们为您提供的第一个重要的顶点着色器无法编译并显示错误消息:

ERROR: 0:5: '' :  Version number not supported by GL2
ERROR: 0:8: 'in' : syntax error syntax error

着色器是这样写的:

// Simple Diffuse lighting Shader
// Vertex Shader
// Richard S. Wright Jr.
// OpenGL SuperBible
#version 130

// Incoming per vertex... position and normal
in vec4 vVertex;
in vec3 vNormal;

// Set per batch
uniform vec4 diffuseColor; 
uniform vec3 vLightPosition;
uniform mat4 mvpMatrix;
uniform mat4 mvMatrix;
uniform mat3 normalMatrix;

// Color to fragment program
smooth out vec4 vVaryingColor;

void main(void) 
    { 
    // Get surface normal in eye coordinates
    vec3 vEyeNormal = normalMatrix * vNormal;

    // Get vertex position in eye coordinates
    vec4 vPosition4 = mvMatrix * vVertex;
    vec3 vPosition3 = vPosition4.xyz / vPosition4.w;

    // Get vector to light source
    vec3 vLightDir = normalize(vLightPosition - vPosition3);

    // Dot product gives us diffuse intensity
    float diff = max(0.0, dot(vEyeNormal, vLightDir));

    // Multiply intensity by diffuse color
    vVaryingColor.rgb = diff * diffuseColor.rgb;
    vVaryingColor.a = diffuseColor.a;

    // Let's not forget to transform the geometry
    gl_Position = mvpMatrix * vVertex;
    }
4

3 回答 3

4

将 glsl 版本替换为:

#version 120

但在 1.2 中,关键字 in 和 out 尚未定义,它是属性和变化的。

smooth varying vec4 vVaryingColor;

您可能需要在片段着色器中进行类似的更改

对于 vVertex 和 vNormal,这些是自定义名称,这意味着它们已绑定在 C++ 代码中。解决此问题的最简单方法是将它们重命名为 gl_Vertex 和 gl_Normal

于 2010-08-23T07:20:53.210 回答
1

除了更改#versionto 匹配120,您还需要更改intoattributeoutto varying。我可能会想念别的东西,但这就是我现在所看到的一切。

于 2010-08-23T07:19:01.167 回答
0

2011 年更新:从 OS X Lion 开始,情况不再如此。Lion 添加了对 OpenGL 3.2 的支持。

不幸的是,我开始相信这是一个愚蠢的差事。这本书使用了一个 GLTools 库(在网站上分发),它以与 OpenGL 2.1 根本不兼容的方式强制传入各种参数。

如果它是一个例子,它可以被重写,但它是许多例子,如果你试图自学 OpenGL,那么返回的努力将是压倒性的。

你有两个选择:

  1. 购买支持 OpenGL 3 的 Windows 机器,然后将您的 Mac 放在角落里,直到 Apple 支持更新的标准。
  2. 购买该书的第 4 版,该书仍在印刷中。

网站

如果您仍然对 OpenGL 3.x 之前的已弃用功能感兴趣,我们推荐第四版,该版本仍在印刷中,它相当彻底地涵盖了 OpenGL 2.1 和固定功能管道。

于 2010-09-03T07:37:39.463 回答