2017-11-15 2 views
-1

저는 Ed Angel에서 "Interactive Computer Graphics"를 따르고 있습니다. 특히 질감이있는 큐브를 회전시키는 코드입니다.버전 440 코어에서 텍스처가있는 큐브를 그리는 꼭지점 및 조각 쉐이더는 무엇입니까?

#version 150 
in vec4 vPosition; 
in vec4 vColor; 
in vec2 vTexCoord; 

out vec4 color; 
out vec2 texCoord; 
uniform vec3 theta; 
void main() 
{ 
........ 
........ 
// code for rotation 
........ 
color = vColor; 
texCoord = vTexCoord; 
gl_Position = rz * ry * rx * vPosition; 
} 

을 그리고 조각 쉐이더 코드는 다음과 같습니다 :

#version 150 
in vec4 color; 
in vec2 texCoord; 
out vec4 fColor; 
uniform sampler2D texture; 
void main() 
{ 
fColor = color * texture2D(texture, texCoord); 
} 

[전체 코드에 대한 링크가 here입니다 다음과 같이 이에 대한 버텍스 쉐이더는 (책 등)입니다. example 8 코드를 살펴보십시오.

#version 440 core을 사용하여 구현하려고합니다. 이걸 실행할 때 검은 색 큐브 만 얻습니다. 텍스처가 표시되지 않습니다.

질감을 올바르게 표시하려면 위 코드를 어떻게 변경해야합니까?

+0

texture2D를 텍스처로 변경합니다 (그러나 이것은 사소한 것입니다). 사실 셰이더가 버전과 호환되지 않으면 컴파일러 오류가 발생합니다. – BDL

+0

@BDL 나는 그것도 시도했다. 그러나 결과는 같습니다. – Majis

+0

'fColor = vec4 (1.0);'으로 시도하십시오. 이 방법으로 하얀 큐브를 얻으면 문제는 텍스처가 생성/업로드/바인딩되는 방식 일 것입니다. – bernie

답변

0

cpp가 코드이 줄 :

glutInitContextVersion(3, 2); 

이 문제입니다. glsl 버전 440에는 OpenGL 4.4 컨텍스트가 필요합니다. 로 변경 :

glutInitContextVersion(4, 4); 

그리고 현대화 셰이더 코드에 따라 :

GLSL Specification

을 그리고 그것을 잘 작동합니다.

+0

나는 이미이 코드를 작성했지만 결과는 같습니다. 텍스처 로딩을위한 코드가 glsl 버전'440'에 대해 동일하다면, 나는 올바르게 코딩했다고 생각합니다. 셰이더 코드를 사용하면 @bernie에 대한 제 응답을 참조하십시오. – Majis

+0

당신은 어떤 dev 툴을 사용하고 있습니까 (그리고 어떤 gpu를 가지고 있습니까?)? –

+0

그리고 다른 답변과 일치하여 텍스처로드, 설정 및 사용 코드 게시 –

관련 문제