Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--intern/ghost/intern/GHOST_SystemX11.cpp8
-rw-r--r--source/blender/blenkernel/BKE_scene.h2
-rw-r--r--source/blender/src/view.c60
-rw-r--r--source/gameengine/Converter/BL_BlenderDataConversion.cpp15
4 files changed, 51 insertions, 34 deletions
diff --git a/intern/ghost/intern/GHOST_SystemX11.cpp b/intern/ghost/intern/GHOST_SystemX11.cpp
index ff1bf51bbb5..3003e0b8b14 100644
--- a/intern/ghost/intern/GHOST_SystemX11.cpp
+++ b/intern/ghost/intern/GHOST_SystemX11.cpp
@@ -488,12 +488,12 @@ GHOST_SystemX11::processEvent(XEvent *xe)
data.changed = 1;
data.delta = xcme.data.s[8] - data.time;
data.time = xcme.data.s[8];
- data.tx = xcme.data.s[2];
- data.ty = xcme.data.s[3];
- data.tz = xcme.data.s[4];
+ data.tx = xcme.data.s[2] >> 2;
+ data.ty = xcme.data.s[3] >> 2;
+ data.tz = xcme.data.s[4] >> 2;
data.rx = xcme.data.s[5];
data.ry = xcme.data.s[6];
- data.rz = xcme.data.s[7];
+ data.rz =-xcme.data.s[7];
g_event = new GHOST_EventNDOF(getMilliSeconds(),
GHOST_kEventNDOFMotion,
window, data);
diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h
index c50f5498de9..2bd528ab8c8 100644
--- a/source/blender/blenkernel/BKE_scene.h
+++ b/source/blender/blenkernel/BKE_scene.h
@@ -53,7 +53,7 @@ struct RenderData;
}
/* note; doesn't work when scene is empty */
-#define SETLOOPER(s, b) sce= s, b= sce->base.first; b; b= (b->next?b->next:sce->set?(sce=sce->set)->base.first:NULL)
+#define SETLOOPER(s, b) sce= s, b= (Base*)sce->base.first; b; b= (Base*)(b->next?b->next:sce->set?(sce=sce->set)->base.first:NULL)
void free_avicodecdata(struct AviCodecData *acd);
diff --git a/source/blender/src/view.c b/source/blender/src/view.c
index b2132bc9c53..e103457c700 100644
--- a/source/blender/src/view.c
+++ b/source/blender/src/view.c
@@ -753,10 +753,11 @@ void viewmoveNDOFfly(int mode)
// Apply rotation
-
- rvec[0] = -dval[3];
- rvec[1] = -dval[4];
- rvec[2] = dval[5];
+ // Rotations feel relatively faster than translations only in fly mode, so
+ // we have no choice but to fix that here (not in the plugins)
+ rvec[0] = -0.5 * dval[3];
+ rvec[1] = -0.5 * dval[4];
+ rvec[2] = -0.5 * dval[5];
// rotate device x and y by view z
@@ -900,8 +901,7 @@ void viewmove(int mode)
return;
}
- // dist correction from other movement devices
-
+ // dist correction from other movement devices
if((dz_flag)||G.vd->dist==0) {
dz_flag = 0;
G.vd->dist = m_dist;
@@ -1284,6 +1284,8 @@ void viewmoveNDOF(int mode)
float reverse;
float diff[4];
float d, curareaX, curareaY;
+ float mat[3][3];
+ float upvec[3];
/* Sensitivity will control how fast the view rotates. The value was
* obtained experimentally by tweaking until the author didn't get dizzy watching.
@@ -1304,6 +1306,16 @@ void viewmoveNDOF(int mode)
use_sel = 1;
}
+ if((dz_flag)||G.vd->dist==0) {
+ dz_flag = 0;
+ G.vd->dist = m_dist;
+ upvec[0] = upvec[1] = 0;
+ upvec[2] = G.vd->dist;
+ Mat3CpyMat4(mat, G.vd->viewinv);
+ Mat3MulVecfl(mat, upvec);
+ VecAddf(G.vd->ofs, G.vd->ofs, upvec);
+ }
+
/*----------------------------------------------------
* sometimes this routine is called from headerbuttons
* viewmove needs to refresh the screen
@@ -1330,25 +1342,25 @@ void viewmoveNDOF(int mode)
filterNDOFvalues(fval);
- // put scaling back here, was previously in ghostwinlay
- fval[0] = fval[0] * (1.0f/800.0f);
- fval[1] = fval[1] * (1.0f/800.0f);
- fval[2] = fval[2] * (1.0f/800.0f);
- fval[3] = fval[3] * 0.00005f;
- fval[4] = fval[4] * 0.00005f;
- fval[5] = fval[5] * 0.00005f;
- fval[6] = fval[6] / 1000000.0f;
+ // put scaling back here, was previously in ghostwinlay
+ fval[0] = fval[0] * (1.0f/1200.0f);
+ fval[1] = fval[1] * (1.0f/1200.0f);
+ fval[2] = fval[2] * (1.0f/1200.0f);
+ fval[3] = fval[3] * 0.00005f;
+ fval[4] =-fval[4] * 0.00005f;
+ fval[5] = fval[5] * 0.00005f;
+ fval[6] = fval[6] / 1000000.0f;
- // scale more if not in perspective mode
- if (G.vd->persp == V3D_ORTHO) {
- fval[0] = fval[0] * 0.05f;
- fval[1] = fval[1] * 0.05f;
- fval[2] = fval[2] * 0.05f;
- fval[3] = fval[3] * 0.9f;
- fval[4] = fval[4] * 0.9f;
- fval[5] = fval[5] * 0.9f;
- zsens *= 8;
- }
+ // scale more if not in perspective mode
+ if (G.vd->persp == V3D_ORTHO) {
+ fval[0] = fval[0] * 0.05f;
+ fval[1] = fval[1] * 0.05f;
+ fval[2] = fval[2] * 0.05f;
+ fval[3] = fval[3] * 0.9f;
+ fval[4] = fval[4] * 0.9f;
+ fval[5] = fval[5] * 0.9f;
+ zsens *= 8;
+ }
/* set object offset */
diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
index 1be462c113f..9826d752f0e 100644
--- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp
+++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
@@ -88,6 +88,7 @@
#include "BKE_main.h"
#include "BKE_global.h"
#include "BKE_object.h"
+#include "BKE_scene.h"
#include "BL_SkinMeshObject.h"
#include "BL_SkinDeformer.h"
#include "BL_MeshDeformer.h"
@@ -1809,6 +1810,9 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
{
Scene *blenderscene = GetSceneForName(maggie, scenename);
+ // for SETLOOPER
+ Scene *sce;
+ Base *base;
// Get the frame settings of the canvas.
// Get the aspect ratio of the canvas as designed by the user.
@@ -1882,9 +1886,11 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
}
SetDefaultFaceType(blenderscene);
-
- Base *base = static_cast<Base*>(blenderscene->base.first);
- while(base)
+ // Let's support scene set.
+ // Beware of name conflict in linked data, it will not crash but will create confusion
+ // in Python scripting and in certain actuators (replace mesh). Linked scene *should* have
+ // no conflicting name for Object, Object data and Action.
+ for (SETLOOPER(blenderscene, base))
{
Object* blenderobject = base->object;
KX_GameObject* gameobj = gameobject_from_blenderobject(
@@ -2039,7 +2045,6 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
if (gameobj)
gameobj->Release();
- base = base->next;
}
if (blenderscene->camera) {
@@ -2049,7 +2054,7 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
}
// Set up armatures
- for (base = static_cast<Base*>(blenderscene->base.first); base; base=base->next){
+ for(SETLOOPER(blenderscene, base)){
if (base->object->type==OB_MESH){
Mesh *me = (Mesh*)base->object->data;