Ես ուզում եմ կատարել bump/normal/parallax քարտեզագրում, բայց դրա համար ինձ անհրաժեշտ է բազմապատկերում. օգտագործել միանգամից 2 հյուսվածք՝ մեկը գույնի և մեկը՝ բարձրության քարտեզի համար: Բայց այս առաջադրանքի կատարումը անհեթեթորեն խնդրահարույց երևաց։
Ես ունեմ հետևյալ ծածկագիրը vertex shader-ի համար.
#version 330 core
/* 0: in
* 1: out
* 2: uniform
*/
// 0: in
layout (location = 0) in vec3 v_vertexPos;
layout (location = 1) in vec2 v_vertexTexCoord;
// 1: out
out vec2 f_vertexTexCoord;
// 2: uniform
uniform mat4 vertexMvp = mat4( 1.0f );
void main()
{
f_vertexTexCoord = v_vertexTexCoord;
gl_Position = vertexMvp * vec4( v_vertexPos, 1.0f );
}
և առաջին հատվածի համար հետևյալը.
#version 330 core
/* 0: in
* 1: out
* 2: uniform
*/
// 0: in
in vec2 f_vertexTexCoord;
// 1: out
layout (location = 0) out vec4 f_color;
// 2: uniform
uniform sampler2D cTex;
uniform sampler2D hTex;
// #define BUMP
void main()
{
vec4 colorVec = texture2D( cTex, f_vertexTexCoord );
#ifdef BUMP
vec4 bumpVec = texture2D( hTex, f_vertexTexCoord );
f_color = vec4( mix( bumpVec.rgb, colorVec.rgb, colorVec.a), 1.0 );
#else
f_color = texture2D( cTex, f_vertexTexCoord );
#endif
}
Շեյդերները կազմվում և կցվում են շեյդեր ծրագրին: Ծրագիրը այնուհետև կապվում է, այնուհետև օգտագործվում է: Միակ հաղորդված ակտիվ միասնական փոփոխականները glGetActiveUniform են vertex shader-ի միատեսակ vertexMvp-ը և հատվածի մեկ cTex-ը: hTex-ը չի ճանաչվում, և դրա գտնվելու վայրի հարցումը ստացվում է -1: GL_ARB_multitexture OpenGL ընդլայնումն ապահովված է գրաֆիկական քարտով (աջակցում է OpenGL տարբերակը մինչև 4.3):
Փորձարկվել է այստեղ տրված պարզ բազմապատկերային օրինակը, որն ունի միայն հատվածի ստվեր: օգտագործելով ֆոնդային գագաթը մեկ: Այս օրինակն աշխատում է հմայքի պես:
Կա՞ն առաջարկներ: