2012-02-21 7 views
2

OpenGLで新しくなったのは、iOS 5でGL_Lit_LOOPを使ってGLKitを使って行を表示するのに成功しましたが、GL_POINTSで表示すると問題が起こります。具体的には、1つのピクセル以外は表示できません。私は成功しなかったので、誰かが私が逃していることを指摘することを望んでいるWebを洗った。お時間をGLKit(iOS 5)でGL_POINTSを使用する

ここに私のテストコードがある...

//positions and colors, vertices and indices... 
typedef struct { 
    float Position[2]; 
    float Color[4]; 
} Vertex; 

const Vertex Vertices[] = { 
    {{50, 50}, {0, 0, 1, 1}}, 
    {{200, 50}, {0, 0, 1, 1}}, 
    {{200, 200}, {0, 0, 1, 1}}, 
    {{50, 200}, {0, 0, 1, 1}} 
}; 

const GLubyte Indices[] = { 
    0, 1, 2, 3 
}; 


@interface AppViewController() { 
    GLuint _vertexBuffer; 
    GLuint _indexBuffer; 
} 

... 
//some unrelated properties, the @implementation and other methods 
... 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; 
    if (!self.context) NSLog(@"Failed to create ES context"); 

    GLKView *view = (GLKView *)self.view; 
    view.context = self.context; 
    [EAGLContext setCurrentContext:self.context]; 

    self.effect = [[GLKBaseEffect alloc] init]; 

    GLKMatrix4 projectionMatrix = GLKMatrix4MakeOrtho(0, self.view.bounds.size.width, 0, self.view.bounds.size.height, -1024, 1024); 
    self.effect.transform.projectionMatrix = projectionMatrix; 

    glGenBuffers(1, &_vertexBuffer); 
    glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer); 
    glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_STATIC_DRAW); 

    glGenBuffers(1, &_indexBuffer); 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _indexBuffer); 
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(Indices), Indices, GL_STATIC_DRAW); 
} 

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {  
    glClearColor(1, 1, 1, 1); 
    glClear(GL_COLOR_BUFFER_BIT); 

    [self.effect prepareToDraw]; 

    glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer); 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _indexBuffer); 

    glEnableVertexAttribArray(GLKVertexAttribPosition);   
    glVertexAttribPointer(GLKVertexAttribPosition, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (const GLvoid *) offsetof(Vertex, Position)); 
    glEnableVertexAttribArray(GLKVertexAttribColor); 
    glVertexAttribPointer(GLKVertexAttribColor, 4, GL_FLOAT, GL_FALSE, sizeof(Vertex), (const GLvoid *) offsetof(Vertex, Color)); 

    //this worked for drawing my lines... 
    //glLineWidth(10); 
    //glDrawElements(GL_LINE_LOOP, sizeof(Indices)/sizeof(Indices[0]), GL_UNSIGNED_BYTE, 0); 

    //this does NOT work for drawing 10-pixel points. single pixel only. 
    glEnable(GL_POINT_SMOOTH); 
    glPointSize(10); 
    glDrawElements(GL_POINTS, sizeof(Indices)/sizeof(Indices[0]), GL_UNSIGNED_BYTE, 0); 
} 

ありがとう!

答えて

7

glPointSize()はOpenGL ES 2.0の一部です。

は、あなたの頂点シェーダに... ...

gl_PointSize = 10.0; //has to be a floating point value 

を設定してみてください。

+0

値が浮動小数点値でなければならないか、「型の不一致が発生しました。「int」から「float」に変換できません。 GLSLはjavaではなく、値だけを変換しません。 –

関連する問題