버텍스 쉐이더 :OpenGL Vertex Attributes, 위치는 작동하지만 텍스코 코드는 작동하지 않습니까?
#version 130
in vec2 position;
in vec2 texcoord;
out vec3 Color;
out vec2 Texcoord;
void main() {
Texcoord = texcoord;
gl_Position = vec4(position, 0, 1);
}
조각 쉐이더 : 내 이미지를 초기화
#version 130
in vec2 Texcoord;
uniform sampler2D texImage;
void main()
{
gl_FragColor = texture2D(texImage, Texcoord);
}
다음에
gl.ClearColor(1, 1, 0, 1)
gl.Clear(gl.COLOR_BUFFER_BIT)
gl.UseProgram(texProgram)
gl.BindBuffer(gl.ARRAY_BUFFER, imgQuadBuffer)
gl.DrawArrays(gl.QUADS, 0, 4)
: 나는 화면으로 끌어
func initImage() {
gl.UseProgram(texProgram)
var vao uint32
gl.GenVertexArrays(1, &vao)
gl.BindVertexArray(vao)
imgQuadData := []float32{
-.5, .5, 0, 0, // Top Left
.5, .5, 1, 0, // Top Right
.5, -.5, 1, 1, // Bottom Right
-.5, -.5, 0, 1, // Bottom Left
}
gl.GenBuffers(1, &imgQuadBuffer)
gl.BindBuffer(gl.ARRAY_BUFFER, imgQuadBuffer)
gl.BufferData(gl.ARRAY_BUFFER, len(imgQuadData)*4, gl.Ptr(imgQuadData), gl.STATIC_DRAW)
posAttrib = gl.GetAttribLocation(texProgram, gl.Str("position\x00"))
gl.EnableVertexAttribArray(uint32(posAttrib))
gl.VertexAttribPointer(uint32(posAttrib), 2, gl.FLOAT, false, 4*4, gl.Ptr(nil))
texAttrib = gl.GetAttribLocation(texProgram, gl.Str("texcoord\x00"))
gl.EnableVertexAttribArray(uint32(texAttrib))
ptr := 2 * 4
gl.VertexAttribPointer(uint32(texAttrib), 2, gl.FLOAT, false, 4*4, gl.Ptr(&ptr))
pixels := []float32{
1, 0, 0, 0, 1, 0, // Red/Green
0, 0, 1, 1, 1, 1, // Blue/White
}
gl.ActiveTexture(gl.TEXTURE0)
gl.GenTextures(1, &bcTexture)
gl.BindTexture(gl.TEXTURE_2D, bcTexture)
gl.TexImage2D(gl.TEXTURE_2D, 0, gl.RGB, 2, 2, 0, gl.RGB, gl.FLOAT, gl.Ptr(&pixels[0]))
gl.Uniform1i(gl.GetUniformLocation(texProgram, gl.Str("texImage\x00")), 0)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)
}
라 ptop 1.30에서 실행되고있어 최신 GLSL 언어 버전이 지원되므로 최신 버전으로 이동할 수 없습니다.
imgQuadData
에는 쿼드의 모서리를 그릴 위치의 X/Y 위치와 해당 모서리에서 텍스처 좌표의 S/T 값을 지정해야합니다. 나는 가지고있는 것을 얻기 위해 this tutorial을 따라 갔다. 나가서 일하고 있지만, go-gl 라이브러리는 C++ GL 호출을 GL 호출로 변환하는 것을 아주 사소한 것으로 만듭니다. 항상 vec2(0, 0)
인 프레 그먼트 쉐이더에서 Texcoord
것처럼
그것은 행동입니다. 프래그먼트 셰이더에서 해당 라인을 Texcoord
대신 vec2(1, 1)
을 사용하도록 변경하면 사각형이 올바르게 색상을 변경합니다. 문제는 imgQuadData
이 S 및 T 값을 0이 아닌 값으로 가져 오는 정점 셰이더에 대해 제대로 파싱되지 않고 그 이유를 이해하지 못하는 것 같습니다.
내 위치 속성을 성공적으로 읽을 수 있지만 texcoord 속성은 항상 0과 같습니까?