1

Python と OpenGL で視覚研究実験を構築しています。テクスチャのディスプレイスメント マッピングを実行しています。GLSL コードはバージョン 330 と互換性があり、私のマシンでは完全にレンダリングされます。しかし、実験デスクトップでコードを実行すると、何も表示されず、ログに記録されたメッセージやエラーはなく、空白の画面が表示されるだけです。

両方のマシンで次を実行しました。

print "OpenGL version:\t\t%s" % glGetString(GL_VERSION)
print "GLSL version:\t\t%s" % glGetString(GL_SHADING_LANGUAGE_VERSION)
print "Vendor:\t\t\t%s" % glGetString(GL_VENDOR)
print "Renderer:\t\t%s" % glGetString(GL_RENDERER)

私のマシンから、次の出力が得られます。

OpenGL version: 4.0.0 - Build 9.17.10.2867
GLSL version: 4.00 - Build 9.17.10.2867
Vendor: Intel
Renderer: Intel(R) HD Graphics 4000

実験デスクトップから、次の情報が得られます。

OpenGL version: 3.3.0
GLSL version: 3.30 NVIDIA via Cg compiler
Vendor: NVIDIA Corporation
Renderer: Quadro FX 3700/PCIe/SSE2

これは頂点シェーダーとフラグメント シェーダーからの抜粋ですが、何か見落としがありますか?

頂点.shd:

#version 330 compatibility

layout (location = 0) in vec2 vertVertex;
layout (location = 1) in vec2 vertTexCoord;
layout (location = 2) in vec3 vertNormal;

uniform mat4 ModelViewMatrix;
uniform mat4 ProjectionMatrix;

uniform sampler2D heightmap;

out vec4 fragVertex;
out vec2 fragTexCoord;

float convert_luminance(vec4 pixel) {
    return (0.2126 * pixel.r) + (0.7152 + pixel.g) + (0.0722 * pixel.b);
}

vec4 displacement_mapping(void) {
    // Get pixel values for TexCoord
    vec4 pixel = texture2D(heightmap, vertTexCoord.st);
    float grey_value = convert_luminance(pixel);

    // Return displaced position coordinates
    return vec4(vertNormal * grey_value, 0.0) + vec4(vertVertex, 0.0, 0.0);
}

void main(void) {
    fragTexCoord = vertTexCoord.st;
    fragVertex = displacement_mapping();

    gl_Position = ProjectionMatrix * (ModelViewMatrix * fragVertex);
}

フラグメント.shd:

#version 330 compatibility

in vec2 fragTexCoord;
in vec4 fragVertex;

uniform sampler2D colormap;

void main(void) {
    gl_FragColor = texture2D(colormap, fragTexCoord.st);
}
4

0 に答える 0