텍스처를 사용하지 않고 OpenGL에서 색상을 지정하고 싶습니다. Preferrably 정수 색상 코드를 기반으로 객체를 채색하고 싶습니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까 (java)?OpenGL에서 텍스처링하지 않고 오브젝트의 색상을 지정하는 방법
-2
A
답변
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
일치하도록 변경 것, 정수 색상 코드이 방법을 적용합니다.