2012-08-12 2 views
0

포인트를 렌더링하기 위해 GL_POINT를 사용하는 iPhone 게임을 만들고 있습니다. 그러나 점의 중심이 스크린에서 벗어난 경우에도 여전히 화면상의 특정 부분을 그려보고 싶습니다. 여기에 포인트를 렌더링하는 데 사용하는 코드가 있습니다. 그것이 렌더링되어야 할 때 "rendering"를 기록, 그래서이 방법이 제대로 호출지고 있음을센터가 꺼져있을 때 GL_POINT 렌더링되지 않음

-(void)render { 
    if (!fill || !outline || !active || dead) 
     return; 

    NSLog(@"rendering"); 

    glPushMatrix(); 
    glLoadIdentity(); 
    glMultMatrixf(matrix); 

    glEnable(GL_BLEND); 
    glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
    glEnable(GL_SMOOTH); 
    glEnable(GL_POINT_SMOOTH); 

    glPointSize(scale.x*2); 

    [outline render]; 

    glPointSize(2*(scale.x-kLineWidth)); 

    [fill render]; 

    glPopMatrix(); 
} 

참고.

[outline render][fill render] 방법이

-(void)render { 
    // load arrays into the engine 
    glVertexPointer(vertexSize, GL_FLOAT, 0, vertexes); 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glColorPointer(colorSize, GL_FLOAT, 0, colors); 
    glEnableClientState(GL_COLOR_ARRAY); 

    //render 
    glDrawArrays(renderStyle, 0, vertexCount); 

    glDisableClientState(GL_VERTEX_ARRAY); 
    glDisableClientState(GL_COLOR_ARRAY); 
} 

처럼 나는이 코드

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrthof(-kScreenWidth/2.0 + xPan, kScreenWidth/2.0 + xPan, -kScreenHeight/2.0 + yPan, kScreenHeight/2.0 + yPan, -1.0f, 1.0f); 

glMatrixMode(GL_MODELVIEW); 

하지만를 사용하여 "패닝"효과를 사용하고 지점의 중심은 화면 상에없는 경우 (glOrthof으로 패닝 한 후) 전체 점이 그려지지 않습니다. 센터가 화면 상에 있지 않을 때에도 어떻게 포인트를 렌더링 할 수 있습니까?

답변

1

쉽게 해결할 수있는 방법이 없다고 생각합니다. 프리 머 티브는 래스터 화 전에 클리핑되므로 래스터 화가 뷰 프러스 텀 내부에있는 조각을 만들더라도 뷰 프러스 텀 외부에 해당 점이 있으면 래스터 화되지 않습니다.

GL_TRIANGLES/GL_QUADS를 사용하여 실제 쿼드로 전환하거나 실제로 그렇게하고 싶지 않은 경우 뷰포트보다 약간 큰 크기의 오프 스크린 버퍼로 포인트를 렌더링 한 다음 그 중점을 blit 할 수 있습니다 이미지를 메인 프레임으로 되돌립니다.

+0

나는 오프 스크린 버퍼 방법으로 갔다. 괜찮 았어. 감사! –

관련 문제