首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打开GL es1.0。世界坐标到屏幕坐标

打开GL es1.0。世界坐标到屏幕坐标
EN

Stack Overflow用户
提问于 2016-11-07 22:18:20
回答 1查看 91关注 0票数 1

对于3D选择,我计划这样做:

-Get触摸坐标(x,y)

-Choose顶点从我的模型的顶点缓冲区(xM,yM,zM)。

-Then计划由我自己的手(xM,yM,zM)在屏幕上和弦

(xM,yM,zM) -> (xP,yP,.)

然后检查匹配(例如sqrt((x - xP)^2 + (y - yP)^2) < SOME_EPS)

由于投影,我在mProjectionMatrix中保存了Frustum矩阵

代码语言:javascript
复制
gl.glFrustumf(-ratio / q, ratio / q, -1 / q, 1 / q, 1, 25);
Matrix.frustumM(mProjectionMatrix, 0, -ratio / q, ratio / q, -1 / q, 1 / q, 1, 25);

并在mAccRotation中保存转换坐标。

代码语言:javascript
复制
gl.glLoadMatrixf(mAccRotation, 0);

所以测试功能变成了:(TESTIFY_VERT是我的模型中的一个)

代码语言:javascript
复制
public void touch(float x, float y){

    float TESTIFY_VERT[] = {0.0f, 0.0f, -1.5f, 1.0f}; //first vert in L0
    float Resulted[] = new float[4];
    float rMatrix[] = new float[16];

    Matrix.multiplyMM(rMatrix, 0, mProjectionMatrix, 0, mAccRotation, 0);
    Matrix.multiplyMV(Resulted, 0, rMatrix, 0, TESTIFY_VERT, 0);
}

所以我尝试使用Resulted,Resulted1 as (xP,yP)

并尝试使用(结果+ 1) *(宽度/ 2.0f )、(-Resulted1 + 1) *(高度/ 2.0f )

但这不管用。为什么?你能给我个建议吗?

我见过所有这样的问题,他们不回答我的问题。

EN

回答 1

Stack Overflow用户

发布于 2016-11-07 22:22:22

也许你错过了透视分割。Resulted1除以Resulted3,并使用比率as (xP,yP),即:

代码语言:javascript
复制
float xP = Resulted[0] / Resulted[3];
float yP = Resulted[1] / Resulted[3];
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40475696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档