iOS:如何从 opengl 模型 View 和投影矩阵获取屏幕坐标(X,Y 点)?

标签 ios opengl-es opengl-es-2.0

我有模型 View 矩阵、项目 View 矩阵和位置槽以及方形顶点。我想获取 iPhone 屏幕中正方形的屏幕坐标(X、Y 点)。

static GLfloat rectVerts[] = {-0.1f,  -0.1f, 0.0f,-0.1f,
    0.1f, 0.0f,0.1f, 0.1f,
    0.0f,0.1f, -0.1f, 0.0f
    ,0.0f,0.0f,0.0f,1.0f};
GLKVector4 position_Vector = GLKVector4MakeWithArray(rectVerts);

float p_clip[4];
for (int i=0;i<4;i++){
    p_clip[i]=0;
}
for (int i=0;i<4;i++){
    for (int j=0;j<12;j++){
        p_clip[i] += ( modelViewprojection.m[i + j] * position_Vector.v[j]);
    }
}
float p_ndc[4];
p_ndc[0] = p_clip[0] / p_clip[3];
p_ndc[1] = p_clip[1] / p_clip[3];
p_ndc[2] = p_clip[2] / p_clip[3];
p_ndc[3] = p_clip[3] / p_clip[3];

GLint view[4]={0};
glGetIntegerv(GL_VIEWPORT,view);
CGRect rect =  CGRectMake(view[0], view[1], view[2], view[3]);
float x = (rect.origin.x + rect.size.width) *  (p_ndc[0] + 1) /2;
NSLog(@"Test x = %f",x);

引用附件enter image description here

最佳答案

只需遵循转换步骤:

p_clip = P · MV · p
p_ndc = p_clip/p_clip.w
p_viewport.xy = viewport.xy + viewport.wh · (p_ndc.xy + 1) / 2

关于iOS:如何从 opengl 模型 View 和投影矩阵获取屏幕坐标(X,Y 点)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43318811/

相关文章:

android - 在 OpenGL ES Android 中加载模型的最快方法是什么?

iphone - 如何修复首次使用着色器时的延迟?

ios - 数组类型 'int [16]' 不可分配

ios - 如何在 iOS 中获取触摸大小?

ios - 移动 Swift 数组

c - Linux opengl es 2.0 来自 windows

c++ - Eigen 透视投影矩阵

iPhone App - 关闭模态视图 Controller 不会释放它

android - android.opengl 和 javax.microedition.khronos.opengles 包之间有什么区别?

javascript - WebGL中GLMAT_ARRAY_TYPE()的作用是什么?