2014-09-16 3 views

답변

2

삼각형을 색칠하는 몇 가지 다른 방법이 있습니다. 전통적으로 OpenGL의 기본 색상 지정은 각 꼭지점에 대해 하나의 색상을 지정하는 것이 었습니다. 그러면 기본 색상을 통해 보간됩니다. 조각 쉐이더에서 읽은 균일 한 변수로 색상을 지정할 수도 있습니다. 첫 번째 방법은 더 유연하지만 정점 당 더 많은 데이터가 필요합니다. 유니폼을 통해 색상을 지정하는 것은 모든 객체가 동일한 색상이지만 괜찮은 경우 색상이 다양 할 때 상태가 많이 변경 될 수 있습니다. 정수 색상 코드를 사용하여 지정한 메소드가 둘 사이의 어딘가에 있습니다.

버텍스 당 색상이있는 버텍스 버퍼 객체를 만드는 한 가지 방법이 있습니다. 오랫동안 자바를 작성하지 않았기 때문에 잘못된 구문이 있으면 제 사과합니다. C는 ++) : 당신이 렌더링에 갈 때

다음
glBindBuffer(GL_ARRAY_BUFFER, VBO); 
ArrayList<vertex> vertexData; 
<.....fill vertex data.....> 

struct GPUVertex{ 
    GLfloat position[4]; 
    GLfloat color[4]; 
} 
ArrayList<GPUVertex> VBOData = new ArrayList<GPUVertex>(vertexData.size()); 

for(int i=0; i<vertexData.size(); i++){ 
    VBOData[i].position[0] = vertexData[i].x; 
    VBOData[i].position[1] = vertexData[i].y; 
    VBOData[i].position[2] = vertexData[i].z; 
    VBOData[i].position[3] = 1.0; 

    VBOData[i].color[*] = ...some color... 
} 

glBufferData(GL_ARRAY_BUFFER, VBOData.size()*sizeof(GPUVertex), &(VBOData[0]), GL_STATIC_DRAW); 
glBindBuffer(GL_ARRAY_BUFFER, 0); 

, 당신이 그림을위한 VBO를 바인딩 할 때 glEnableVertexAttribArray(0/1)glVertexAttribPointer(0/1, 3, GL_UNSIGNED_INT, 24, 0/12)를 호출해야합니다. 그런 다음, 여분의 layout(location=1) in vec3 vertColor을 꼭지점 셰이더에 추가하고, 그 결과를 out vec4 fragColor과 같은 변수를 프래그먼트 셰이더에 전달해야합니다.

당신은 색상 표를 지정뿐만 아니라, 다음, 정수 색상 코드에 GPUVertex 구조 GLfloat color[4]을 변경 glVertexAttribPointer(...), layout(location=1)...out...fragColor 일치하도록 변경 것, 정수 색상 코드이 방법을 적용합니다.

관련 문제