小编Jam*_*ote的帖子

Cubic Bezier曲线:最大梯度和碰撞避免?

我正在使用bezier曲线作为我的太空飞船在他们进站时停靠的路径.我有一个简单的算法来计算船舶在时间t沿着三次贝塞尔曲线的位置:

public class BezierMovement{
    public BezierMovement(){
        // start docking straight away in this test version
        initDocking();
    }

    private Vector3 p0;
    private Vector3 p1;
    private Vector3 p2;
    private Vector3 p3;

    private double tInc = 0.001d;
    private double t = tInc;

    protected void initDocking(){

        // get current location
        Vector3 location = getCurrentLocation();

        // get docking point
        Vector3 dockingPoint = getDockingPoint();

        // ship's normalised direction vector
        Vector3 direction = getDirection();

        // docking point's normalised direction vector
        Vector3 dockingDirection = getDockingDirection();

        // scalars to …
Run Code Online (Sandbox Code Playgroud)

java algorithm math bezier

6
推荐指数
1
解决办法
1219
查看次数

将相机旋转到一个点

我正在制作一个使用整个行星来制作地图的游戏.我使用这种技术对球形星球进行了镶嵌,现在正在添加相机控制.

球体的尺寸为1到-1,因此球体上的每个点也是标准化矢量.在任何时候,组成球体的六边形瓷砖之一是"选定的"瓷砖.然后,玩家可以使用d-pad将选择移动到相邻的区块.他们还可以使用模拟摇杆独立旋转相机

我需要做两件与所选瓷砖和相机有关的事情.首先,我需要能够将选择切换到最靠近相机的图块.其次,我需要将相机置于高亮显示的瓷砖上

球体位于原点上,相机位于点(0,0,1).图形引擎只允许我围绕X轴和Y轴旋转摄像机,所以为了解决第一个问题,我使用四元数旋转x(x)周围的点(0,0,1),然后找到y轴.相机所在的3D空间:

    private Quaternion quat = new Quaternion(0,0,0,0);
    private double[] output = new double[4];
    private double[] cam = new double[3];

    private double camX = 0;
    private double camY = 0;
    private double camZ = 1;


    private double[] getCamPosition(){

        quat.setAxisAngle(1, 0, 0, Math.toRadians(-graphicsEngine.getRotationX()));
        quat.RotateVector(camX, camY, camZ, output);            
        cam[0] = output[0];
        cam[1] = output[1];
        cam[2] = output[2];   

        quat.setAxisAngle(0, 1, 0, Math.toRadians(-graphicsEngine.getRotationY()));
        quat.RotateVector(cam[0], cam[1], cam[2], output);          
        cam[0] = output[0];
        cam[1] = output[1];
        cam[2] = output[2];

        return cam; …
Run Code Online (Sandbox Code Playgroud)

java opengl math

6
推荐指数
1
解决办法
375
查看次数

Android SQLite R-Tree - 如何安装模块?

http://www.sqlite.org/rtree.html表示r*树"作为合并的一部分包含在内但默认情况下是禁用的"并且启用它"只需使用SQLITE_ENABLE_RTREE C-preprocessor宏定义编译"

好吧,我想在我的Android应用程序中使用R-trees,但显然SQLite都已预先安装等.有没有办法在用户的手机/设备上启用它?

或者,是否可以使用NDK和SQLite的免费可用源代码?

sqlite android android-ndk r-tree

5
推荐指数
1
解决办法
4599
查看次数

Android 重叠视图和 OnClick

我有一个框架布局,其中一些布局作为第一个元素,另一个布局作为第二个元素(因此在第一个元素的顶部)。顶部布局是半透明的,因此您可以看到其下方底部布局中的任何内容:

<FrameLayout>
    <BottomLayout             
             android:onClick="BottomClicked">                 
             <Button android:onClick="ButtonClicked"/>
             <TextView/>
             <TextView/>
    </BottomLayout>
    <TopLayout
            android:background="@color/semi-transparent"
            android:onClick="TopClicked">
    </TopLayout>
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)

底部布局会随着时间的推移而改变,视图被添加/删除或设置为可见/不可见/消失。我希望能够为顶部布局及其下方的任何内容触发 onClick 事件。

例如,如果用户单击顶部布局的一部分,该部分也位于底部布局上的按钮上方,我想为顶部布局和底部布局上的按钮触发 onClick。目前,只有顶部布局的 onClick 被调用

编辑:

将问题编辑为更一般/不那么具体

android onclick

5
推荐指数
1
解决办法
4610
查看次数

在Android OpenGL ES中使用Wavefront .obj的纹理坐标的问题

我正在使用openGL ES编写一个Android应用程序.我遵循了一些在线教程并设法使用硬编码顶点/索引/纹理坐标加载纹理立方体

作为下一步,我为wavefront .obj文件编写了一个解析器.我使用教程中的顶点等制作了一个模拟文件,加载很好.

但是,当我使用使用3d建模包制作的文件时,所有纹理都会混乱

下面是我目前获取纹理坐标的方式:

首先,我将所有纹理坐标加载vt到一个大向量中

接下来我找到每个f三角形的前两个纹理坐标(所以f 1/2/3 2/5/2 3/4/1意味着我采用第2和第5纹理坐标.因为.obj从1开始计数而不是0,我从位置开始必须为-1,然后将位置乘以2作为x坐标位置,并对我的vt数组中的y坐标位置执行相同但+1

我采用刚刚找到的那些纹理坐标并将它们添加到另一个矢量中.

一旦我完成了所有顶点.我将矢量转换为FloatBuffer,将其传递给glTexCoordPointer我的draw方法

这是解析文件的代码:

private void openObjFile(String filename, Context context, GL10 gl){

    Vector<String> lines = openFile(filename, context); // opens the file

    Vector<String[]> tokens = new Vector<String[]>();

    Vector<Float> vertices = new Vector<Float>();
    Vector<Float> textureCoordinates = new Vector<Float>();
    Vector<Float> vertexNormals = new Vector<Float>();

    // tokenise
    for(int i = 0;i<lines.size();i++){
        String line = lines.get(i);
        tokens.add(line.split(" "));
    }

    for(int j = 0;j<tokens.size();j++){
        String[] linetokens = tokens.get(j); …
Run Code Online (Sandbox Code Playgroud)

android opengl-es texture-mapping wavefront .obj

2
推荐指数
1
解决办法
5040
查看次数