- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有以下方法,当用户单击屏幕上的某个位置时会调用该方法:
public void setup(int xi, int yi){
int f = 0;
PerspectiveCamera camera = new PerspectiveCamera();
camera.setViewport(320, 508);
camera.update();
Ray touch = camera.getPickRay(xi, yi);
while(f < GLCamTest.array.length){
//Vertex 1
float x1 = GLCamTest.array[f];
f++;
float y1 = GLCamTest.array[f];
f++;
float z1 = GLCamTest.array[f];
f++;
//Vertex 2
float x2 = GLCamTest.array[f];
f++;
float y2 = GLCamTest.array[f];
f++;
float z2 = GLCamTest.array[f];
f++;
//Vertex 3
float x4 = GLCamTest.array[f];
f++;
float y4 = GLCamTest.array[f];
f++;
float z4 = GLCamTest.array[f];
f++;
//Vertex 4
float x5 = GLCamTest.array[f];
f++;
float y5 = GLCamTest.array[f];
f++;
float z5 = GLCamTest.array[f];
f++;
Intersector sect = new Intersector();
float z3 = 10;
//Mid-point formula
float x3 = (x2+x4)/2;
float y3 = (y2+y4)/2;
//Triangle one is (x1,y1), (x2,y2), (x3, y3)
//Triangle two is (x4, y4), (x5, y5), (x3, y3)
//Now, I have my 2 tri-angles I need for the
// Polygon test..
Vector3 t1 = new Vector3(x1,y1,z1);
Vector3 t2 = new Vector3(x2,y2,z2);
Vector3 t3 = new Vector3(x3,y3,z3);
Vector3 t4 = new Vector3(x4,y4,z4);
Vector3 t5 = new Vector3(x5,y5,z5);
if(sect.intersectRayTriangle(touch, t1, t2, t3, t4)
== true){
System.out.println("TOUCHED AN OBJECT!!");
if (f <= 12){
System.out.println("SQUARE 1");
} else if(f <= 24 && f >=13){
System.out.println("SQUARE 2");
} else if(f <= 36 && f >= 25){
System.out.println("SQUARE 3");
}
}
if(sect.intersectRayTriangle(touch, t4, t5, t3, t1)
== true){
System.out.println("TOUCHED AN OBJECT!!");
if (f <= 12){
System.out.println("SQUARE 1");
} else if(f <= 24 && f >=13){
System.out.println("SQUARE 2");
} else if(f <= 36 && f >= 25){
System.out.println("SQUARE 3");
}
}else{
System.out.println("NO TOUCH");
}
}
f = 0;
}
基本上,该类接收被点击的屏幕坐标,设置视口(viewport)和所有矩阵,然后生成射线。生成射线后,它会获取每个顶点并将其放入自己的 Vector3
中,然后测试射线是否与任何点相交。该方法表示光线在屏幕上的某些点处与 “SQUARE2”
相交,无论那里是否有物体......为什么?是什么原因造成的?我该如何解决?
编辑:
每次它认为它“找到”一个对象时,它都会点击 if 语句“SQUARE2”。当我点击屏幕的“中间”(这是可以绘制对象的地方)时,它只会找到一个交点,但它只显示屏幕中间左侧的第一个 if 语句和屏幕中间右侧的第二个 if 语句的交集
例如,它只认为它在标记为 X 的点处触摸了方 block 2,其中矩形是电话屏幕。
_________
| |
| |
|X X|
| |
|_______|
我为光线追踪调用的其他方法位于另一个项目中.. http://code.google.com/p/libgdx/source/browse/#svn/trunk/gdx/src/com/badlogic/gdx/math (Graphics 文件夹有 Perspective Camera,其中包含 getPickRay();
,Intersector
包含另一个)。
编辑2:看起来它正在选择正确的位置,物体可能在的位置,但它们目前可能不是由于世界旋转,所以它似乎只是在世界旋转方面有问题。这就是我旋转世界的方式......
public void onDrawFrame(GL10 gl) {
onDrawFrameCounter++;
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
bindCameraTexture(gl);
float bear = Global.bearing;
gl.glLoadIdentity();
gl.glNormal3f(0,0,1);
gl.glRotatef(bear, 0, 1, 0);
int e = 0;
for(int q=0; q < Global.cubes;q++){
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, e, 4);
e = e+4;
}
}
我应该如何调整我的代码,以便它能够识别对象何时实际出现在屏幕上?
最佳答案
旋转相机 - 你的相机类不支持的东西 - 然后使用它的 setMatrices 方法而不是
gl.glLoadIdentity();
gl.glNormal3f(0,0,1);
gl.glRotatef(bear, 0, 1, 0);
->你需要一个更好的相机类
关于java - 拾取对象不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3388205/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!