在iOS OpenGL ES应用程序中居中所有点

在iOS OpenGL ES应用程序中居中所有点,ios,matrix,opengl-es,shader,Ios,Matrix,Opengl Es,Shader,我有一个OpenGL视图,它显示一组带有一些基本着色器的3D点: // Fragment Shader static const char* PointFS = STRINGIFY ( void main(void) { gl_FragColor = vec4(0.8, 0.8, 0.8, 1.0); } ); // Vertex Shader static const char* PointVS = STRINGIFY ( uniform mediump mat4 uPr

我有一个OpenGL视图,它显示一组带有一些基本着色器的3D点:

// Fragment Shader

static const char* PointFS = STRINGIFY
(

 void main(void)
{
    gl_FragColor = vec4(0.8, 0.8, 0.8, 1.0);
}

);

// Vertex Shader

static const char* PointVS = STRINGIFY
(
 uniform mediump mat4 uProjectionMatrix;

 attribute mediump vec4 position;

 void main( void )
{
    gl_Position = uProjectionMatrix * position;
    gl_PointSize = 3.0;
}

);
MVP矩阵计算如下:

- (void)setMatrices
{
    // ModelView Matrix
    GLKMatrix4 modelViewMatrix = GLKMatrix4Identity;
    modelViewMatrix = GLKMatrix4Scale(modelViewMatrix, 2, 2, 2);

    // Projection Matrix
    const GLfloat aspectRatio = (GLfloat)(self.view.bounds.size.width) / (GLfloat)(self.view.bounds.size.height);
    const GLfloat fieldView = GLKMathDegreesToRadians(90.0f);
    const GLKMatrix4 projectionMatrix = GLKMatrix4MakePerspective(fieldView, aspectRatio, 0.1f, 10.0f);

    glUniformMatrix4fv(self.pointShader.uProjectionMatrix, 1, 0, GLKMatrix4Multiply(projectionMatrix, modelViewMatrix).m);
}
这很好,但是我有一组500个点,我只看到少数点


如何缩放/转换MVP矩阵以显示所有MVP矩阵(它们是动态集合)?理想情况下,“质心”应位于原点,且所有点均可见。它应该能够适应视图的旋转(手势是我想要实现的下一步)。

看看你是如何呈现这一点的,你可能需要很多。。。我想最好的方法可能是使用“看”,你看的点是
(0,0,0)
,正如你所说的,相机的位置应该是
(0,0,Z)
和向上
(0,1,0)
。所以这里唯一的问题是摄像机位置的Z分量


如果以例如
-.1
开始Z,并迭代所有点,则
sin(fieldView*.5f)*(p.Z-Z)>=point.y
使点可见。因此,您可以计算
Z1=p.z-(点y/sin(fieldView*.5f))
如果
Z1Wow,这是一个很好的答案。我会花点时间检查一下,然后再回来。谢谢,我仍然没有让它工作,但我不知怎么地认为z值在截锥体之外,这就是为什么我看不到它们。通过翻译-(zFar/2)我可以看到一些东西。可能翻译有一个错误的符号(你看错了方向)尝试一个负值。或者,如果您使用“查看”对位置向量执行相同的操作。好的,这里的大欢呼时刻,总是将4传递给
glDrawArrays
方法,这就是为什么它没有显示所有的点O_O-也就是说模型似乎总是以平截头体方式居中,但点在屏幕上“闪烁”的原因,这与视图有关吗?闪烁不应相关。尝试在draw调用之前记录制服和属性,并检查两个连续帧之间是否存在差异。还有一些潜力是在混合设置,颜色设置。。。