我在c ++项目中正确地包含/使用glm数学库(http://glm.g-truc.net/)时遇到了麻烦.由于glm是一个"仅标题"库,我想我可以用这一行包含它:
#include "glm/glm.hpp"
Run Code Online (Sandbox Code Playgroud)
起初这似乎是有效的,因为我可以创建和使用矩阵和向量.但是,当我尝试使用该glm::translate(...)函数时,我收到此错误:
error: ‘translate’ is not a member of ‘glm’
Run Code Online (Sandbox Code Playgroud)
在GLM网站上,他们建议包含带三角括号的库,如下所示:
#include <glm/glm.hpp>
Run Code Online (Sandbox Code Playgroud)
...但是考虑到它在项目目录结构中,认为我可以以其他方式包含它是不正确的?
我已经设置了下面的测试来说明我遇到的问题.该glm文件夹位于testglm.cpp文件旁边.
#include <iostream>
#include "glm/glm.hpp"
using namespace std;
int main(void) {
// works:
glm::mat4 testMatrix1 = glm::mat4(5.0f) * glm::mat4(2.0f);
cout << testMatrix1[0][0] << endl; // output: 10
// doesn't work - (error: ‘translate’ is not a member of ‘glm’):
glm::mat4 testMatrix2 = glm::translate(glm::mat4(1.0f), glm::vec3(1.0f));
}
Run Code Online (Sandbox Code Playgroud)
我正在使用来自终端的这个构建命令在osx上构建此测试:
g++ -o bin/glm_test src/testglm.cpp
Run Code Online (Sandbox Code Playgroud)
我不确定我的问题是否与我如何包括库,我如何使用它,或者我是如何构建项目有关.谷歌没有给我任何关于该错误消息的点击,所以我想知道我是否做了一些根本错误的事情.建议将不胜感激.谢谢.
我在ThreeJS中使用皮肤/骨骼动画.我有一个动画,我希望能够前后移动,并跳转到其中的不同位置,而不是通常的循环行为.
像这样创建动画,如下例所示:
var animation = new THREE.Animation( mesh, geometry.animation.name );
Run Code Online (Sandbox Code Playgroud)
我尝试使用负增量更新动画,以及直接设置animation.currentTime:
animation.currentTime = animationLocation;
Run Code Online (Sandbox Code Playgroud)
这些似乎只有在我向前推进时才有效,但是如果我向后移动动画会中断并且我收到错误:
THREE.Animation.update: Warning! Scale out of bounds: ... on bone ...
Run Code Online (Sandbox Code Playgroud)
实际上没有错误的一件事是调用stop()然后play()使用新的开始时间:
animation.stop();
animation.play( true, animationLocation );
Run Code Online (Sandbox Code Playgroud)
...但是,当我看到这些函数实际上在做什么时,它们涉及许多函数调用,循环,重置转换等.这似乎是一种可怕的方式,即使它作为一个黑客工作.
可能这个功能还没有存在,在这种情况下我会尝试挖掘并创建一个执行最少量工作的函数,但我希望还有另一种我没有找到的方法.
有人能帮忙吗?
[UPDATE]
作为我的进展的最新消息,我将发布我此时的最佳解决方案......
我拿出的内容stop()和play()功能,并剥离出尽我所能,作出关于特定值的一些假设已经已经被设置"播放()".
这看起来似乎不是最好的方法,但它的工作量比通过调用stop()那么少play().
这是我能够把它归结为:
THREE.Animation.prototype.gotoTime = function( time ) {
//clamp to duration of the animation:
time = THREE.Math.clamp( time, 0, this.length );
this.currentTime = time;
// reset key cache
var h, hl …Run Code Online (Sandbox Code Playgroud) 我们是Couch DB的新手,不确定如何使用文档修订号.特别是,我们不确定客户端应用程序是否应该知道此修订号,以及是否必须将其与每个保存请求一起发送回服务器以确保连续性.
我们的情况是我们在CouchDB和客户端应用程序之间有一个NodeJS服务器(一个用ActionScript 3编写的游戏).游戏世界被分解为网格,并且在短时间内可能会对单个图块进行多处更改,每个更改都会产生新的保存请求.由于无法保证两个同时发出的请求将按特定顺序到达服务器,因此我们需要确保只有在数据库数据比数据库中已有的数据更新时才会保存切片数据.
我们正在考虑使用我们附加到每个文档的自定义事务ID,但我们担心我们可能只是做错了,或者缺少CouchDB的一些基本行为(即"正确的方法")