2011-12-12 3 views
0

저는 C++로 OpenGL 프로젝트를 작성 중이며 GLSL 셰이더 사용 방법을 배우고 싶습니다. 문제는, 내 자신의 쉐이더를 사용하지 않고 프로그램을 완성 할 수는 있지만, 필자는 스스로 작성하고 싶다. (이번에는 자신이로드하는 쉐이더가 없다. OpenGL이 디폴트인지 확실하지 않다.)OpenGL 및 GLSL을 사용하여 색상을 변경하는 방법 (C++)?

정점이 벡터에 저장되고 색상 값이 다른 벡터에 저장되는 이미지에 일련의 선을 그리려면 다음 코드를 사용하여 프레임이 업데이트 될 때마다 실행하고 렌더링합니다. 이를위한 GLUT 디스플레이 기능.

glClear(GL_COLOR_BUFFER_BIT); 
glBegin(GL_LINES); 
vector<point2>::iterator it; 
int c_index = 0; 
for(it=points.begin(); it<points.end(); it++){ 
    if(c_index % 2 == 0) //set color for every pair of points (each line) 
     glColor3f(colors[c_index/2][0], colors[c_index/2][1], colors[c_index/2][2]); 
    c_index++; 

    glVertex2f(it->x, it->y); //set vertex 
} 
glEnd(); 
glFlush(); 

이제 문제는 내가 다른 예제 프로그램에서 발견 된 쉐이더를 사용하려고하면, 색상이 모두 빨간색 (쉐이더가 명시 적으로 어떤 색깔을 정의하지 않더라도)이다. 또한 glColor3f는 아무 것도하지 않습니다.

제 질문은 셰이더를 사용하여 셰이더를 어떻게 사용할 수 있다고 가정할까요? 셰이더는 어떻게 보이고 어떻게로드합니까?

+0

어떤 GLSL 버전을 사용하고 있습니까? (쉐이더 코드에서 #version을 사용하지 않는다면 아마도 GLSL 1.10 일 것입니다.) –

+3

이 코드 스 니펫은 쉐이더와 관련이 없습니다. 우리가 알아야 할 코드는 셰이더 자체, 셰이더 개체 생성 코드 및 유니폼 및 특성 바인딩입니다. – datenwolf

답변

0

분명히 glColor3f를 사용하여 수행 할 수 없습니다. 대신, 나는 미리 결정된 OpenGL 버퍼를 만들고 버퍼 데이터를 셰이더에 보내야했습니다. 내가 원하는대로 "즉시"행해질 수는 없다.

관련 문제