1

OpenGL Superbible 5th Edition が最近リリースされ、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

#versionを matchに変更するだけでなく、 toおよびto120に変更する必要もあります。他の何かを見落としているかもしれませんが、それが今の私にとってのすべてです。inattributeoutvarying

于 2010-08-23T07:19:01.167 に答える
0

Update 2011 : OS X Lion 以降、これは当てはまりません。Lion は OpenGL 3.2 のサポートを追加しました。

残念ながら、これはばかげたことだと思うようになりました。この本では、OpenGL 2.1 とは根本的に互換性のない方法でさまざまなパラメーターの受け渡しを強制する GLTools ライブラリ (Web サイトで配布) を使用しています。

一例なら書き直せますが、例の数が多く、OpenGL を独学で習得しようとすると、その手間が圧倒的にかかります。

次の 2 つのオプションがあります。

  1. OpenGL 3 をサポートする Windows マシンを購入し、Apple が新しい標準をサポートするようになるまで、Mac を隅に置いておきます。
  2. まだ印刷されている本の第 4 版を購入します。

ウェブサイトから:

OpenGL 3.x より前の廃止された機能にまだ興味がある場合は、まだ印刷されており、OpenGL 2.1 と固定関数パイプラインを完全にカバーしている第 4 版をお勧めします。

于 2010-09-03T07:37:39.463 に答える